コード例 #1
0
        public virtual OperationBuilder <UpdateDataOperation> UpdateData(
            [NotNull] string table,
            [NotNull] string[] keyColumns,
            [NotNull] object[,] keyValues,
            [NotNull] string[] columns,
            [NotNull] object[,] values,
            [CanBeNull] string schema = null)
        {
            Check.NotEmpty(table, nameof(table));
            Check.NotNull(keyColumns, nameof(keyColumns));
            Check.NotNull(keyValues, nameof(keyValues));
            Check.NotNull(columns, nameof(columns));
            Check.NotNull(values, nameof(values));

            var operation = new UpdateDataOperation
            {
                Table      = table,
                Schema     = schema,
                KeyColumns = keyColumns,
                KeyValues  = keyValues,
                Columns    = columns,
                Values     = values
            };

            Operations.Add(operation);

            return(new OperationBuilder <UpdateDataOperation>(operation));
        }
コード例 #2
0
        protected virtual void Generate(
            [NotNull] UpdateDataOperation operation,
            [CanBeNull] IModel model,
            [NotNull] MigrationCommandListBuilder builder)
        {
            Check.NotNull(operation, nameof(operation));
            Check.NotNull(builder, nameof(builder));

            if (operation.Values.Length == 0)
            {
                return;
            }

            var rowCount      = operation.Values.GetLength(0);
            var valueCount    = operation.Values.GetLength(1);
            var keyValueCount = operation.KeyValues.GetLength(1);

            for (var i = 0; i < rowCount; i++)
            {
                builder
                .Append("UPDATE ")
                .AppendLine(Dependencies.SqlGenerationHelper.DelimitIdentifier(operation.Table, operation.Schema))
                .Append("SET ");

                for (var j = 0; j < valueCount; j++)
                {
                    if (j != 0)
                    {
                        builder
                        .AppendLine(",")
                        .Append("    ");
                    }

                    var value       = operation.Values[i, j];
                    var typeMapping = Dependencies.TypeMapper.GetMappingForValue(value);

                    builder.Append(
                        Dependencies.SqlGenerationHelper.DelimitIdentifier(operation.Columns[j]) +
                        " = " +
                        typeMapping.GenerateSqlLiteral(value));
                }

                builder
                .AppendLine()
                .Append("WHERE (");
                for (var j = 0; j < keyValueCount; j++)
                {
                    if (j != 0)
                    {
                        builder.Append(" AND ");
                    }

                    builder.Append(Dependencies.SqlGenerationHelper.DelimitIdentifier(operation.KeyColumns[j]));

                    var value = operation.KeyValues[i, j];
                    if (value == null)
                    {
                        builder.Append(" IS NULL");
                    }
                    else
                    {
                        var typeMapping = Dependencies.TypeMapper.GetMappingForValue(value);

                        builder
                        .Append(" = ")
                        .Append(typeMapping.GenerateSqlLiteral(value));
                    }
                }

                builder
                .Append(")")
                .AppendLine(Dependencies.SqlGenerationHelper.StatementTerminator);

                EndStatement(builder);
            }
        }