Esempio n. 1
0
        // 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.");
            }
        }
Esempio n. 2
0
 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);
 }
Esempio n. 3
0
 public static Bamboo.Query.Table Evaluate(string query, Bamboo.Query.Database database)
 {
     return(Evaluate(Bamboo.Query.Query.QueryParser.Parse(query), database));
 }
Esempio n. 4
0
 public static Bamboo.Query.Planning.Node Plan(object query, Bamboo.Query.Database database)
 {
     return(NaivePlan(query, database));
 }