// //Requirements: // GROUP BY // HAVING // ORDER BY // ALL // DISTINCT // LIKE // MAX (?) // MIN (?) //Notes on joins //(1) Aliases are enforced once used for any given table //(2) Alias can be used for some tables, but not others // //New style: // select * from t1 cross join t2 // select * from t1 cross join t2 where t1.x = t2.x // [Note:CROSS JOIN allows a where clause, other JOIN ops do not, but require ON] // // LEFT OUTER JOIN <on> // RIGHT OUTER JOIN <on> // FULL OUTER JOIN <on> // JOIN <on> // CROSS JOIN <where> // // // //<select [all|distinct] <select_list> from <> where <> // [group by] [having] [order by] //OUTPUT: //(1) General complexity flags // A. BOOLEAN: JOIN // B. BOOLEAN: OLD JOIN // C. BOOLEAN: NEW JOIN // D. BOOLEAN: ON Clause // F. BOOLEAN: SELF-JOIN OCCURS // G: INT: NUMBER OF TABLES JOINED // E. BOOLEAN: UNARY Query // F. BOOLEAN: WBEM Refs/Assocs // // F. BOOLEAN: ALIASES // D. BOOLEAN: WQL 1.0 provider compatible simple query // F. BOOLEAN: WQL Temporal/Event extension // E. BOOLEAN: ORDER BY // F. BOOLEAN: GROUP BY // G. BOOLEAN: HAVING // H. SQL-89 COMPATIBLE // I. SQL-92 COMPATIBLE // F: DISTINCT // G: EQUIJOIN // H: THETA-JOIN <non equijoin> // // (2) Get number & list of classes/tables (NULL separated) // (3) Get list of selected column references in the output // (4) Get list of column names used in ON // (5) Get list of column names used in WHERE //(2) Select column list //(3) Add *= and =* operators //