/// <summary>
        /// get insert execute DbCommand
        /// </summary>
        /// <param name="translator">translator</param>
        /// <param name="cmd">cmd</param>
        /// <returns></returns>
        DbExecuteCommand GetInsertExecuteDbCommand(IQueryTranslator translator, RdbCommand cmd)
        {
            string        cmdText     = string.Empty;
            CmdParameters parameters  = null;
            CommandType   commandType = GetCommandType(cmd);

            if (cmd.ExecuteMode == CommandExecuteMode.CommandText)
            {
                cmdText    = cmd.CommandText;
                parameters = ParseParameters(cmd.Parameters);
            }
            else
            {
                string objectName         = DataManager.GetEntityObjectName(ServerType.SQLServer, cmd.EntityType, cmd.ObjectName);
                var    fields             = DataManager.GetEditFields(ServerType.SQLServer, cmd.EntityType);
                var    insertFormatResult = FormatInsertFields(fields, cmd.Parameters, translator.ParameterSequence);
                if (insertFormatResult == null)
                {
                    return(null);
                }
                cmdText = string.Format("INSERT INTO [{0}] ({1}) VALUES ({2});"
                                        , objectName
                                        , string.Join(",", insertFormatResult.Item1)
                                        , string.Join(",", insertFormatResult.Item2));
                parameters = insertFormatResult.Item3;
                translator.ParameterSequence += fields.Count;
            }
            return(new DbExecuteCommand()
            {
                CommandText = cmdText,
                CommandType = commandType,
                ForceReturnValue = cmd.MustReturnValueOnSuccess,
                Parameters = parameters
            });
        }
Esempio n. 2
0
        /// <summary>
        /// verify command
        /// </summary>
        /// <param name="cmds"></param>
        Tuple <IEnumerable <RdbCommand>, bool> VerifyCommand(params ICommand[] cmds)
        {
            if (cmds == null || !cmds.Any())
            {
                throw new Exception("At Least Special One Execute Command");
            }
            bool transaction = false;
            List <RdbCommand> rdbCommandList = new List <RdbCommand>();

            foreach (var cmd in cmds)
            {
                if (cmd == null)
                {
                    throw new Exception("Null Command");
                }
                RdbCommand rdbCmd = cmd as RdbCommand;
                if (rdbCmd == null)
                {
                    throw new Exception("Command Is Not RDB Command");
                }
                transaction = transaction && rdbCmd.TransactionCommand;
                rdbCommandList.Add(rdbCmd);
            }
            transaction = transaction || rdbCommandList.Count > 1;
            return(new Tuple <IEnumerable <RdbCommand>, bool>(rdbCommandList, transaction));
        }
Esempio n. 3
0
        /// <summary>
        /// Execute add data
        /// </summary>
        /// <param name="data">Data</param>
        /// <returns>Return add command</returns>
        protected override ICommand ExecuteAdd(TEntity data)
        {
            var cmd = RdbCommand.CreateNewCommand <TEntity>(OperateType.Insert, data.GetCommandParameters());

            SetCommand(cmd, data.GetAllValues());
            cmd.MustReturnValueOnSuccess = true;
            return(cmd);
        }
Esempio n. 4
0
        /// <summary>
        /// Execute delete by condition
        /// </summary>
        /// <param name="query">Query object</param>
        /// <returns>Return delete command</returns>
        protected override ICommand ExecuteDeleteByCondition(IQuery query)
        {
            var cmd = RdbCommand.CreateNewCommand <TEntity>(OperateType.Delete);

            SetCommand(cmd, null);
            cmd.MustReturnValueOnSuccess = query?.MustReturnValueOnSuccess ?? false;
            cmd.Query = query;
            return(cmd);
        }
Esempio n. 5
0
        /// <summary>
        /// Execute query data paging
        /// </summary>
        /// <param name="query">Query object</param>
        /// <returns>Return data paging</returns>
        protected override async Task <PagingInfo <TEntity> > ExecuteGetPagingAsync(IQuery query)
        {
            ICommand cmd = RdbCommand.CreateNewCommand <TEntity>(OperateType.Query);

            SetCommand(cmd, null);
            cmd.Query = query;
            var dataPaging = await WorkManager.QueryPagingAsync <TEntity>(cmd).ConfigureAwait(false);

            return(dataPaging);
        }
