// ===============================================================================
 //                                                                     Constructor
 //                                                                     ===========
 public S2DaoSelectDynamicCommand(IDataSource dataSource, ICommandFactory commandFactory
                                  , IDataReaderHandler dataReaderHandler, IDataReaderFactory dataReaderFactory)
     : base(dataSource, commandFactory, dataReaderHandler, dataReaderFactory)
 {
     this.dataReaderHandler = dataReaderHandler;
     this.dataReaderFactory = dataReaderFactory;
 }
        // -------------------------------------------------
        //                                OutsideSql Execute
        //                                ------------------
        protected Object ExecuteOutsideSqlAsStatic(Object[] args, OutsideSqlContext outsideSqlContext)
        {
            // - - - - - - - - - - - - - - - - -
            // Find specified resultSetHandler.
            // - - - - - - - - - - - - - - - - -
            IDataReaderHandler specifiedDataReaderHandler = FindSpecifiedDataReaderHandler(args);

            // - - - - - - - - -
            // Filter arguments.
            // - - - - - - - - -
            Object[] filteredArgs;
            if (outsideSqlContext.IsSpecifiedOutsideSql)
            {
                Object parameterBean = outsideSqlContext.ParameterBean;
                filteredArgs = new Object[] { parameterBean };
            }
            else
            {
                filteredArgs = FilterArgumentsForDataReaderHandler(args);
            }

            ICommandContext            ctx           = Apply(filteredArgs);
            InternalBasicSelectHandler selectHandler = CreateBasicSelectHandler(ctx.Sql, specifiedDataReaderHandler);

            Object[] bindVariableArray = ctx.BindVariables;
            selectHandler.LoggingMessageSqlArgs = bindVariableArray;
            return(selectHandler.Execute(bindVariableArray, ctx.BindVariableTypes));
        }
示例#3
0
 // ===============================================================================
 //                                                                     Constructor
 //                                                                     ===========
 public InternalProcedureHandler(IDataSource dataSource, String sql,
                                 IDataReaderHandler dataReaderHandler, ICommandFactory commandFactory,
                                 IDataReaderFactory dataReaderFactory, InternalProcedureMetaData procedureMetaData)
     : base(dataSource, sql, dataReaderHandler, commandFactory, dataReaderFactory)
 {
     this._procedureMetaData = procedureMetaData;
 }
        // ===============================================================================
        //                                                             OutsideSql Override
        //                                                             ===================
        // -------------------------------------------------
        //                            Traditional OutsideSql
        //                            ----------------------
        protected override void SetupSelectMethodByManual(MethodInfo mi, string sql)
        {
            string[] parameterNames         = MethodUtil.GetParameterNames(mi);
            Type[]   parameterTypes         = MethodUtil.GetParameterTypes(mi);
            string[] filteredParameterNames = null;
            Type[]   filteredParameterTypes = null;
            if (parameterTypes != null && parameterTypes.Length > 0 &&
                typeof(CursorHandler).IsAssignableFrom(parameterTypes[parameterTypes.Length - 1]))
            {
                filteredParameterNames = new string[parameterTypes.Length - 1];
                filteredParameterTypes = new Type[parameterTypes.Length - 1];
                for (int i = 0; i < parameterTypes.Length - 1; i++)
                {
                    filteredParameterNames[i] = parameterNames[i];
                    filteredParameterTypes[i] = parameterTypes[i];
                }
            }
            else
            {
                filteredParameterNames = parameterNames;
                filteredParameterTypes = parameterTypes;
            }
            IBeanMetaData      myMetaData          = GetOutsideSqlBeanMetaData(mi, _dbMetaData, _dbms);
            IDataReaderHandler myDataReaderHandler = CreateDataReaderHandler(mi, myMetaData);

            RegisterSqlCommand(mi.Name, mi, sql, filteredParameterNames, filteredParameterTypes, myDataReaderHandler);
        }
        // ===============================================================================
        //                                                          ConditionBean Override
        //                                                          ======================
        protected override void SetupSelectMethodByAuto(MethodInfo methodInfo)
        {
            if (SetupInternalSelectMethodSequenceNextVal(methodInfo))
            {
                return;
            }

            // Assert unsupported
            String query = _annotationReader.GetQuery(methodInfo.Name);

            AssertQueryAnnotationUnsupported(methodInfo, query);

            IDataReaderHandler handler = CreateDataReaderHandler(methodInfo);

            String[]             argNames = MethodUtil.GetParameterNames(methodInfo);
            Type[]               argTypes = MethodUtil.GetParameterTypes(methodInfo);
            SelectDynamicCommand cmd      = CreateSelectDynamicCommand(handler);

            if (argTypes.Length == 1 && ValueTypes.GetValueType(argTypes[0]) == ValueTypes.OBJECT)
            {
                argNames = new String[] { "pmb" };
                AssertAutoQueryByDtoUnsupported(methodInfo, argTypes);
                S2DaoSelectDynamicCommand dynamicCommand = CreateCustomizeSelectDynamicCommand(handler);
                cmd = dynamicCommand;
            }
            else
            {
                HandleAutoQueryByArgsAnnotationUnsupported(methodInfo, argNames);
            }
            cmd.ArgNames = argNames;
            cmd.ArgTypes = argTypes;
            _sqlCommands[methodInfo.Name] = cmd;
        }
 public async Task <IResultSets> ExecuteReaderAsync(IDbCommand command, IDataReaderHandler handler, CancellationToken cancellationToken = default(CancellationToken))
 {
     using (var reader = await((MySqlCommand)command).ExecuteReaderAsync(cancellationToken).ConfigureAwait(false))
     {
         return(handler.Handle(new OptimizedDataReader(reader)));
     }
 }
 // ===============================================================================
 //                                                                     Constructor
 //                                                                     ===========
 public InternalProcedureCommand(IDataSource dataSource, IDataReaderHandler dataReaderHandler,
                                 ICommandFactory commandFactory, IDataReaderFactory dataReaderFactory,
                                 InternalProcedureMetaData procedureMetaData)
 {
     this._dataSource        = dataSource;
     this._dataReaderHandler = dataReaderHandler;
     this._commandFactory    = commandFactory;
     this._dataReaderFactory = dataReaderFactory;
     this._procedureMetaData = procedureMetaData;
 }
 // ===============================================================================
 //                                                                     Constructor
 //                                                                     ===========
 public InternalBasicSelectHandler(IDataSource dataSource
                                   , String sql
                                   , IDataReaderHandler dataReaderHandler
                                   , ICommandFactory commandFactory
                                   , IDataReaderFactory dataReaderFactory)
     : base(dataSource, sql, commandFactory)
 {
     DataReaderHandler = dataReaderHandler;
     DataReaderFactory = dataReaderFactory;
 }
