示例#1
0
 void ISqlElement.Render(RenderContext context)
 {
     context.Write(Name);
     context.Write('(');
     context.RenderDelimited(Parameters);
     context.Write(')');
 }
示例#2
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(';');
                }
            }
        }
示例#3
0
        /// <summary>
        /// Renders the where collection, adding AND and OR statements, to the specified .
        /// </summary>
        /// <param name="context">The rendering context.</param>
        void ISqlElement.Render(RenderContext context)
        {
            if (IsNested)
            {
                context.Write('(');
            }

            context.Render(Left ?? throw new InvalidCommandException("Left condition missing"));
            switch (BooleanOperator)
            {
            case BooleanOperator.And:
                context.Write(" AND ");
                break;

            case BooleanOperator.Or:
                context.Write(" OR ");
                break;

            default:
                throw new InvalidOperationException("Unknown operator value");
            }
            context.Render(Right ?? throw new InvalidCommandException("Right condition missing"));

            if (IsNested)
            {
                context.Write(')');
            }
        }
示例#4
0
 void ISqlElement.Render(RenderContext context)
 {
     context.WriteIdentifier(Name);
     context.Write(' ');
     context.Render(Type);
     foreach (var constraint in Constraints)
     {
         context.Write(' ');
         context.Render(constraint);
     }
 }
示例#5
0
 void ISqlElement.Render(RenderContext context)
 {
     if (Element is Table)
     {
         Element.Render(context);
         context.Write($" {Name}");
     }
     else
     {
         Element.Render(context);
         context.Write($" AS {Name}");
     }
 }
示例#6
0
 void ISqlElement.Render(RenderContext context)
 {
     context.WriteLine("BEGIN");
     context.RenderDelimited(this, context.LineDelimiter);
     context.WriteLine();
     context.Write("END");
 }
示例#7
0
文件: Raw.cs 项目: hnjm/trancesql
 void ISqlElement.Render(RenderContext context)
 {
     if (Value != null)
     {
         context.Write(Value);
     }
 }
示例#8
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(')');
        }
示例#9
0
文件: Order.cs 项目: hnjm/trancesql
        void ISqlElement.Render(RenderContext context)
        {
            Element.Render(context);
            switch (Direction)
            {
            case Direction.Ascending:
                context.Write(" ASC");
                break;

            case Direction.Descending:
                context.Write(" DESC");
                break;

            default:
                break;
            }
        }
示例#10
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.");
                    }
                }
示例#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(';');
        }
示例#12
0
文件: Delete.cs 项目: hnjm/trancesql
        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(';');
            }
        }
示例#13
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(");");
        }
示例#14
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(");");
        }
示例#15
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(')');
        }
示例#16
0
        void ISqlElement.Render(RenderContext context)
        {
            if (String.IsNullOrEmpty(ExplicitTypeName))
            {
                context.Write(context.Dialect.FormatType(Type, Parameters));
            }
            else
            {
                context.Write(ExplicitTypeName);
            }

            if (AllowNull)
            {
                context.Write(" NULL");
            }
            else
            {
                context.Write(" NOT NULL");
            }
        }
示例#17
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);
     }
 }
示例#18
0
        /// <inheritdoc/>
        public void Render(RenderContext context, BeginTransaction beginTransaction)
        {
            switch (beginTransaction.Isolation)
            {
            case null:
                context.Write("BEGIN TRANSACTION");
                break;

            case Isolation.ReadUncommitted:
                context.Write("BEGIN TRANSACTION ISOLATION LEVEL READ UNCOMMITTED");
                break;

            case Isolation.ReadCommitted:
                context.Write("BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED");
                break;

            case Isolation.RepeatableRead:
                context.Write("BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ");
                break;

            case Isolation.Serializable:
                context.Write("BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE");
                break;

            case Isolation.Snapshot:
                context.Write("BEGIN TRANSACTION ISOLATION LEVEL SNAPSHOT");
                break;

            default:
                throw new InvalidCommandException($"Unsupported isolation level '{beginTransaction.Isolation}'");
            }

            if (beginTransaction.ReadOnly.HasValue)
            {
                if (beginTransaction.Isolation != null)
                {
                    context.Write(',');
                }
                context.Write(beginTransaction.ReadOnly.Value ? " READ ONLY" : " READ WRITE");
            }
            context.Write(';');
        }
示例#19
0
        void ISqlElement.Render(RenderContext context)
        {
            context.WriteIdentifierPrefix(Schema);
            context.WriteIdentifierPrefix(Table);

            if (Name == "*")
            {
                // Don't format wildcard
                context.Write('*');
            }
            else
            {
                context.WriteIdentifier(Name);
            }
        }
示例#20
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);
            }
        }
示例#21
0
文件: Join.cs 项目: hnjm/trancesql
        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);
            }
        }
示例#22
0
 void ISqlElement.Render(RenderContext context)
 {
     context.Write("COMMIT TRANSACTION;");
 }
示例#23
0
 void ISqlElement.Render(RenderContext context)
 {
     context.Write("ROLLBACK TRANSACTION;");
 }
示例#24
0
文件: Table.cs 项目: hnjm/trancesql
 void ISqlElement.Render(RenderContext context)
 {
     context.WriteIdentifierPrefix(Schema);
     context.Write(Name);
 }
示例#25
0
 void ISqlElement.Render(RenderContext context)
 {
     context.Write('(');
     context.RenderDelimited(Items);
     context.Write(')');
 }
示例#26
0
 void ISqlElement.Render(RenderContext context)
 {
     context.Write(context.GetParameter(this));
 }
示例#27
0
 void ISqlElement.Render(RenderContext context)
 {
     context.Write("CREATE DATABASE ");
     context.WriteIdentifier(DatabaseName);
     context.Write(';');
 }