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)); }
/// <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; }
/// <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); }