示例#1
0
        public override bool VisitExprIdentityInsert(ExprIdentityInsert exprIdentityInsert, IExpr?parent)
        {
            if (exprIdentityInsert.IdentityColumns.Count < 1)
            {
                return(exprIdentityInsert.Insert.Accept(this, exprIdentityInsert));
            }

            this.Builder.Append("SET IDENTITY_INSERT ");
            exprIdentityInsert.Insert.Target.Accept(this, exprIdentityInsert);
            this.Builder.Append(" ON;");

            var result = exprIdentityInsert.Insert.Accept(this, exprIdentityInsert);

            this.Builder.Append(";SET IDENTITY_INSERT ");
            exprIdentityInsert.Insert.Target.Accept(this, exprIdentityInsert);
            this.Builder.Append(" OFF;");
            return(result);
        }
示例#2
0
 public override bool VisitExprOffsetFetch(ExprOffsetFetch exprOffsetFetch, IExpr?parent)
 {
     return(this.VisitExprOffsetFetchCommon(exprOffsetFetch, parent));
 }
示例#3
0
 protected override void AppendSelectTop(ExprValue top, IExpr?parent)
 {
     //N/A
 }
示例#4
0
 public override bool VisitExprTypeXml(ExprTypeXml exprTypeXml, IExpr?arg)
 {
     this.Builder.Append("xml");
     return(true);
 }
示例#5
0
 public override bool VisitExprTableFullName(ExprTableFullName exprTableFullName, IExpr?parent)
 => this.VisitExprTableFullNameCommon(exprTableFullName, parent);
示例#6
0
 public override bool VisitExprTypeDouble(ExprTypeDouble exprTypeDouble, IExpr?parent)
 {
     this.Builder.Append("float");
     return(true);
 }
示例#7
0
 public override bool VisitExprTypeGuid(ExprTypeGuid exprTypeGuid, IExpr?parent)
 {
     this.Builder.Append("uniqueidentifier");
     return(true);
 }
示例#8
0
        private void GenericUpdate(ExprTable targetIn, IReadOnlyList <ExprColumnSetClause> sets, IExprTableSource?source, ExprBoolean?filter, IExpr?parent)
        {
            this.AssertNotEmptyList(sets, "'UPDATE' statement should have at least one set clause");

            IExprColumnSource target = targetIn.FullName;

            if (targetIn.Alias != null)
            {
                target = targetIn.Alias;
                source ??= targetIn;
            }

            this.Builder.Append("UPDATE ");
            target.Accept(this, parent);

            this.Builder.Append(" SET ");
            this.AcceptListComaSeparated(sets, parent);

            if (source != null)
            {
                this.Builder.Append(" FROM ");
                source.Accept(this, parent);
            }
            if (filter != null)
            {
                this.Builder.Append(" WHERE ");
                filter.Accept(this, parent);
            }
        }
示例#9
0
 public override bool VisitExprDelete(ExprDelete exprDelete, IExpr?parent)
 {
     this.GenericDelete(exprDelete.Target, null, exprDelete.Source, exprDelete.Filter, exprDelete);
     return(true);
 }
示例#10
0
 public override bool VisitExprInsertQuery(ExprInsertQuery exprInsertQuery, IExpr?parent)
 {
     return(this.VisitExprInsertQueryCommon(exprInsertQuery, parent));
 }
示例#11
0
 public override bool VisitExprUpdate(ExprUpdate exprUpdate, IExpr?parent)
 {
     this.GenericUpdate(exprUpdate.Target, exprUpdate.SetClause, exprUpdate.Source, exprUpdate.Filter, exprUpdate);
     return(true);
 }
示例#12
0
        public override bool VisitExprInsertOutput(ExprInsertOutput exprInsertOutput, IExpr?parent)
        {
            this.GenericInsert(exprInsertOutput.Insert,
                               () =>
            {
                exprInsertOutput.OutputColumns.AssertNotEmpty("INSERT OUTPUT cannot be empty");
                this.Builder.Append("OUTPUT ");
                for (int i = 0; i < exprInsertOutput.OutputColumns.Count; i++)
                {
                    if (i != 0)
                    {
                        this.Builder.Append(',');
                    }

                    this.Builder.Append("INSERTED.");
                    exprInsertOutput.OutputColumns[i].Accept(this, exprInsertOutput);
                }
            },
                               null);
            return(true);
        }
示例#13
0
 public override bool VisitExprDerivedTableValues(ExprDerivedTableValues derivedTableValues, IExpr?parent)
 {
     return(this.VisitExprDerivedTableValuesCommon(derivedTableValues, parent));
 }
示例#14
0
 public override bool VisitExprDbSchema(ExprDbSchema exprDbSchema, IExpr?parent)
 {
     return(this.VisitExprDbSchemaCommon(exprDbSchema, parent));
 }
示例#15
0
 public override bool VisitExprTypeInt32(ExprTypeInt32 exprTypeInt32, IExpr?parent)
 {
     this.Builder.Append("int");
     return(true);
 }
