private void ParenthesizeExpressionIfNeeded(Predicate e, SqlBuilder result) { if (IsComplexExpression(e)) { result.Append("("); result.Append(e.Accept(this)); result.Append(")"); } else { result.Append(e.Accept(this)); } }
private SqlSelectStatement VisitFilterExpression(PredicateBinding input, Predicate predicate, bool negatePredicate) { Symbol fromSymbol; var result = VisitInputExpression(input.Predicate, input.VariableName, input.VariableType, out fromSymbol); if (!IsCompatible(result, PredicateType.Filter)) { result = CreateNewSelectStatement(result, input.VariableName, input.VariableType, out fromSymbol); } selectStatementStack.Push(result); symbolTable.EnterScope(); AddFromSymbol(result, input.VariableName, fromSymbol); if (negatePredicate) { result.Where.Append("NOT ("); } result.Where.Append(predicate.Accept(this)); if (negatePredicate) { result.Where.Append(")"); } symbolTable.ExitScope(); selectStatementStack.Pop(); return(result); }
private SqlSelectStatement VisitInputExpression(Predicate inputPredicate, string inputVarName, TypeUsage inputVarType, out Symbol fromSymbol) { SqlSelectStatement result; var sqlFragment = inputPredicate.Accept(this); result = sqlFragment as SqlSelectStatement; if (result == null) { result = new SqlSelectStatement(); WrapNonQueryExtent(result, sqlFragment, inputPredicate.PredicateType); } if (result.FromExtents.Count == 0) { fromSymbol = new Symbol(inputVarName, inputVarType); } else if (result.FromExtents.Count == 1) { fromSymbol = result.FromExtents[0]; } else { var joinSymbol = new JoinSymbol(inputVarName, inputVarType, result.FromExtents); joinSymbol.FlattenedExtentList = result.AllJoinExtents; fromSymbol = joinSymbol; result.FromExtents.Clear(); result.FromExtents.Add(fromSymbol); } return(result); }
private SqlSelectStatement VisitExpressionEnsureSqlStatement(Predicate e, bool addDefaultColumns, bool markAllDefaultColumnsAsUsed) { SqlSelectStatement result; switch (e.PredicateType) { case PredicateType.Project: case PredicateType.Filter: case PredicateType.GroupBy: case PredicateType.Sort: result = e.Accept(this) as SqlSelectStatement; break; default: Symbol fromSymbol; var inputVarName = "c"; symbolTable.EnterScope(); TypeUsage type = null; switch (e.PredicateType) { case PredicateType.Scan: case PredicateType.CrossJoin: case PredicateType.FullOuterJoin: case PredicateType.InnerJoin: case PredicateType.LeftOuterJoin: case PredicateType.CrossApply: case PredicateType.OuterApply: type = e.ResultType.GetElementTypeUsage(); break; default: type = TypeUsage.Create(e.ResultType.EdmType); break; } result = VisitInputExpression(e, inputVarName, type, out fromSymbol); AddFromSymbol(result, inputVarName, fromSymbol); symbolTable.ExitScope(); break; } if (addDefaultColumns && result.Select.IsEmpty) { var defaultColumns = AddDefaultColumns(result); if (markAllDefaultColumnsAsUsed) { foreach (var symbol in defaultColumns) { optionalColumnUsageManager.MarkAsUsed(symbol); } } } return(result); }
protected virtual string GetWhereClause(PropertyColumnMap mapping, Predicate predicate, QueryParameters queryParams) { var sqlWhere = predicate?.Accept( new PostgresPredicateVisitor( Schema, queryParams)); return(sqlWhere != null ? $"WHERE { sqlWhere }" : string.Empty); }