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); } }
// 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)); }
protected virtual void AppendDeleteCommandHeader( [NotNull] StringBuilder commandStringBuilder, SchemaQualifiedName schemaQualifiedName) { Check.NotNull(commandStringBuilder, "commandStringBuilder"); commandStringBuilder .Append("DELETE FROM ") .Append(DelimitIdentifier(schemaQualifiedName)); }
protected virtual void AppendFromClause( [NotNull] StringBuilder commandStringBuilder, SchemaQualifiedName schemaQualifiedName) { Check.NotNull(commandStringBuilder, "commandStringBuilder"); commandStringBuilder .AppendLine() .Append("FROM ") .Append(DelimitIdentifier(schemaQualifiedName)); }
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(); }
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(); }
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); }
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), ", "); }
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(); }
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(")"); } }
public abstract void AppendSelectAffectedCountCommand( [NotNull] StringBuilder commandStringBuilder, SchemaQualifiedName schemaQualifiedName);
public override void AppendSelectAffectedCountCommand(StringBuilder commandStringBuilder, SchemaQualifiedName schemaQualifiedName) { commandStringBuilder .Append("SELECT provider_specific_rowcount();" + Environment.NewLine); }