示例#9
0
 private void addHandler(IDataReaderHandler handler)
 {
     if (_handlers.Any())
     {
         _handlers.Add(new DataReaderAdvancer(handler));
     }
     else
     {
         _handlers.Add(handler);
     }
 }
        // -------------------------------------------------
        //                                   Default Execute
        //                                   ---------------
        protected virtual object ExecuteDefault(object[] args)
        {
            // - - - - - - - - - - - - - - - - -
            // Find specified resultSetHandler.
            // - - - - - - - - - - - - - - - - -
            IDataReaderHandler specifiedDataReaderHandler = FindSpecifiedDataReaderHandler(args);

            // - - - - - - - - -
            // Filter arguments.
            // - - - - - - - - -
            Object[] filteredArgs = FilterArgumentsForDataReaderHandler(args);

            ICommandContext            ctx           = Apply(filteredArgs);
            InternalBasicSelectHandler selectHandler = CreateBasicSelectHandler(ctx.Sql, specifiedDataReaderHandler);

            Object[] bindVariableArray = ctx.BindVariables;
            selectHandler.LoggingMessageSqlArgs = bindVariableArray;
            return(selectHandler.Execute(bindVariableArray, ctx.BindVariableTypes));
        }
示例#11
0
        public async Task <IResultSets> ExecuteReaderAsync(IDbCommand dbCommand, IDataReaderHandler handler, CancellationToken cancellationToken = default(CancellationToken))
        {
            await PrepareCommand(dbCommand);

            return(await DbClient.CommandExecutor.ExecuteReaderAsync(dbCommand, handler, cancellationToken).ConfigureAwait(false));
        }
