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; }
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); }
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); } }