Beispiel #1
0
 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));
     }
 }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }