private static void AppendSqlLiteral( StringBuilder commandStringBuilder, IColumnModification modification, string?tableName, string?schema) { if (modification.TypeMapping == null) { var columnName = modification.ColumnName; if (tableName != null) { columnName = tableName + "." + columnName; if (schema != null) { columnName = schema + "." + columnName; } } throw new InvalidOperationException( RelationalStrings.UnsupportedDataOperationStoreType(modification.ColumnType, columnName)); } commandStringBuilder.Append(modification.TypeMapping.GenerateProviderValueSqlLiteral(modification.Value)); }
/// <summary> /// Appends a <c>WHERE</c> condition for the given column. /// </summary> /// <param name="commandStringBuilder"> The builder to which the SQL should be appended. </param> /// <param name="columnModification"> The column for which the condition is being generated. </param> /// <param name="useOriginalValue"> /// If <see langword="true" />, then the original value will be used in the condition, otherwise the current value will be used. /// </param> protected virtual void AppendWhereCondition( StringBuilder commandStringBuilder, IColumnModification columnModification, bool useOriginalValue) { Check.NotNull(commandStringBuilder, nameof(commandStringBuilder)); Check.NotNull(columnModification, nameof(columnModification)); SqlGenerationHelper.DelimitIdentifier(commandStringBuilder, columnModification.ColumnName); var parameterValue = useOriginalValue ? columnModification.OriginalValue : columnModification.Value; if (parameterValue == null) { commandStringBuilder.Append(" IS NULL"); } else { commandStringBuilder.Append(" = "); if (!columnModification.UseParameter) { AppendSqlLiteral(commandStringBuilder, columnModification, null, null); } else { SqlGenerationHelper.GenerateParameterNamePlaceholder( commandStringBuilder, useOriginalValue ? columnModification.OriginalParameterName ! : columnModification.ParameterName !); } } }
// workaround for GenerateBlockParameterName protected override void AppendWhereCondition(StringBuilder commandStringBuilder, IColumnModification columnModification, bool useOriginalValue) { SqlGenerationHelper.DelimitIdentifier(commandStringBuilder, columnModification.ColumnName); if ((useOriginalValue ? columnModification.OriginalValue : columnModification.Value) == null) { commandStringBuilder.Append(" IS NULL"); return; } commandStringBuilder.Append(" = "); if (!columnModification.UseCurrentValueParameter && !columnModification.UseOriginalValueParameter) { AppendSqlLiteral(commandStringBuilder, columnModification.Value, columnModification.Property); } else { ((IFbSqlGenerationHelper)SqlGenerationHelper).GenerateBlockParameterName(commandStringBuilder, useOriginalValue ? columnModification.OriginalParameterName : columnModification.ParameterName); } }
/// <summary> /// Appends a <c>WHERE</c> condition for the identity (i.e. key value) of the given column. /// </summary> /// <param name="commandStringBuilder"> The builder to which the SQL should be appended. </param> /// <param name="columnModification"> The column for which the condition is being generated. </param> protected abstract void AppendIdentityWhereCondition( StringBuilder commandStringBuilder, IColumnModification columnModification);
/// <summary> /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to /// the same compatibility standards as public APIs. It may be changed or removed without notice in /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// </summary> protected override void AppendIdentityWhereCondition(StringBuilder commandStringBuilder, IColumnModification columnModification) { Check.NotNull(commandStringBuilder, nameof(commandStringBuilder)); Check.NotNull(columnModification, nameof(columnModification)); SqlGenerationHelper.DelimitIdentifier(commandStringBuilder, "rowid"); commandStringBuilder.Append(" = ") .Append("last_insert_rowid()"); }
protected override void AppendIdentityWhereCondition(StringBuilder commandStringBuilder, IColumnModification columnModification) => commandStringBuilder .Append(SqlGenerationHelper.DelimitIdentifier(columnModification.ColumnName)) .Append(" = ") .Append("provider_specific_identity()");
protected override void AppendIdentityWhereCondition(StringBuilder commandStringBuilder, IColumnModification columnModification) => throw new InvalidOperationException();
string GetColumnType(IColumnModification column) { return(Dependencies.TypeMappingSource.GetMapping(column.Property).StoreType); }
/// <summary> /// Returns a value indicating whether the given modification represents an auto-incrementing column. /// </summary> /// <param name="modification">The column modification.</param> /// <returns><see langword="true" /> if the given modification represents an auto-incrementing column.</returns> protected virtual bool IsIdentityOperation(IColumnModification modification) => modification.IsKey && modification.IsRead;
protected override void AppendIdentityWhereCondition(StringBuilder commandStringBuilder, IColumnModification columnModification) { throw new NotSupportedException(); }