Exemplo n.º 1
0
 private static string[] GetNames(Bamboo.Query.Query.SelectStatement selectStatement)
 {
     string[] names = new string[1 + selectStatement.Joins.Count];
     names[0] = selectStatement.From;
     System.Collections.IList joins = selectStatement.Joins;
     for (int i = 0; i < joins.Count; i++)
     {
         names[i + 1] = GetTableName(((Bamboo.Query.Query.JoinClause)joins[i]).RightColumn);
     }
     return(names);
 }
Exemplo n.º 2
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.");
            }
        }
Exemplo n.º 3
0
        private static System.Collections.ICollection GetColumns(object query)
        {
            if (query is Bamboo.Query.Query.UnionStatement)
            {
                Bamboo.Query.Query.UnionStatement unionStatement = (Bamboo.Query.Query.UnionStatement)query;

                return(GetColumns(unionStatement.A));
            }
            else if (query is Bamboo.Query.Query.SelectStatement)
            {
                Bamboo.Query.Query.SelectStatement selectStatement = (Bamboo.Query.Query.SelectStatement)query;

                System.Collections.ArrayList columns = new System.Collections.ArrayList(selectStatement.Select.Count);
                foreach (Bamboo.Query.Query.Column column in selectStatement.Select)
                {
                    columns.Add(GetColumnName(column));
                }
                return(columns);
            }
            else
            {
                throw new System.Exception("Invalid query.");
            }
        }