Esempio n. 6
0
        /// <summary>
        /// aggregate function query
        /// </summary>
        /// <typeparam name="DT">data type</typeparam>
        /// <param name="query">query object</param>
        /// <returns>data</returns>
        async Task <DT> AggregateFunctionAsync <DT>(OperateType funcType, IQuery query)
        {
            ICommand cmd = RdbCommand.CreateNewCommand <T>(funcType);

            SetCommand(cmd, null);
            cmd.Query = query;
            DT obj = await WorkFactory.QuerySingleAsync <DT>(cmd).ConfigureAwait(false);

            return(obj);
        }
Esempio n. 7
0
        /// <summary>
        /// determine whether data is exist
        /// </summary>
        /// <param name="query">query object</param>
        /// <returns>whether data is exist</returns>
        public virtual async Task <bool> ExistAsync(IQuery query)
        {
            var cmd = RdbCommand.CreateNewCommand <T>(OperateType.Exist);

            SetCommand(cmd, null);
            cmd.MustReturnValueOnSuccess = true;
            cmd.Query             = query;
            cmd.CommandResultType = ExecuteCommandResult.ExecuteScalar;
            return(await WorkFactory.QueryAsync(cmd).ConfigureAwait(false));
        }
Esempio n. 8
0
        /// <summary>
        /// query data
        /// </summary>
        /// <param name="query">query object</param>
        /// <returns>data</returns>
        public virtual async Task <T> GetAsync(IQuery query)
        {
            ICommand cmd = RdbCommand.CreateNewCommand <T>(OperateType.Query);

            SetCommand(cmd, null);
            cmd.Query = query;
            T obj = await WorkFactory.QuerySingleAsync <T>(cmd).ConfigureAwait(false);

            return(obj);
        }
Esempio n. 9
0
        /// <summary>
        /// query data with paging
        /// </summary>
        /// <param name="query">query object</param>
        /// <returns>data paging</returns>
        public async Task <IPaging <T> > GetPagingAsync(IQuery query)
        {
            ICommand cmd = RdbCommand.CreateNewCommand <T>(OperateType.Query);

            SetCommand(cmd, null);
            cmd.Query = query;
            var objPaging = await WorkFactory.QueryPagingAsync <T>(cmd).ConfigureAwait(false);

            return(objPaging);
        }
Esempio n. 10
0
        /// <summary>
        /// add data
        /// </summary>
        /// <param name="obj">object</param>
        /// <returns>icommand</returns>
        public virtual async Task <ICommand> AddAsync(T obj)
        {
            InitVersionFieldValue(obj);     //init version field value
            InitRefreshDateFieldValue(obj); //init refresh date value
            var cmd = RdbCommand.CreateNewCommand <T>(OperateType.Insert, obj);

            SetCommand(cmd, obj.GetAllPropertyValues());
            cmd.MustReturnValueOnSuccess = true;
            return(await Task.FromResult(cmd).ConfigureAwait(false));
        }
Esempio n. 11
0
        /// <summary>
        /// Execute query data
        /// </summary>
        /// <param name="query">Query object</param>
        /// <returns>Return data</returns>
        protected override async Task <TEntity> ExecuteGetAsync(IQuery query)
        {
            ICommand cmd = RdbCommand.CreateNewCommand <TEntity>(OperateType.Query);

            SetCommand(cmd, null);
            cmd.Query = query;
            TEntity data = await WorkManager.QuerySingleAsync <TEntity>(cmd).ConfigureAwait(false);

            return(data);
        }
Esempio n. 12
0
        /// <summary>
        /// query data list
        /// </summary>
        /// <param name="query">query object</param>
        /// <returns>data list</returns>
        async Task <List <T> > QueryListAsync(IQuery query)
        {
            ICommand cmd = RdbCommand.CreateNewCommand <T>(OperateType.Query);

            SetCommand(cmd, null);
            cmd.Query = query;
            var objList = (await WorkFactory.QueryAsync <T>(cmd).ConfigureAwait(false)).ToList();

            return(objList);
        }
