示例#1
0
        public virtual void AppendUpdateOperation(
            [NotNull] StringBuilder commandStringBuilder,
            SchemaQualifiedName schemaQualifiedName,
            [NotNull] IReadOnlyList <ColumnModification> operations)
        {
            Check.NotNull(commandStringBuilder, "commandStringBuilder");
            Check.NotNull(operations, "operations");

            var writeOperations     = operations.Where(o => o.IsWrite).ToArray();
            var conditionOperations = operations.Where(o => o.IsCondition).ToArray();
            var readOperations      = operations.Where(o => o.IsRead).ToArray();

            AppendUpdateCommand(commandStringBuilder, schemaQualifiedName, writeOperations, conditionOperations);

            if (readOperations.Length > 0)
            {
                var keyOperations = operations.Where(o => o.IsKey).ToArray();

                AppendSelectAffectedCommand(commandStringBuilder, schemaQualifiedName, readOperations, keyOperations);
            }
            else
            {
                AppendSelectAffectedCountCommand(commandStringBuilder, schemaQualifiedName);
            }
        }
示例#2
0
        // TODO: Consider adding a base class for all SQL generators (DDL, DML),
        // to avoid duplicating the five methods below.

        public virtual string DelimitIdentifier(SchemaQualifiedName schemaQualifiedName)
        {
            return
                ((schemaQualifiedName.IsSchemaQualified
                    ? DelimitIdentifier(schemaQualifiedName.Schema) + "."
                    : string.Empty)
                 + DelimitIdentifier(schemaQualifiedName.Name));
        }
示例#3
0
        protected virtual void AppendDeleteCommandHeader(
            [NotNull] StringBuilder commandStringBuilder,
            SchemaQualifiedName schemaQualifiedName)
        {
            Check.NotNull(commandStringBuilder, "commandStringBuilder");

            commandStringBuilder
            .Append("DELETE FROM ")
            .Append(DelimitIdentifier(schemaQualifiedName));
        }
示例#4
0
        protected virtual void AppendFromClause(
            [NotNull] StringBuilder commandStringBuilder,
            SchemaQualifiedName schemaQualifiedName)
        {
            Check.NotNull(commandStringBuilder, "commandStringBuilder");

            commandStringBuilder
            .AppendLine()
            .Append("FROM ")
            .Append(DelimitIdentifier(schemaQualifiedName));
        }
示例#5
0
        public virtual void AppendDeleteCommand(
            [NotNull] StringBuilder commandStringBuilder,
            SchemaQualifiedName schemaQualifiedName,
            [NotNull] IReadOnlyList <ColumnModification> conditionOperations)
        {
            Check.NotNull(commandStringBuilder, "commandStringBuilder");
            Check.NotNull(conditionOperations, "conditionOperations");

            AppendDeleteCommandHeader(commandStringBuilder, schemaQualifiedName);
            AppendWhereClause(commandStringBuilder, conditionOperations);
            commandStringBuilder.Append(BatchCommandSeparator).AppendLine();
        }
示例#6
0
        public virtual void AppendInsertCommand(
            [NotNull] StringBuilder commandStringBuilder,
            SchemaQualifiedName schemaQualifiedName,
            [NotNull] IReadOnlyList <ColumnModification> writeOperations)
        {
            Check.NotNull(commandStringBuilder, "commandStringBuilder");
            Check.NotNull(writeOperations, "writeOperations");

            AppendInsertCommandHeader(commandStringBuilder, schemaQualifiedName, writeOperations);
            AppendValues(commandStringBuilder, writeOperations);
            commandStringBuilder.Append(BatchCommandSeparator).AppendLine();
        }
示例#7
0
        public virtual void AppendDeleteOperation(
            [NotNull] StringBuilder commandStringBuilder,
            SchemaQualifiedName schemaQualifiedName,
            [NotNull] IReadOnlyList <ColumnModification> operations)
        {
            Check.NotNull(commandStringBuilder, "commandStringBuilder");
            Check.NotNull(operations, "operations");

            var conditionOperations = operations.Where(o => o.IsCondition).ToArray();

            AppendDeleteCommand(commandStringBuilder, schemaQualifiedName, conditionOperations);

            AppendSelectAffectedCountCommand(commandStringBuilder, schemaQualifiedName);
        }
示例#8
0
        protected virtual void AppendUpdateCommandHeader(
            [NotNull] StringBuilder commandStringBuilder,
            SchemaQualifiedName schemaQualifiedName,
            [NotNull] IReadOnlyList <ColumnModification> operations)
        {
            Check.NotNull(commandStringBuilder, "commandStringBuilder");
            Check.NotNull(operations, "operations");

            commandStringBuilder
            .Append("UPDATE ")
            .Append(DelimitIdentifier(schemaQualifiedName))
            .Append(" SET ")
            .AppendJoin(
                operations,
                (sb, v) => sb.Append(DelimitIdentifier(v.ColumnName)).Append(" = ").Append(v.ParameterName), ", ");
        }
示例#9
0
        public virtual void AppendSelectAffectedCommand(
            [NotNull] StringBuilder commandStringBuilder,
            SchemaQualifiedName schemaQualifiedName,
            [NotNull] IReadOnlyList <ColumnModification> readOperations,
            [NotNull] IReadOnlyList <ColumnModification> conditionOperations)
        {
            Check.NotNull(commandStringBuilder, "commandStringBuilder");
            Check.NotNull(readOperations, "readOperations");
            Check.NotNull(conditionOperations, "conditionOperations");

            AppendSelectCommandHeader(commandStringBuilder, readOperations);
            AppendFromClause(commandStringBuilder, schemaQualifiedName);
            // TODO: there is no notion of operator - currently all the where conditions check equality
            AppendWhereAffectedClause(commandStringBuilder, conditionOperations);
            commandStringBuilder.Append(BatchCommandSeparator).AppendLine();
        }
示例#10
0
        protected virtual void AppendInsertCommandHeader(
            [NotNull] StringBuilder commandStringBuilder,
            SchemaQualifiedName schemaQualifiedName,
            [NotNull] IReadOnlyList <ColumnModification> operations)
        {
            Check.NotNull(commandStringBuilder, "commandStringBuilder");
            Check.NotNull(operations, "operations");

            commandStringBuilder
            .Append("INSERT INTO ")
            .Append(DelimitIdentifier(schemaQualifiedName));

            if (operations.Count > 0)
            {
                commandStringBuilder
                .Append(" (")
                .AppendJoin(operations.Select(o => DelimitIdentifier(o.ColumnName)))
                .Append(")");
            }
        }
示例#11
0
 public abstract void AppendSelectAffectedCountCommand(
     [NotNull] StringBuilder commandStringBuilder,
     SchemaQualifiedName schemaQualifiedName);
示例#12
0
 public override void AppendSelectAffectedCountCommand(StringBuilder commandStringBuilder, SchemaQualifiedName schemaQualifiedName)
 {
     commandStringBuilder
     .Append("SELECT provider_specific_rowcount();" + Environment.NewLine);
 }