Exemple #1
0
        internal gsWhereTermBase GetWhereTerm(ExistsPredicate existsPredicate, gsExistsOrNotExists existsOrNotExists)
        {
            gsWhereTermExistsOrNotExists whereTerm = new gsWhereTermExistsOrNotExists();

            whereTerm.ExistsType = existsOrNotExists;

            if (existsPredicate.Subquery.QueryExpression is QuerySpecification)
            {
                gsSelectQuery subQry = new gsSelectQuery();
                subQry.QryName      = $"subQry{gsSelectQuery.GetNextID()}";
                whereTerm.QueryName = subQry.QryName;

                QuerySpecification qrySpec = existsPredicate.Subquery.QueryExpression as QuerySpecification;

                gsSelectQueryParser qryParser = new gsSelectQueryParser();
                qryParser.ProcessQuerySpecification(qrySpec, subQry);

                whereTerm.Sql = subQry.ToString();
            }
            else
            {
                throw new NotImplementedException($"QuerySpecification {existsPredicate.Subquery.QueryExpression.GetType().Name} not supported");
            }

            return(whereTerm);
        }
 private void AddColumns(QuerySpecification qrySpec, gsSelectQuery qry)
 {
     foreach (var selectElement in qrySpec.SelectElements)
     {
         gsColumnParserBase colParser = gsColumnParserFactory.CreateParser(selectElement);
         gsSelectColumn     selCol    = colParser.Parse();
         qry.Columns.Add(selCol);
     }
 }
        private void AddDistinct(QuerySpecification qrySpec, gsSelectQuery qry)
        {
            if (qrySpec.UniqueRowFilter != UniqueRowFilter.Distinct)
            {
                return;
            }

            qry.Distinct = true;
        }
        private void AddWhere(QuerySpecification specExpr, gsSelectQuery qry)
        {
            if (specExpr.WhereClause == null)
            {
                return;
            }

            BooleanExpression searchCondition = specExpr.WhereClause.SearchCondition;

            qry.WhereClause = new gsWhereClauseParser().GetWhereClause(searchCondition);
        }
 internal void ProcessQuerySpecification(QuerySpecification qrySpec, gsSelectQuery qry)
 {
     AddTop(qrySpec, qry);
     AddDistinct(qrySpec, qry);
     AddFrom(qrySpec, qry);
     AddColumns(qrySpec, qry);
     AddJoins(qrySpec, qry);
     AddWhere(qrySpec, qry);
     AddGroupBy(qrySpec, qry);
     AddOrderBy(qrySpec, qry);
     AddHaving(qrySpec, qry);
 }
        private void AddHaving(QuerySpecification specExpr, gsSelectQuery qry)
        {
            if (specExpr.HavingClause == null)
            {
                return;
            }

            BooleanExpression searchCondition = specExpr.HavingClause.SearchCondition;
            var whereClauseParser             = new gsWhereClauseParser();

            qry.HavingPhrase = whereClauseParser.GetWhereClause(searchCondition);
        }
        private void AddOrderBy(QuerySpecification specExpr, gsSelectQuery qry)
        {
            if (specExpr.OrderByClause == null)
            {
                return;
            }

            foreach (ExpressionWithSortOrder orderByElement in specExpr.OrderByClause.OrderByElements)
            {
                gsOrderByTerm orderByTerm = new gsOrderByTermParser().GetOrderByTerm(orderByElement);
                qry.OrderByTerms.Add(orderByTerm);
            }
        }
        private void AddFrom(QuerySpecification specExpr, gsSelectQuery qry)
        {
            if (specExpr.FromClause == null)
            {
                throw new NotImplementedException("Must declare a base table");
            }
            if (specExpr.FromClause.TableReferences.Count > 1)
            {
                throw new NotImplementedException("FromClause.TableReferences.Count > 1 not supported");
            }

            var tableReference = specExpr.FromClause.TableReferences.First();

            qry.FromClause.BaseTable = new gsFromTermParser().GetBaseTable(tableReference);
        }
        private void AddTop(QuerySpecification qrySpec, gsSelectQuery qry)
        {
            if (qrySpec.TopRowFilter == null)
            {
                return;
            }

            if (qrySpec.TopRowFilter.Expression is IntegerLiteral)
            {
                var intLiteral = qrySpec.TopRowFilter.Expression as IntegerLiteral;
                qry.Top = Convert.ToInt32(intLiteral.Value);
            }
            else
            {
                throw new NotImplementedException($"TopRowFilter.Expression {qrySpec.TopRowFilter.Expression.GetType().Name} not supported");
            }
        }
        private void AddJoins(QuerySpecification specExpr, gsSelectQuery qry)
        {
            if (specExpr.FromClause.TableReferences.Count > 1)
            {
                throw new NotImplementedException("Multiple table references are not supported");
            }

            var tableReference = specExpr.FromClause.TableReferences.First();

            if (!(tableReference is QualifiedJoin))
            {
                return;
            }

            var joinsHlp = new gsJoinClauseParser();

            joinsHlp.GetJoins(tableReference as QualifiedJoin);
            qry.Joins = joinsHlp.Joins;
        }