Esempio n. 13
0
        /// <summary>
        /// Execute exists
        /// </summary>
        /// <param name="query">Query object</param>
        /// <returns>Return whether data is exist</returns>
        protected override async Task <bool> ExecuteExistAsync(IQuery query)
        {
            var cmd = RdbCommand.CreateNewCommand <TEntity>(OperateType.Exist);

            SetCommand(cmd, null);
            cmd.MustReturnValueOnSuccess = true;
            cmd.Query             = query;
            cmd.CommandResultType = ExecuteCommandResult.ExecuteScalar;
            return(await WorkManager.QueryAsync(cmd).ConfigureAwait(false));
        }
Esempio n. 14
0
        /// <summary>
        /// Execute query data list
        /// </summary>
        /// <param name="query">Query object</param>
        /// <returns>Return data list</returns>
        protected override async Task <List <TEntity> > ExecuteGetListAsync(IQuery query)
        {
            ICommand cmd = RdbCommand.CreateNewCommand <TEntity>(OperateType.Query);

            SetCommand(cmd, null);
            cmd.Query = query;
            var dataList = (await WorkManager.QueryAsync <TEntity>(cmd).ConfigureAwait(false)).ToList();

            return(dataList);
        }
Esempio n. 15
0
        /// <summary>
        /// Aggregate function query
        /// </summary>
        /// <typeparam name="TValue">Value type</typeparam>
        /// <param name="query">Query object</param>
        /// <returns>Return the value</returns>
        async Task <TValue> AggregateFunctionAsync <TValue>(OperateType funcType, IQuery query)
        {
            ICommand cmd = RdbCommand.CreateNewCommand <TEntity>(funcType);

            SetCommand(cmd, null);
            cmd.Query = query;
            TValue data = await WorkManager.AggregateValueAsync <TValue>(cmd).ConfigureAwait(false);

            return(data);
        }
Esempio n. 16
0
        /// <summary>
        /// add data
        /// </summary>
        /// <param name="obj">object</param>
        /// <returns>icommand</returns>
        public virtual async Task <ICommand> AddAsync(T obj)
        {
            InitVersionFieldValue(obj);     //初始化版本值
            InitRefreshDateFieldValue(obj); //初始化刷新值
            var cmd = RdbCommand.CreateNewCommand(OperateType.Insert, obj);

            SetCommand(cmd, obj.PropertyValues);
            cmd.VerifyResult = a => a > 0;
            cmd.Fields       = GetEditFields();
            return(await Task.FromResult(cmd).ConfigureAwait(false));
        }
        /// <summary>
        /// aggregate function query
        /// </summary>
        /// <typeparam name="DT">data type</typeparam>
        /// <param name="query">query object</param>
        /// <returns>data</returns>
        DT AggregateFunction <DT>(OperateType funcType, IQuery query)
        {
            ICommand cmd = RdbCommand.CreateNewCommand(funcType);

            SetCommand(cmd, null);
            cmd.Query  = query;
            cmd.Fields = GetQueryObjectFields(query);
            DT obj = UnitOfWork.UnitOfWork.QuerySingle <DT>(cmd);

            return(obj);
        }
        /// <summary>
        /// determine whether data is exist
        /// </summary>
        /// <param name="query">query object</param>
        /// <returns>whether data is exist</returns>
        public virtual bool Exist(IQuery query)
        {
            var cmd = RdbCommand.CreateNewCommand(OperateType.Exist);

            SetCommand(cmd, null);
            cmd.VerifyResult      = r => r > 0;
            cmd.Query             = query;
            cmd.Fields            = GetQueryFields();
            cmd.CommandResultType = ExecuteCommandResult.ExecuteScalar;
            return(UnitOfWork.UnitOfWork.Query(cmd));
        }
