/// <summary>
        /// get execute db command
        /// </summary>
        /// <param name="cmd">command</param>
        /// <returns></returns>
        DbExecuteCommand GetExecuteDbCommand(IQueryTranslator queryTranslator, RdbCommand cmd)
        {
            DbExecuteCommand executeCommand = null;

            switch (cmd.Operate)
            {
            case OperateType.Insert:
                executeCommand = GetInsertExecuteDbCommand(queryTranslator, cmd);
                break;

            case OperateType.Update:
                executeCommand = GetUpdateExecuteDbCommand(queryTranslator, cmd);
                break;

            case OperateType.Delete:
                executeCommand = GetDeleteExecuteDbCommand(queryTranslator, cmd);
                break;
            }
            return(executeCommand);
        }
        /// <summary>
        /// get execute db command
        /// </summary>
        /// <param name="cmd">command</param>
        /// <returns></returns>
        DbExecuteCommand GetExecuteDbCommand(IQueryTranslator queryTranslator, RdbCommand cmd)
        {
            if (cmd.ExecuteMode == CommandExecuteMode.CommandText)
            {
                return(new DbExecuteCommand()
                {
                    CommandText = cmd.CommandText,
                    Parameters = ParseParameters(cmd.Parameters),
                    CommandType = GetCommandType(cmd)
                });
            }
            DbExecuteCommand executeCommand = null;

            switch (cmd.Operate)
            {
            case OperateType.Insert:
                executeCommand = GetInsertExecuteDbCommand(queryTranslator, cmd);
                break;

            case OperateType.Update:
                executeCommand = GetUpdateExecuteDbCommand(queryTranslator, cmd);
                break;

            case OperateType.Delete:
                executeCommand = GetDeleteExecuteDbCommand(queryTranslator, cmd);
                break;

            default:
                executeCommand = new DbExecuteCommand()
                {
                    CommandText = cmd.CommandText,
                    Parameters  = ParseParameters(cmd.Parameters),
                    CommandType = GetCommandType(cmd)
                };
                break;
            }
            return(executeCommand);
        }
Exemplo n.º 3
0
        /// <summary>
        /// execute command
        /// </summary>
        /// <typeparam name="T">data type</typeparam>
        /// <param name="server">server</param>
        /// <param name="executeOption">execute option</param>
        /// <param name="cmds">command</param>
        /// <returns>data numbers</returns>
        public async Task <int> ExecuteAsync(ServerInfo server, CommandExecuteOption executeOption, params ICommand[] cmds)
        {
            #region group execute commands

            IQueryTranslator        translator      = QueryTranslator.GetTranslator(server);
            List <DbExecuteCommand> executeCommands = new List <DbExecuteCommand>();
            var batchExecuteConfig   = DataManager.GetBatchExecuteConfig(server.ServerType) ?? BatchExecuteConfig.Default;
            var groupStatementsCount = batchExecuteConfig.GroupStatementsCount;
            groupStatementsCount = groupStatementsCount < 0 ? 1 : groupStatementsCount;
            var groupParameterCount = batchExecuteConfig.GroupParametersCount;
            groupParameterCount = groupParameterCount < 0 ? 1 : groupParameterCount;
            StringBuilder commandTextBuilder = new StringBuilder();
            CmdParameters parameters         = null;
            int           statementsCount    = 0;
            bool          forceReturnValue   = false;
            foreach (var cmd in cmds)
            {
                DbExecuteCommand executeCommand = GetExecuteDbCommand(translator, cmd as RdbCommand);
                if (executeCommand == null)
                {
                    continue;
                }
                if (executeCommand.PerformAlone)
                {
                    if (statementsCount > 0)
                    {
                        executeCommands.Add(new DbExecuteCommand()
                        {
                            CommandText      = commandTextBuilder.ToString(),
                            CommandType      = CommandType.Text,
                            ForceReturnValue = true,
                            Parameters       = parameters
                        });
                        statementsCount = 0;
                        translator.ParameterSequence = 0;
                        commandTextBuilder.Clear();
                        parameters = null;
                    }
                    executeCommands.Add(executeCommand);
                    continue;
                }
                commandTextBuilder.AppendLine(executeCommand.CommandText);
                parameters        = parameters == null ? executeCommand.Parameters : parameters.Union(executeCommand.Parameters);
                forceReturnValue |= executeCommand.ForceReturnValue;
                statementsCount++;
                if (translator.ParameterSequence >= groupParameterCount || statementsCount >= groupStatementsCount)
                {
                    executeCommands.Add(new DbExecuteCommand()
                    {
                        CommandText      = commandTextBuilder.ToString(),
                        CommandType      = CommandType.Text,
                        ForceReturnValue = true,
                        Parameters       = parameters
                    });
                    statementsCount = 0;
                    translator.ParameterSequence = 0;
                    commandTextBuilder.Clear();
                    parameters = null;
                }
            }
            if (statementsCount > 0)
            {
                executeCommands.Add(new DbExecuteCommand()
                {
                    CommandText      = commandTextBuilder.ToString(),
                    CommandType      = CommandType.Text,
                    ForceReturnValue = true,
                    Parameters       = parameters
                });
            }

            #endregion

            return(await ExecuteCommandAsync(server, executeOption, executeCommands, executeOption?.ExecuteByTransaction ?? cmds.Length > 1).ConfigureAwait(false));
        }