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