// This is without query optimization. private static Bamboo.Query.Planning.Node NaivePlan(object query, Bamboo.Query.Database database) { if (query is Bamboo.Query.Query.UnionStatement) { Bamboo.Query.Query.UnionStatement unionStatement = (Bamboo.Query.Query.UnionStatement)query; return(new UnionNode(NaivePlan(unionStatement.A, database), NaivePlan(unionStatement.B, database))); } else if (query is Bamboo.Query.Query.SelectStatement) { Bamboo.Query.Query.SelectStatement selectStatement = (Bamboo.Query.Query.SelectStatement)query; System.Collections.Hashtable tables = database.Lookup(GetNames(selectStatement)); // FROM string name = selectStatement.From; Bamboo.Query.Planning.Node node = new Bamboo.Query.Planning.TableScanNode(name, (Bamboo.Query.Table)tables[name]); // JOIN foreach (Bamboo.Query.Query.JoinClause joinClause in selectStatement.Joins) { name = GetTableName(joinClause.RightColumn); node = new Bamboo.Query.Planning.JoinNode(node, new Bamboo.Query.Planning.TableScanNode(name, (Bamboo.Query.Table)tables[name]), joinClause.LeftColumn, joinClause.RightColumn); } // WHERE if (selectStatement.Where != null) { node = new Bamboo.Query.Planning.WhereNode(node, selectStatement.Where); } // GROUP BY if (selectStatement.GroupBy.Count > 0) { node = new Bamboo.Query.Planning.GroupByNode(node, selectStatement.GroupBy, selectStatement.Select); } // SELECT node = new Bamboo.Query.Planning.SelectNode(node, selectStatement.Select); // ORDER BY if (selectStatement.OrderBy != null) { node = new Bamboo.Query.Planning.OrderByNode(node, selectStatement.OrderBy); } return(node); } else { throw new System.Exception("Invalid query."); } }
public static Bamboo.Query.Table Evaluate(object query, Bamboo.Query.Database database) { Bamboo.Query.Table T = new Bamboo.Query.Table(GetColumns(query)); Bamboo.Query.Planning.Node plan = Bamboo.Query.Planning.Planner.Plan(query, database); Bamboo.Query.Iterators.Iterator R = plan.CreateIterator(); R.Open(); System.Collections.IList r; while ((r = R.GetNext()) != null) { T.AddRow(r); } R.Close(); return(T); }
public static Bamboo.Query.Table Evaluate(string query, Bamboo.Query.Database database) { return(Evaluate(Bamboo.Query.Query.QueryParser.Parse(query), database)); }
public static Bamboo.Query.Planning.Node Plan(object query, Bamboo.Query.Database database) { return(NaivePlan(query, database)); }