示例#12
0
 public DataReaderAdvancer(IDataReaderHandler inner)
 {
     _inner = inner;
 }
        protected void RegisterSqlCommand(String sqlCommandKey, MethodInfo method, String sql, String[] argNames, Type[] argTypes, IDataReaderHandler myDataReaderHandler)
        {
            SelectDynamicCommand cmd = CreateSelectDynamicCommand(myDataReaderHandler);

            RegisterSqlCommand(sqlCommandKey, method, sql, argNames, argTypes, cmd);
        }
 // ===============================================================================
 //                                                              Extension Override
 //                                                              ==================
 protected override SelectDynamicCommand CreateSelectDynamicCommand(IDataReaderHandler handler)
 {
     return(CreateCustomizeSelectDynamicCommand(handler));
 }
 protected InternalBasicSelectHandler CreateBasicSelectHandler(String realSql, IDataReaderHandler specifiedDataReaderHandler)
 {
     return(new InternalBasicSelectHandler(DataSource, realSql, specifiedDataReaderHandler, CommandFactory, dataReaderFactory));
 }
        protected Object ExecuteOutsideSqlAsDynamic(Object[] args, OutsideSqlContext outsideSqlContext)
        {
            Object firstArg = args[0];

            PropertyInfo[] properties  = firstArg.GetType().GetProperties();
            String         filteredSql = this.Sql;

            // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
            // Resolve embedded comment for parsing bind variable comment in embedded comment.
            // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
            for (int i = 0; i < properties.Length; i++)
            {
                PropertyInfo propertyInfo = properties[i];
                Type         propertyType = propertyInfo.PropertyType;
                if (!propertyType.Equals(typeof(String)))
                {
                    continue;
                }
                String outsideSqlPiece = (String)propertyInfo.GetValue(firstArg, null);
                if (outsideSqlPiece == null)
                {
                    continue;
                }
                String embeddedComment = "/*$pmb." + propertyInfo.Name + "*/";
                filteredSql = filteredSql.Replace(embeddedComment, outsideSqlPiece);
            }

            S2DaoSelectDynamicCommand outsideSqlCommand = CreateMySelectDynamicCommand();

            outsideSqlCommand.ArgNames = ArgNames;
            outsideSqlCommand.ArgTypes = ArgTypes;
            outsideSqlCommand.Sql      = filteredSql;

            // - - - - - - - - - - - - - - - - -
            // Find specified resultSetHandler.
            // - - - - - - - - - - - - - - - - -
            IDataReaderHandler specifiedDataReaderHandler = FindSpecifiedDataReaderHandler(args);

            // - - - - - - - - -
            // Filter arguments.
            // - - - - - - - - -
            Object[] filteredArgs;
            if (outsideSqlContext.IsSpecifiedOutsideSql)
            {
                Object parameterBean = outsideSqlContext.ParameterBean;
                filteredArgs = new Object[] { parameterBean };
            }
            else
            {
                filteredArgs = FilterArgumentsForDataReaderHandler(args);
            }

            ICommandContext ctx = outsideSqlCommand.DoApply(filteredArgs);
            IList <Object>  bindVariableList     = new System.Collections.Generic.List <Object>();
            IList <Type>    bindVariableTypeList = new System.Collections.Generic.List <Type>();
            IList <String>  bindVariableNameList = new System.Collections.Generic.List <String>();

            AddBindVariableInfo(ctx, bindVariableList, bindVariableTypeList, bindVariableNameList);
            InternalBasicSelectHandler selectHandler = CreateBasicSelectHandler(ctx.Sql, specifiedDataReaderHandler);

            Object[] bindVariableArray = new Object[bindVariableList.Count];
            bindVariableList.CopyTo(bindVariableArray, 0);
            Type[] bindVariableTypeArray = new Type[bindVariableTypeList.Count];
            bindVariableTypeList.CopyTo(bindVariableTypeArray, 0);
            String[] bindVariableNameArray = new String[bindVariableNameList.Count];
            bindVariableNameList.CopyTo(bindVariableNameArray, 0);
            selectHandler.LoggingMessageSqlArgs = bindVariableArray;
            return(selectHandler.Execute(bindVariableArray, bindVariableTypeArray, bindVariableNameArray));
        }
        protected virtual S2DaoSelectDynamicCommand CreateCustomizeSelectDynamicCommand(IDataReaderHandler handler)
        {
            FetchNarrowingResultSetFactory customizeResultSetFactory = new FetchNarrowingResultSetFactory();

            return(new S2DaoSelectDynamicCommand(_dataSource, _commandFactory, handler, customizeResultSetFactory));
        }
示例#18
0
 public DataReaderAdvancer(IDataReaderHandler inner)
 {
     _inner = inner;
 }