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