Example #1
0
        void ISqlElement.Render(RenderContext context)
        {
            if (context.Mode == RenderMode.Nested)
            {
                switch (Target)
                {
                case Column column:
                    context.WriteIdentifier(column.Name);
                    break;

                default:
                    context.Render(Target);
                    break;
                }
                context.Write(" = ");
                context.Render(Value);
            }
            else
            {
                using (context.EnterChildMode(RenderMode.Nested))
                {
                    context.Write("SET ");
                    context.Render(Target);

                    context.Write(" = ");
                    context.Render(Value);
                    context.Write(';');
                }
            }
        }
Example #2
0
 void ISqlElement.Render(RenderContext context)
 {
     context.WriteIdentifier(Name);
     context.Write(' ');
     context.Render(Type);
     foreach (var constraint in Constraints)
     {
         context.Write(' ');
         context.Render(constraint);
     }
 }
Example #3
0
        void ISqlElement.Render(RenderContext context)
        {
            using (context.EnterChildMode(RenderMode.Nested))
            {
                if (Left is null || Right is null)
                {
                    // A value is null, get the non-null value
                    var value = Left ?? Right;

                    if (value is null)
                    {
                        throw new InvalidCommandException("Both sides of a condition operation cannot be null.");
                    }

                    // Note that we are supporting binary operators Equal and NotEqual below to allow
                    // automatic conversion of null to IS NULL or IS NOT NULL clauses.

                    switch (OperationType)
                    {
                    case OperationType.Equal:
                    case OperationType.IsNull:
                        context.Render(value);
                        context.Write(" IS NULL");
                        return;

                    case OperationType.NotEqual:
                    case OperationType.IsNotNull:
                        context.Render(value);
                        context.Write(" IS NOT NULL");
                        return;

                    case OperationType.Exists:
                        context.Write("EXISTS ");
                        context.Render(value);
                        return;

                    case OperationType.NotExists:
                        context.Write("NOT EXISTS ");
                        context.Render(value);
                        return;

                    default:
                        throw new InvalidCommandException($"The binary operator '{OperationType}' requires two arguments.");
                    }
                }
Example #4
0
        void ISqlElement.Render(RenderContext context)
        {
            var output = OutputType.None;

            if (_returning?.Any() == true)
            {
                output = context.Dialect.OutputType;
                if (output == OutputType.None)
                {
                    throw new InvalidCommandException("This dialect does not support return clauses in delete statements.");
                }
            }

            using (context.EnterChildMode(RenderMode.Nested))
            {
                context.Write("DELETE FROM ");
                context.Render(_from.Value);

                // OUTPUT statements are rendered before where clauses
                if (output == OutputType.Output)
                {
                    context.WriteLine();
                    context.Write("OUTPUT ");
                    context.RenderDelimited(_returning);
                }

                if (Where != null)
                {
                    context.WriteLine();
                    context.Write("WHERE ");
                    context.Render(Where.Value);
                }

                // RETURNING statements are rendered after where clauses
                if (output == OutputType.Returning)
                {
                    context.WriteLine();
                    context.Write("RETURNING ");
                    context.RenderDelimited(_returning);
                }

                context.Write(';');
            }
        }
Example #5
0
        void ISqlElement.Render(RenderContext context)
        {
            if (Name == null)
            {
                throw new InvalidCommandException("Create table statement must specify a name.");
            }

            context.Write("CREATE TABLE ");
            context.Render(Name);
            context.WriteLine();
            context.WriteLine("(");
            context.RenderDelimited(Columns, "," + context.LineDelimiter);
            foreach (var constraint in Constraints)
            {
                context.WriteLine(",");
                context.Render(constraint);
            }
            context.WriteLine();
            context.Write(");");
        }
Example #6
0
        void ISqlElement.Render(RenderContext context)
        {
            Console.WriteLine("(CASE");

            foreach (var item in Cases)
            {
                Console.WriteLine(" WHEN ");
                context.Render(item.When.Value);
                Console.WriteLine(" THEN ");
                context.Render(item.Then);
            }

            if (Else != null)
            {
                Console.WriteLine(" ELSE ");
                context.Render(Else);
            }

            Console.WriteLine(" END)");
        }
Example #7
0
        void ISqlElement.Render(RenderContext context)
        {
            using (context.EnterChildMode(RenderMode.Nested))
            {
                context.Render(Left);
                switch (Symbol)
                {
                case ArithmeticOperator.Add:
                    context.Write(" + ");
                    break;

                case ArithmeticOperator.Subtract:
                    context.Write(" - ");
                    break;

                case ArithmeticOperator.Multiply:
                    context.Write(" * ");
                    break;

                case ArithmeticOperator.Divide:
                    context.Write(" / ");
                    break;

                case ArithmeticOperator.Modulo:
                    context.Write(" % ");
                    break;

                case ArithmeticOperator.BitShiftLeft:
                    context.Write(" << ");
                    break;

                case ArithmeticOperator.BitShiftRight:
                    context.Write(" >> ");
                    break;

                default:
                    break;
                }
                context.Render(Right);
            }
        }
Example #8
0
        void ISqlElement.Render(RenderContext context)
        {
            switch (JoinType)
            {
            case JoinType.Join:
                context.Write("\nJOIN ");
                break;

            case JoinType.Inner:
                context.Write("\nINNER JOIN ");
                break;

            case JoinType.LeftOuter:
                context.Write("\nLEFT JOIN ");
                break;

            case JoinType.RightOuter:
                context.Write("\nRIGHT JOIN ");
                break;

            case JoinType.FullOuter:
                context.Write("\nOUT JOIN ");
                break;

            case JoinType.Cross:
                context.Write("\nCROSS JOIN ");
                break;

            default:
                break;
            }

            context.Render(Table);

            if (On != null)
            {
                context.Write(" ON ");
                context.Render(On.Value);
            }
        }
Example #9
0
 void ISqlElement.Render(RenderContext context)
 {
     context.Write("IF (");
     context.Render(Condition?.Value ?? throw new InvalidCommandException("IF condition must not be null."));
     context.WriteLine(")");
     context.Render(Then ?? throw new InvalidCommandException("Then statement of IF condition must not be null."));
     if (Else != null)
     {
         context.WriteLine();
         context.WriteLine("ELSE");
         context.Render(Else);
     }
 }
Example #10
0
        void ISqlElement.Render(RenderContext context)
        {
            context.Write("CAST(");
            context.Render(Expression);
            context.Write(" AS ");
            if (As.HasValue)
            {
                context.Write(context.Dialect.FormatType(As.Value, AsParams));
            }
            else
            {
                context.Write(AsRaw);
            }

            context.Write(')');
        }
Example #11
0
        void ISqlElement.Render(RenderContext context)
        {
            context.Write("DROP ");
            switch (Type)
            {
            case DropType.Table:
                context.Write("TABLE ");
                break;

            case DropType.Constraint:
                throw new NotImplementedException();

            default:
                throw new InvalidCommandException($"Unrecognized drop type '{Type}'");
            }
            context.Render(Target);
            context.Write(';');
        }
Example #12
0
        void ISqlElement.Render(RenderContext context)
        {
            if (Unique)
            {
                context.Write("CREATE UNIQUE INDEX ");
            }
            else
            {
                context.Write("CREATE INDEX ");
            }

            context.WriteIdentifier(Name);
            context.WriteLine();
            context.Write("ON ");
            context.Render(On);
            context.Write('(');
            context.RenderDelimited(Columns);
            context.Write(");");
        }
Example #13
0
        void ISqlElement.Render(RenderContext context)
        {
            context.Write("CAST(");
            context.Render(Expression);
            context.Write(" AS ");
            if (As.HasValue)
            {
                context.Write(context.Dialect.FormatType(As.Value, AsParams));
            }
            else if (AsRaw != null)
            {
                context.Write(AsRaw);
            }
            else
            {
                throw new InvalidCommandException("Either 'As' or 'AsRaw' type name must be specified in cast expression.");
            }

            context.Write(')');
        }