示例#16
0
 public override bool VisitExprDeleteOutput(ExprDeleteOutput exprDeleteOutput, IExpr?parent)
 {
     this.GenericDelete(exprDeleteOutput.Delete.Target, exprDeleteOutput.OutputColumns, exprDeleteOutput.Delete.Source, exprDeleteOutput.Delete.Filter, exprDeleteOutput);
     return(true);
 }
示例#17
0
 public override bool VisitExprTypeInt64(ExprTypeInt64 exprTypeInt64, IExpr?parent)
 {
     this.Builder.Append("bigint");
     return(true);
 }
示例#18
0
 public override bool VisitExprCast(ExprCast exprCast, IExpr?parent)
 {
     return(this.VisitExprCastCommon(exprCast, parent));
 }
示例#19
0
        public override bool VisitExprTypeDateTime(ExprTypeDateTime exprTypeDateTime, IExpr?parent)
        {
            if (exprTypeDateTime.IsDate)
            {
                this.Builder.Append("date");
            }
            else
            {
                this.Builder.Append("datetime");
            }

            return(true);
        }
示例#20
0
        private void GenericDelete(ExprTable targetIn, IReadOnlyList <ExprAliasedColumn>?output, IExprTableSource?source, ExprBoolean?filter, IExpr?parent)
        {
            IExprColumnSource target = targetIn.FullName;

            if (targetIn.Alias != null)
            {
                target = targetIn.Alias;
                source ??= targetIn;
            }

            this.Builder.Append("DELETE ");
            target.Accept(this, parent);

            if (output != null)
            {
                this.AssertNotEmptyList(output, "Output list in 'DELETE' statement cannot be empty");
                this.Builder.Append(" OUTPUT ");
                for (int i = 0; i < output.Count; i++)
                {
                    if (i != 0)
                    {
                        this.Builder.Append(',');
                    }

                    this.Builder.Append("DELETED.");

                    var col = output[i];

                    if (col.Column.Source == null)
                    {
                        col.Accept(this, parent);
                    }
                    else
                    {
                        new ExprAliasedColumnName(col.Column.ColumnName, col.Alias).Accept(this, parent);
                    }
                }
            }

            if (source != null)
            {
                this.Builder.Append(" FROM ");
                source.Accept(this, parent);
            }
            if (filter != null)
            {
                this.Builder.Append(" WHERE ");
                filter.Accept(this, parent);
            }
        }
示例#21
0
        public override bool VisitExprTypeFixSizeString(ExprTypeFixSizeString exprTypeFixSizeString, IExpr?arg)
        {
            if (exprTypeFixSizeString.IsUnicode)
            {
                this.AppendName("nchar");
            }
            else
            {
                this.AppendName("char");
            }

            this.Builder.Append('(');
            this.Builder.Append(exprTypeFixSizeString.Size.ToString());
            this.Builder.Append(')');

            return(true);
        }
示例#22
0
 public override bool VisitExprTypeBoolean(ExprTypeBoolean exprTypeBoolean, IExpr?parent)
 {
     this.Builder.Append("bit");
     return(true);
 }
示例#23
0
 public override bool VisitExprGetUtcDate(ExprGetUtcDate exprGetUtcDate, IExpr?parent)
 {
     this.Builder.Append("GETUTCDATE()");
     return(true);
 }
示例#24
0
 public override bool VisitExprTypeByte(ExprTypeByte exprTypeByte, IExpr?parent)
 {
     this.Builder.Append("tinyint");
     return(true);
 }
示例#25
0
 protected override void AppendSelectTop(ExprValue top, IExpr?parent)
 {
     this.Builder.Append("TOP ");
     top.Accept(this, top);
     this.Builder.Append(' ');
 }
示例#26
0
        public override bool VisitExprTypeFixSizeByteArray(ExprTypeFixSizeByteArray exprTypeFixSizeByteArray, IExpr?arg)
        {
            this.Builder.Append("binary(");
            this.Builder.Append(exprTypeFixSizeByteArray.Size.ToString());
            this.Builder.Append(')');

            return(true);
        }
示例#27
0
 public override bool VisitExprStringConcat(ExprStringConcat exprStringConcat, IExpr?parent)
 {
     exprStringConcat.Left.Accept(this, exprStringConcat);
     this.Builder.Append("||");
     exprStringConcat.Right.Accept(this, exprStringConcat);
     return(true);
 }
示例#28
0
 public override bool VisitExprTypeInt16(ExprTypeInt16 exprTypeInt16, IExpr?parent)
 {
     this.Builder.Append("smallint");
     return(true);
 }
示例#29
0
 protected override void AppendSelectLimit(ExprValue top, IExpr?parent)
 {
     this.Builder.Append(" LIMIT ");
     top.Accept(this, parent);
 }
示例#30
0
 public override bool VisitExprInsert(ExprInsert exprInsert, IExpr?parent)
 {
     this.GenericInsert(exprInsert, null, null);
     return(true);
 }