public ICommandBuilder GetUpdateCommand(string tableName, IDictionary<string, object> data, SimpleExpression criteria) { var table = _schema.FindTable(tableName); _commandBuilder.Append(GetUpdateClause(table, data)); if (criteria != null ) { string whereStatement = null; if (criteria.GetOperandsOfType<ObjectReference>().Any(o => !o.GetOwner().GetName().Equals(tableName))) { if (table.PrimaryKey.Length == 1) { whereStatement = CreateWhereInStatement(criteria, table); } else if (table.PrimaryKey.Length > 1) { whereStatement = CreateWhereExistsStatement(criteria, table); } } else { whereStatement = _expressionFormatter.Format(criteria); } if (!string.IsNullOrEmpty(whereStatement)) _commandBuilder.Append(" where " + whereStatement); } return _commandBuilder; }
private IDictionary<string, object> Upsert(string tableName, IDictionary<string, object> data, SimpleExpression criteria, bool resultRequired, IDbConnection connection) { var finder = _transaction == null ? new AdoAdapterFinder(_adapter, connection) : new AdoAdapterFinder(_adapter, _transaction); var existing = finder.FindOne(tableName, criteria); if (existing != null) { // Don't update columns used as criteria var keys = criteria.GetOperandsOfType<ObjectReference>().Select(o => o.GetName().Homogenize()); var updateData = data.Where(kvp => keys.All(k => k != kvp.Key.Homogenize())).ToDictionary(); if (updateData.Count == 0) { return existing; } var commandBuilder = new UpdateHelper(_adapter.GetSchema()).GetUpdateCommand(tableName, updateData, criteria); if (_transaction == null) { _adapter.Execute(commandBuilder, connection); } else { _adapter.Execute(commandBuilder, _transaction); } return resultRequired ? finder.FindOne(tableName, criteria) : null; } var inserter = _transaction == null ? new AdoAdapterInserter(_adapter, connection) : new AdoAdapterInserter(_adapter, _transaction); return inserter.Insert(tableName, data, resultRequired); }
public ICommandBuilder GetUpdateCommand(string tableName, IDictionary<string, object> data, SimpleExpression criteria) { var table = _schema.FindTable(tableName); var updateClause = GetUpdateClause(table, data); if (string.IsNullOrWhiteSpace(updateClause)) throw new InvalidOperationException("No columns to update."); _commandBuilder.Append(updateClause); if (criteria != null ) { string whereStatement = null; if (criteria.GetOperandsOfType<ObjectReference>().Any(o => IsTableChain(tableName, o))) { if (table.PrimaryKey.Length == 1) { whereStatement = CreateWhereInStatement(criteria, table); } else if (table.PrimaryKey.Length > 1) { whereStatement = CreateWhereExistsStatement(criteria, table); } } else { whereStatement = _expressionFormatter.Format(criteria); } if (!string.IsNullOrEmpty(whereStatement)) _commandBuilder.Append(" where " + whereStatement); } return _commandBuilder; }
public ICommandBuilder GetUpdateCommand(string tableName, IDictionary <string, object> data, SimpleExpression criteria) { var table = _schema.FindTable(tableName); var updateClause = GetUpdateClause(table, data); if (string.IsNullOrWhiteSpace(updateClause)) { throw new InvalidOperationException("No columns to update."); } _commandBuilder.Append(updateClause); if (criteria != null) { string whereStatement = null; if (criteria.GetOperandsOfType <ObjectReference>().Any(o => IsTableChain(tableName, o))) { if (table.PrimaryKey.Length == 1) { whereStatement = CreateWhereInStatement(criteria, table); } else if (table.PrimaryKey.Length > 1) { whereStatement = CreateWhereExistsStatement(criteria, table); } } else { whereStatement = _expressionFormatter.Format(criteria); } if (!string.IsNullOrEmpty(whereStatement)) { _commandBuilder.Append(" where " + whereStatement); } } return(_commandBuilder); }
private IDictionary <string, object> Upsert(string tableName, IDictionary <string, object> data, SimpleExpression criteria, bool resultRequired, IDbConnection connection) { var finder = _transaction == null ? new AdoAdapterFinder(_adapter, connection) : new AdoAdapterFinder(_adapter, _transaction); var existing = finder.FindOne(tableName, criteria); if (existing != null) { // Don't update columns used as criteria var keys = criteria.GetOperandsOfType <ObjectReference>().Select(o => o.GetName().Homogenize()); var updateData = data.Where(kvp => keys.All(k => k != kvp.Key.Homogenize())).ToDictionary(); if (updateData.Count == 0) { return(existing); } var commandBuilder = new UpdateHelper(_adapter.GetSchema()).GetUpdateCommand(tableName, updateData, criteria); if (_transaction == null) { _adapter.Execute(commandBuilder, connection); } else { _adapter.Execute(commandBuilder, _transaction); } return(resultRequired ? finder.FindOne(tableName, criteria) : null); } var inserter = _transaction == null ? new AdoAdapterInserter(_adapter, connection) : new AdoAdapterInserter(_adapter, _transaction); return(inserter.Insert(tableName, data, resultRequired)); }