// ===============================================================================
        //                                                             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;
        }