Esempio n. 19
0
        /// <summary>
        /// determine whether data is exist
        /// </summary>
        /// <param name="query">query object</param>
        /// <returns>whether data is exist</returns>
        public virtual async Task <bool> ExistAsync(IQuery query)
        {
            var cmd = RdbCommand.CreateNewCommand(OperateType.Exist);

            SetCommand(cmd, null);
            cmd.VerifyResult      = r => r > 0;
            cmd.Query             = query;
            cmd.Fields            = GetQueryFields();
            cmd.CommandResultType = ExecuteCommandResult.ExecuteScalar;
            return(await UnitOfWork.UnitOfWork.QueryAsync(cmd).ConfigureAwait(false));
        }
        /// <summary>
        /// add data
        /// </summary>
        /// <param name="obj">object</param>
        /// <returns>icommand</returns>
        public virtual ICommand Add(T obj)
        {
            InitVersionFieldValue(obj);     //初始化版本值
            InitRefreshDateFieldValue(obj); //初始化刷新值
            var cmd = RdbCommand.CreateNewCommand(OperateType.Insert, obj);

            SetCommand(cmd, obj.PropertyValues);
            cmd.VerifyResult = a => a > 0;
            cmd.Fields       = GetEditFields();
            return(cmd);
        }
Esempio n. 21
0
        /// <summary>
        /// aggregate function query
        /// </summary>
        /// <typeparam name="DT">data type</typeparam>
        /// <param name="query">query object</param>
        /// <returns>data</returns>
        async Task <DT> AggregateFunctionAsync <DT>(OperateType funcType, IQuery query)
        {
            ICommand cmd = RdbCommand.CreateNewCommand(funcType);

            SetCommand(cmd, null);
            cmd.Query  = query;
            cmd.Fields = GetQueryObjectFields(query);
            DT obj = await UnitOfWork.UnitOfWork.QuerySingleAsync <DT>(cmd).ConfigureAwait(false);

            return(obj);
        }
Esempio n. 22
0
        /// <summary>
        /// get delete execute command
        /// </summary>
        /// <param name="translator">translator</param>
        /// <param name="cmd">cmd</param>
        /// <returns></returns>
        DbExecuteCommand GetDeleteExecuteDbCommand(IQueryTranslator translator, RdbCommand cmd)
        {
            #region query translate

            var    tranResult      = translator.Translate(cmd.Query);
            string conditionString = string.Empty;
            if (!tranResult.ConditionString.IsNullOrEmpty())
            {
                conditionString += "WHERE " + tranResult.ConditionString;
            }
            string preScript  = tranResult.PreScript;
            string joinScript = tranResult.AllowJoin ? tranResult.JoinScript : string.Empty;

            #endregion

            string        cmdText    = string.Empty;
            CmdParameters parameters = ParseParameters(cmd.Parameters);
            if (cmd.ExecuteMode == CommandExecuteMode.CommandText)
            {
                cmdText = cmd.CommandText;
            }
            else
            {
                string objectName = DataManager.GetEntityObjectName(ServerType.MySQL, cmd.EntityType, cmd.ObjectName);
                cmdText = string.Format("{3}DELETE {0} FROM `{1}` AS {0}{4} {2};"
                                        , translator.ObjectPetName
                                        , objectName
                                        , conditionString
                                        , preScript
                                        , joinScript);
            }
            //combine parameters
            if (tranResult.Parameters != null)
            {
                var queryParameters = ParseParameters(tranResult.Parameters);
                if (parameters != null)
                {
                    parameters.Union(queryParameters);
                }
                else
                {
                    parameters = queryParameters;
                }
            }
            CommandType commandType = GetCommandType(cmd);
            return(new DbExecuteCommand()
            {
                CommandText = cmdText,
                CommandType = commandType,
                ForceReturnValue = cmd.MustReturnValueOnSuccess,
                Parameters = parameters,
                HasPreScript = !string.IsNullOrWhiteSpace(preScript)
            });
        }
Esempio n. 23
0
        /// <summary>
        /// Modify value
        /// </summary>
        /// <param name="fields">Fields</param>
        /// <param name="parameters">Parameters</param>
        /// <returns>Return modify command</returns>
        ICommand Update(IEnumerable <string> fields, object parameters, IQuery query)
        {
            var cmd = RdbCommand.CreateNewCommand <TEntity>(OperateType.Update);

            SetCommand(cmd, parameters as Dictionary <string, dynamic>);
            cmd.Fields     = fields;
            cmd.Parameters = parameters;
            cmd.MustReturnValueOnSuccess = query?.MustReturnValueOnSuccess ?? false;
            cmd.Query = query;
            return(cmd);
        }
