Beispiel #1
0
        /// <summary>
        /// 添加批量删除操作
        /// </summary>
        /// <param name="commandStringBuilder">命令字符串创建器</param>
        /// <param name="variablesCommand">命令变量</param>
        /// <param name="modificationCommands">修改命令</param>
        /// <param name="commandPosition">命令位置</param>
        /// <param name="cursorPosition">游标位置</param>
        /// <returns></returns>
        public ResultSetMapping AppendBatchDeleteOperation(StringBuilder commandStringBuilder, StringBuilder variablesCommand, IReadOnlyList <ModificationCommand> modificationCommands, int commandPosition, ref int cursorPosition)
        {
            try
            {
                if (Check.IsTraceEnabled(m_oracleLogger?.Logger))
                {
                    Trace <DbLoggerCategory.Update> .Write(m_oracleLogger, LogLevel.Trace, OracleTraceTag.Entry, OracleTraceClassName.OracleUpdateSqlGenerator, OracleTraceFuncName.AppendBatchDeleteOperation);
                }

                string tableName = modificationCommands[commandPosition].TableName;
                string schema    = modificationCommands[commandPosition].Schema;
                List <ColumnModification> conditionOperations = modificationCommands[commandPosition].ColumnModifications.Where((ColumnModification o) => o.IsCondition).ToList();
                AppendDeleteCommand(commandStringBuilder, tableName, schema, conditionOperations);
                ResultSetMapping result = AppendSelectAffectedCountCommand(commandStringBuilder, cursorPosition);
                cursorPosition++;
                return(result);
            }
            catch (Exception ex)
            {
                if (Check.IsErrorEnabled(m_oracleLogger?.Logger))
                {
                    Trace <DbLoggerCategory.Update> .Write(m_oracleLogger, LogLevel.Error, OracleTraceTag.Error, OracleTraceClassName.OracleUpdateSqlGenerator, OracleTraceFuncName.AppendBatchDeleteOperation, ex.ToString());
                }
                throw;
            }
            finally
            {
                if (Check.IsTraceEnabled(m_oracleLogger?.Logger))
                {
                    Trace <DbLoggerCategory.Update> .Write(m_oracleLogger, LogLevel.Trace, OracleTraceTag.Exit, OracleTraceClassName.OracleUpdateSqlGenerator, OracleTraceFuncName.AppendBatchDeleteOperation);
                }
            }
        }
Beispiel #2
0
        private string GetBatchDeleteCommandText(int lastIndex)
        {
            StringBuilder    stringBuilder = new StringBuilder();
            ResultSetMapping value         = UpdateSqlGenerator.AppendBatchDeleteOperation(stringBuilder, _variablesCommand, ModificationCommands, lastIndex, ref _cursorPosition);

            CommandResultSet[lastIndex] = value;
            return(stringBuilder.ToString());
        }
