public MultipleRowDbCommandBuilder <MySqlCommand, MySqlParameter> DeleteByKeyList <TKey>(MySqlObjectName tableName, IEnumerable <TKey> keys, DeleteOptions options = DeleteOptions.None)
        {
            var primaryKeys = DatabaseMetadata.GetTableOrView(tableName).Columns.Where(c => c.IsPrimaryKey).ToList();

            if (primaryKeys.Count != 1)
            {
                throw new MappingException($"DeleteByKey operation isn't allowed on {tableName} because it doesn't have a single primary key.");
            }

            var keyList        = keys.AsList();
            var columnMetadata = primaryKeys.Single();

            string where;
            if (keys.Count() > 1)
            {
                where = columnMetadata.SqlName + " IN (" + string.Join(", ", keyList.Select((s, i) => "@Param" + i)) + ")";
            }
            else
            {
                where = columnMetadata.SqlName + " = @Param0";
            }

            var parameters = new List <MySqlParameter>();

            for (var i = 0; i < keyList.Count; i++)
            {
                var param = new MySqlParameter("@Param" + i, keyList[i]);
                if (columnMetadata.DbType.HasValue)
                {
                    param.MySqlDbType = columnMetadata.DbType.Value;
                }
                parameters.Add(param);
            }

            var table = DatabaseMetadata.GetTableOrView(tableName);

            if (!AuditRules.UseSoftDelete(table))
            {
                return(new MySqlDeleteMany(this, tableName, where, parameters, options));
            }

            UpdateOptions effectiveOptions = UpdateOptions.SoftDelete | UpdateOptions.IgnoreRowsAffected;

            if (options.HasFlag(DeleteOptions.UseKeyAttribute))
            {
                effectiveOptions = effectiveOptions | UpdateOptions.UseKeyAttribute;
            }

            return(new MySqlUpdateMany(this, tableName, null, where, parameters, parameters.Count, effectiveOptions));
        }
        public MultipleRowDbCommandBuilder <MySqlCommand, MySqlParameter> UpdateByKeyList <TArgument, TKey>(MySqlObjectName tableName, TArgument newValues, IEnumerable <TKey> keys, UpdateOptions options = UpdateOptions.None)
        {
            var primaryKeys = DatabaseMetadata.GetTableOrView(tableName).Columns.Where(c => c.IsPrimaryKey).ToList();

            if (primaryKeys.Count != 1)
            {
                throw new MappingException($"{nameof(UpdateByKeyList)} operation isn't allowed on {tableName} because it doesn't have a single primary key.");
            }

            var keyList        = keys.AsList();
            var columnMetadata = primaryKeys.Single();

            string where;
            if (keys.Count() > 1)
            {
                where = columnMetadata.SqlName + " IN (" + string.Join(", ", keyList.Select((s, i) => "@Param" + i)) + ")";
            }
            else
            {
                where = columnMetadata.SqlName + " = @Param0";
            }

            var parameters = new List <MySqlParameter>();

            for (var i = 0; i < keyList.Count; i++)
            {
                var param = new MySqlParameter("@Param" + i, keyList[i]);
                if (columnMetadata.DbType.HasValue)
                {
                    param.MySqlDbType = columnMetadata.DbType.Value;
                }
                parameters.Add(param);
            }

            return(new MySqlUpdateMany(this, tableName, newValues, where, parameters, parameters.Count, options));
        }
 IUpdateManyCommandBuilder <MySqlCommand, MySqlParameter> OnUpdateMany(MySqlObjectName tableName, object newValues, UpdateOptions options)
 {
     return(new MySqlUpdateMany(this, tableName, newValues, options));
 }
 ObjectDbCommandBuilder <MySqlCommand, MySqlParameter, TArgument> OnUpdateObject <TArgument>(MySqlObjectName tableName, TArgument argumentValue, UpdateOptions options) where TArgument : class
 {
     return(new MySqlUpdateObject <TArgument>(this, tableName, argumentValue, options));
 }
 TableDbCommandBuilder <MySqlCommand, MySqlParameter, MySqlLimitOption> OnFromTableOrView(MySqlObjectName tableOrViewName, string whereClause, object argumentValue)
 {
     return(new MySqlTableOrView(this, tableOrViewName, whereClause, argumentValue));
 }
 IUpdateManyCommandBuilder <MySqlCommand, MySqlParameter> OnUpdateMany(MySqlObjectName tableName, string updateExpression, object updateArgumentValue, UpdateOptions options)
 {
     return(new MySqlUpdateMany(this, tableName, updateExpression, updateArgumentValue, options));
 }
 TableDbCommandBuilder <MySqlCommand, MySqlParameter, MySqlLimitOption> OnFromTableOrView(MySqlObjectName tableOrViewName, object filterValue, FilterOptions filterOptions)
 {
     return(new MySqlTableOrView(this, tableOrViewName, filterValue, filterOptions));
 }
 MultipleRowDbCommandBuilder <MySqlCommand, MySqlParameter> OnDeleteMany(MySqlObjectName tableName, object filterValue, FilterOptions filterOptions)
 {
     return(new MySqlDeleteMany(this, tableName, filterValue, filterOptions));
 }
 MultipleRowDbCommandBuilder <MySqlCommand, MySqlParameter> OnDeleteMany(MySqlObjectName tableName, string whereClause, object argumentValue)
 {
     return(new MySqlDeleteMany(this, tableName, whereClause, argumentValue));
 }
Exemplo n.º 10
0
 /// <summary>
 /// Initializes a new instance of the <see cref="MySqlTableOrViewMetadata{TDbType}" /> class.
 /// </summary>
 /// <param name="name">The name.</param>
 /// <param name="isTable">if set to <c>true</c> is a table.</param>
 /// <param name="columns">The columns.</param>
 /// <param name="engine">The engine.</param>
 internal MySqlTableOrViewMetadata(MySqlObjectName name, bool isTable, IList <ColumnMetadata <TDbType> > columns, string engine) : base(name, isTable, columns)
 {
     Engine = engine;
 }
Exemplo n.º 11
0
 /// <summary>
 /// Returns true if the two objects are equal.
 /// </summary>
 /// <param name="other"></param>
 /// <returns></returns>
 /// <remarks>This is a case-insensitive comparison.</remarks>
 public bool Equals(MySqlObjectName other)
 {
     return(this == other);
 }