Esempio n. 1
0
    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));
    }
Esempio n. 2
0
        /// <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);
        }
    }
Esempio n. 4
0
 /// <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);
Esempio n. 5
0
        /// <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()");
        }
Esempio n. 6
0
 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);
 }
Esempio n. 9
0
 /// <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;
Esempio n. 10
0
 protected override void AppendIdentityWhereCondition(StringBuilder commandStringBuilder, IColumnModification columnModification)
 {
     throw new NotSupportedException();
 }