Beispiel #3
0
        private string GetBatchInsertCommandText(int lastIndex)
        {
            if (_batchInsertCommands.Count == 0)
            {
                return(string.Empty);
            }
            StringBuilder    stringBuilder    = new StringBuilder();
            ResultSetMapping resultSetMapping = UpdateSqlGenerator.AppendBatchInsertOperation(stringBuilder, _variablesInsert, _batchInsertCommands, lastIndex - _batchInsertCommands.Count, ref _cursorPosition, _cursorPositionList);

            for (int i = lastIndex - _batchInsertCommands.Count; i < lastIndex; i++)
            {
                CommandResultSet[i] = resultSetMapping;
            }
            if (resultSetMapping != 0)
            {
                CommandResultSet[lastIndex - 1] = ResultSetMapping.LastInResultSet;
            }
            return(stringBuilder.ToString());
        }
 public override ResultSetMapping AppendBatchInsertOperation(StringBuilder commandStringBuilder, Dictionary <string, string> variablesInsert, IReadOnlyDictionary <ModificationCommand, int> modificationCommands, int commandPosition, ref int cursorPosition, List <int> _cursorPositionList)
 {
     try
     {
         if (m_oracleLogger != null && m_oracleLogger.Logger != null && m_oracleLogger.Logger.IsEnabled(LogLevel.Trace))
         {
             Trace <DbLoggerCategory.Update> .Write(m_oracleLogger, LogLevel.Trace, OracleTraceTag.Entry, OracleTraceClassName.OracleUpdateSqlGenerator, OracleTraceFuncName.AppendBatchInsertOperation);
         }
         commandStringBuilder.Clear();
         ResultSetMapping result = ResultSetMapping.NoResultSet;
         KeyValuePair <ModificationCommand, int> keyValuePair = modificationCommands.First();
         string tableName           = keyValuePair.Key.TableName;
         string schema              = keyValuePair.Key.Schema;
         ColumnModification[] array = keyValuePair.Key.ColumnModifications.Where((ColumnModification o) => o.IsRead).ToArray();
         string text = tableName;
         int    num  = 28 - commandPosition.ToString().Length;
         if (Encoding.UTF8.GetByteCount(text) > num)
         {
             text = OracleMigrationsSqlGeneratorSpacer.DeriveObjectName(null, text, num);
         }
         string nameVariable = $"{text}_{commandPosition}";
         if (array.Length != 0)
         {
             if (!variablesInsert.Any((KeyValuePair <string, string> p) => p.Key == nameVariable))
             {
                 StringBuilder stringBuilder = new StringBuilder();
                 stringBuilder.AppendLine("TYPE r" + nameVariable + " IS RECORD").AppendLine("(");
                 stringBuilder.AppendJoin(array, delegate(StringBuilder sb, ColumnModification cm)
                 {
                     sb.Append(SqlGenerationHelper.DelimitIdentifier(cm.ColumnName)).Append(" ").AppendLine(GetVariableType(cm));
                 }, ",").Append(")").AppendLine(SqlGenerationHelper.StatementTerminator);
                 stringBuilder.Append("TYPE t" + nameVariable + " IS TABLE OF r" + nameVariable).AppendLine(SqlGenerationHelper.StatementTerminator).Append("l" + nameVariable + " t" + nameVariable)
                 .AppendLine(SqlGenerationHelper.StatementTerminator);
                 variablesInsert.Add(nameVariable, stringBuilder.ToString());
             }
             commandStringBuilder.Append("l").Append(nameVariable).Append(" := ")
             .Append("t" + nameVariable)
             .Append("()")
             .AppendLine(SqlGenerationHelper.StatementTerminator);
             commandStringBuilder.Append("l" + nameVariable + ".extend(").Append(modificationCommands.Count).Append(")")
             .AppendLine(SqlGenerationHelper.StatementTerminator);
         }
         int num2 = 0;
         foreach (KeyValuePair <ModificationCommand, int> modificationCommand in modificationCommands)
         {
             IReadOnlyList <ColumnModification> columnModifications = modificationCommand.Key.ColumnModifications;
             ColumnModification[] array2          = columnModifications.Where((ColumnModification o) => o.IsRead).ToArray();
             ColumnModification[] writeOperations = columnModifications.Where((ColumnModification o) => o.IsWrite).ToArray();
             AppendInsertCommand(commandStringBuilder, tableName, schema, writeOperations, (IReadOnlyCollection <ColumnModification>)(object) array2);
             AppendReturnInsert(commandStringBuilder, nameVariable, array2, num2);
             num2++;
         }
         num2 = 0;
         foreach (KeyValuePair <ModificationCommand, int> modificationCommand2 in modificationCommands)
         {
             ColumnModification[] array3 = modificationCommand2.Key.ColumnModifications.Where((ColumnModification o) => o.IsRead).ToArray();
             if (array3.Length != 0)
             {
                 int value = modificationCommand2.Value;
                 AppendReturnCursor(commandStringBuilder, nameVariable, array3, num2, value);
                 result = ResultSetMapping.LastInResultSet;
             }
             num2++;
         }
         return(result);
     }
     catch (Exception ex)
     {
         if (m_oracleLogger != null && m_oracleLogger.Logger != null && m_oracleLogger.Logger.IsEnabled(LogLevel.Error))
         {
             Trace <DbLoggerCategory.Update> .Write(m_oracleLogger, LogLevel.Error, OracleTraceTag.Error, OracleTraceClassName.OracleUpdateSqlGenerator, OracleTraceFuncName.AppendBatchInsertOperation, ex.ToString());
         }
         throw;
     }
     finally
     {
         if (m_oracleLogger != null && m_oracleLogger.Logger != null && m_oracleLogger.Logger.IsEnabled(LogLevel.Trace))
         {
             Trace <DbLoggerCategory.Update> .Write(m_oracleLogger, LogLevel.Trace, OracleTraceTag.Exit, OracleTraceClassName.OracleUpdateSqlGenerator, OracleTraceFuncName.AppendBatchInsertOperation);
         }
     }
 }