Exemple #11
0
        internal gsWhereTermBase GetWhereTerm(InPredicate inPredicate, bool isNotIn)
        {
            gsWhereTermIn whereTerm  = new gsWhereTermIn();
            string        subQryName = $"subQry{gsSelectQuery.GetNextID()}";

            whereTerm.InType = isNotIn ? gsInOrNotIn.NotIn : gsInOrNotIn.In;

            whereTerm.Expression = gsScalarExpressionParserFactory.CreateParser(inPredicate.Expression, null).Parse();

            if (inPredicate.Subquery != null)
            {
                gsSelectQuery subQry = new gsSelectQuery();
                whereTerm.QueryName = subQry.QryName = subQryName;

                QuerySpecification qrySpec = inPredicate.Subquery.QueryExpression as QuerySpecification;

                gsSelectQueryParser qryParser = new gsSelectQueryParser();
                qryParser.ProcessQuerySpecification(qrySpec, subQry);

                whereTerm.Sql = subQry.ToString();
            }
            else if (inPredicate.Values.Count > 0)
            {
                List <string> values = new List <string>();

                foreach (ScalarExpression val in inPredicate.Values)
                {
                    string valueStr = Convert.ToString(gsScalarExpressionParserFactory.CreateParser(val, null).Parse().Value);
                    values.Add(valueStr);
                }

                whereTerm.values = values;
            }
            else
            {
                throw new NotImplementedException("InPredicate type not supported");
            }

            return(whereTerm);
        }
        internal gsFromTerm GetTable(QueryDerivedTable queryDerivedTable)
        {
            gsSubQueryFromTerm table = new gsSubQueryFromTerm();

            table.TableAlias = Convert.ToString(queryDerivedTable.Alias.Value);

            if (queryDerivedTable.QueryExpression is QuerySpecification)
            {
                gsSelectQuery      subQry  = new gsSelectQuery();
                QuerySpecification qrySpec = queryDerivedTable.QueryExpression as QuerySpecification;

                gsSelectQueryParser qryParser = new gsSelectQueryParser();
                qryParser.ProcessQuerySpecification(qrySpec, subQry);

                table.SubQuery = subQry;
            }
            else
            {
                throw new NotImplementedException($"QuerySpecification {queryDerivedTable.QueryExpression.GetType().Name} not supported");
            }

            return(table);
        }
Exemple #13
0
        public override gsSelectColumn Parse()
        {
            gsSubQueryColumn subQryCol = new gsSubQueryColumn();

            subQryCol.ColumnAlias = ColumnAlias;

            if (_ScalarExpression.QueryExpression is QuerySpecification)
            {
                gsSelectQuery      subQry  = new gsSelectQuery();
                QuerySpecification qrySpec = _ScalarExpression.QueryExpression as QuerySpecification;

                gsSelectQueryParser qryParser = new gsSelectQueryParser();
                qryParser.ProcessQuerySpecification(qrySpec, subQry);

                subQryCol.SubQuery = subQry;
            }
            else
            {
                throw new NotImplementedException($"QuerySpecification {_ScalarExpression.QueryExpression.GetType().Name} not supported");
            }

            return(subQryCol);
        }
        private void AddGroupBy(QuerySpecification qrySpec, gsSelectQuery qry)
        {
            if (qrySpec.GroupByClause == null)
            {
                return;
            }

            switch (qrySpec.GroupByClause.GroupByOption)
            {
            case GroupByOption.Cube:
                qry.GroupByWithCube = true;
                break;

            case GroupByOption.Rollup:
                qry.GroupByWithRollup = true;
                break;
            }

            foreach (var groupingSpec in qrySpec.GroupByClause.GroupingSpecifications)
            {
                gsGroupByTerm groupByTerm = new gsGroupByTermParser().GetGroupByTerm(groupingSpec);
                qry.GroupByTerms.Add(groupByTerm);
            }
        }