Esempio n. 24
0
        /// <summary>
        /// query data
        /// </summary>
        /// <param name="query">query object</param>
        /// <returns>data</returns>
        public virtual async Task <T> GetAsync(IQuery query)
        {
            ICommand cmd = RdbCommand.CreateNewCommand(OperateType.Query);

            SetCommand(cmd, null);
            cmd.Query  = query;
            cmd.Fields = GetQueryObjectFields(query);
            T obj = await UnitOfWork.UnitOfWork.QuerySingleAsync <T>(cmd).ConfigureAwait(false);

            SingleReturnInit(obj, query);
            return(obj);
        }
Esempio n. 25
0
        /// <summary>
        /// query data with paging
        /// </summary>
        /// <param name="query">query object</param>
        /// <returns>data paging</returns>
        public async Task <IPaging <T> > GetPagingAsync(IQuery query)
        {
            ICommand cmd = RdbCommand.CreateNewCommand(OperateType.Query);

            SetCommand(cmd, null);
            cmd.Query  = query;
            cmd.Fields = GetQueryObjectFields(query);
            var objPaging = await UnitOfWork.UnitOfWork.QueryPagingAsync <T>(cmd).ConfigureAwait(false);

            BatchReturnInit(objPaging, query);
            return(objPaging);
        }
        /// <summary>
        /// query data
        /// </summary>
        /// <param name="query">query object</param>
        /// <returns>data</returns>
        public virtual T Get(IQuery query)
        {
            ICommand cmd = RdbCommand.CreateNewCommand(OperateType.Query);

            SetCommand(cmd, null);
            cmd.Query  = query;
            cmd.Fields = GetQueryObjectFields(query);
            T obj = UnitOfWork.UnitOfWork.QuerySingle <T>(cmd);

            SingleReturnInit(obj, query);
            return(obj);
        }
        /// <summary>
        /// query data list
        /// </summary>
        /// <param name="query">query object</param>
        /// <returns>data list</returns>
        List <T> QueryList(IQuery query)
        {
            ICommand cmd = RdbCommand.CreateNewCommand(OperateType.Query);

            SetCommand(cmd, null);
            cmd.Query  = query;
            cmd.Fields = GetQueryObjectFields(query);
            var objList = UnitOfWork.UnitOfWork.Query <T>(cmd).ToList();

            BatchReturnInit(objList, query);
            return(objList);
        }
        /// <summary>
        /// query data with paging
        /// </summary>
        /// <param name="query">query object</param>
        /// <returns>data paging</returns>
        public IPaging <T> GetPaging(IQuery query)
        {
            ICommand cmd = RdbCommand.CreateNewCommand(OperateType.Query);

            SetCommand(cmd, null);
            cmd.Query  = query;
            cmd.Fields = GetQueryObjectFields(query);
            var objPaging = UnitOfWork.UnitOfWork.QueryPaging <T>(cmd);

            BatchReturnInit(objPaging, query);
            return(objPaging);
        }
Esempio n. 29
0
        /// <summary>
        /// delete data
        /// </summary>
        /// <param name="query">delete query</param>
        /// <returns>ICommand object</returns>
        public virtual async Task <ICommand> DeleteAsync(IQuery query)
        {
            var cmd = RdbCommand.CreateNewCommand <T>(OperateType.Delete);

            SetCommand(cmd, null);
            if (query.VerifyResult != null)
            {
                cmd.MustReturnValueOnSuccess = query.VerifyResult(0);
            }
            cmd.Query = query;
            return(await Task.FromResult(cmd).ConfigureAwait(false));
        }
Esempio n. 30
0
        /// <summary>
        /// query data list
        /// </summary>
        /// <param name="query">query object</param>
        /// <returns>data list</returns>
        async Task <List <T> > QueryListAsync(IQuery query)
        {
            ICommand cmd = RdbCommand.CreateNewCommand(OperateType.Query);

            SetCommand(cmd, null);
            cmd.Query  = query;
            cmd.Fields = GetQueryObjectFields(query);
            var objList = (await UnitOfWork.UnitOfWork.QueryAsync <T>(cmd).ConfigureAwait(false)).ToList();

            BatchReturnInit(objList, query);
            return(objList);
        }