protected void RegisterParameterType(InternalProcedureMetaData metaData, Type pmbType, PropertyInfo[] properties)
 {
     foreach (PropertyInfo property in properties)
     {
         InternalProcedureParameterType ppt = GetProcedureParameterType(pmbType, property);
         if (ppt == null)
         {
             continue;
         }
         metaData.AddParameterType(ppt);
     }
 }
        public InternalProcedureMetaData CreateProcedureMetaData(String procedureName, Type pmbType)
        {
            InternalProcedureMetaData metaData = new InternalProcedureMetaData(procedureName);

            if (pmbType == null)
            {
                return(metaData);
            }
            else
            {
                if (!IsDtoType(pmbType))
                {
                    throw new IllegalStateException("The pmb type is Not DTO type: " + pmbType.Name);
                }
            }
            RegisterParameterType(metaData, pmbType, pmbType.GetProperties());
            return(metaData);
        }
        // - - - - - - - - - - - -
        //          Call Procedure
        //           - - - - - - -
        protected void SetupSpecifiedOutsideSqlCallCommand(String sqlCommandKey, MethodInfo method, OutsideSqlContext outsideSqlContext)
        {
            // - - - - - - - - - - - - - - - - - - - - - - -
            // The attribute of Specified-OutsideSqlContext.
            // - - - - - - - - - - - - - - - - - - - - - - -
            Object pmb           = outsideSqlContext.ParameterBean;
            String procedureName = outsideSqlContext.OutsideSqlPath;

            // - - - - - - - - - - - - - - -
            // The attribute of SqlCommand.
            // - - - - - - - - - - - - - - -
            InternalProcedureMetaDataFactory myProcedureMetaDataFactory = new InternalProcedureMetaDataFactory();
            Type pmbType = pmb != null?pmb.GetType() : null;

            InternalProcedureMetaData metaData = myProcedureMetaDataFactory.CreateProcedureMetaData(procedureName, pmbType);
            InternalProcedureCommand  cmd      = CreateInternalProcedureCommand(method, metaData);

            _sqlCommands.Add(sqlCommandKey, cmd);
        }
 protected InternalProcedureCommand CreateInternalProcedureCommand(MethodInfo method, InternalProcedureMetaData metaData)
 {
     return(new InternalProcedureCommand(_dataSource, CreateDataReaderHandler(method), _commandFactory, _dataReaderFactory, metaData));
 }