/// <summary> /// Выполняет модификацию данных /// </summary> protected override ModificationResult ProcessModifyData(params ModificationStatement[] dmlStatements) { BeginTransaction(); try { List<ParameterValue> result = new List<ParameterValue>(); TaggedParametersHolder identities = new TaggedParametersHolder(); foreach (ModificationStatement root in dmlStatements) { ParameterValue res = ModifyRecords(root, identities); if (!object.ReferenceEquals(res, null)) result.Add(res); } CommitTransaction(); return new ModificationResult(result); } catch { RollbackTransaction(); throw; } }
/// <summary> /// Конструктор с указанным представителем форматирования запросов и параметрами /// </summary> /// <param name="formatter">Представитель форматирования запросов</param> /// <param name="identities">Представитель идентификации одинаковых параметров</param> /// <param name="parameters">Параметры</param> public OracleSecuredModifySqlGenerator(ISecuredSqlGeneratorFormatter formatter, TaggedParametersHolder identities, Dictionary<OperandValue, string> parameters) : base(formatter, identities, parameters) { this.formatterSequred = formatter; this.identitiesByTag = identities; this.commandParams = new QueryParameterCollection(); this.commandParamsNames = new List<string>(); }
/// <summary> /// Модификация записей по указанному выражению /// </summary> /// <param name="root">Выражение на модификацию записей</param> /// <param name="identities">Держатель одинаковых идентификаторов</param> /// <returns>Результат модификации</returns> /// <todo>Пакетное добавление данных (batch insert)</todo> protected virtual ParameterValue ModifyRecords(ModificationStatement root, TaggedParametersHolder identities) { // Кастомизированная модификация DBTableEx table = XPDictionaryInformer.TranslateAndGet(root.TableName); if (table.IsCustom) { ParameterValue result = null; if (root is InsertStatement) result = table.CustomPersistent.Insert(this, (InsertStatement)root); if (root is UpdateStatement) table.CustomPersistent.Update(this, (UpdateStatement)root); if (root is DeleteStatement) table.CustomPersistent.Delete(this, (DeleteStatement)root); return result; } // Обычная модификация Dictionary<OperandValue, string> parameters = new Dictionary<OperandValue, string>(); Query query = new OracleSecuredModifySqlGenerator(this, identities, parameters).GenerateSql(table, root); ParameterValue id = root is InsertStatement ? ((InsertStatement)root).IdentityParameter : null; ExecuteBlock(query, id); return id; }
protected override long GetIdentity(InsertStatement root, TaggedParametersHolder identitiesByTag) { root.IdentityColumn = root.IdentityColumn.ToLower(); return(base.GetIdentity(root, identitiesByTag)); }