// ===================================================================================
 //                                                                 Behavior Query Path
 //                                                                 ===================
 protected void setupBehaviorQueryPath() {
   final DfOutsideSqlPack sqlFileList = collectOutsideSqlChecked();
   final DfBehaviorQueryPathSetupper setupper = new DfBehaviorQueryPathSetupper();
   setupper.setupBehaviorQueryPath(sqlFileList);
 }
 // ===================================================================================
 //                                                                  Parameter Property
 //                                                                  ==================
 protected void processParameterProperty(
     String sql, String parameterBeanName, DfPmbMetaData pmbMetaData) {
   final Map<String, String> propertyNameTypeMap = new LinkedHashMap<String, String>();
   final Map<String, String> propertyNameOptionMap = new LinkedHashMap<String, String>();
   final Set<String> autoDetectedPropertyNameSet = new LinkedHashSet<String>();
   pmbMetaData.setPropertyNameTypeMap(propertyNameTypeMap);
   pmbMetaData.setPropertyNameOptionMap(propertyNameOptionMap);
   pmbMetaData.setAutoDetectedPropertyNameSet(autoDetectedPropertyNameSet);
   final List<DfSql2EntityMark> parameterBeanElement = getParameterBeanPropertyTypeList(sql);
   final String autoDetectMark = "AutoDetect";
   for (DfSql2EntityMark mark : parameterBeanElement) {
     final String element = mark.getContent().trim();
     if (element.equalsIgnoreCase(autoDetectMark)) {
       processAutoDetect(
           sql, propertyNameTypeMap, propertyNameOptionMap, autoDetectedPropertyNameSet);
       break;
     }
   }
   for (DfSql2EntityMark mark : parameterBeanElement) {
     final String element = mark.getContent().trim();
     final String nameDelimiter = " ";
     final String optionDelimiter = ":";
     if (autoDetectMark.equals(element)) {
       continue; // because of already resolved
     }
     final int delimiterIndex = element.indexOf(optionDelimiter);
     final String slaslaOption;
     {
       final String optionPrefix = DfPmbPropertyOptionComment.OPTION_PREFIX;
       final String optionSuffix = DfPmbPropertyOptionComment.OPTION_SUFFIX;
       final String comment = mark.getComment();
       if (Srl.is_NotNull_and_NotTrimmedEmpty(comment)) {
         final String filtered = Srl.replace(comment, "|", "/").trim();
         slaslaOption = optionPrefix + filtered + optionSuffix;
       } else {
         slaslaOption = null;
       }
     }
     final String propertyDef;
     final String optionDef;
     if (delimiterIndex > 0) {
       propertyDef = element.substring(0, delimiterIndex).trim();
       final int optionIndex = delimiterIndex + optionDelimiter.length();
       final String basicOption = element.substring(optionIndex).trim();
       optionDef = basicOption + (slaslaOption != null ? "|" + slaslaOption : "");
     } else {
       propertyDef = element;
       optionDef = (slaslaOption != null ? slaslaOption : null);
     }
     final int nameIndex = propertyDef.lastIndexOf(nameDelimiter);
     if (nameIndex <= 0) {
       String msg = "The parameter bean element should be [typeName propertyName].";
       msg = msg + " But: element=" + element + " srcFile=" + _outsideSqlFile;
       throw new IllegalStateException(msg);
     }
     // ParameterBean has the "import" clause of language-embedded utility
     final String typeName = prepareDefinedPropertyType(propertyDef, nameIndex);
     final String propertyName = propertyDef.substring(nameIndex + nameDelimiter.length()).trim();
     if (propertyNameTypeMap.containsKey(propertyName)) {
       // means the auto-detected property is found,
       // and it should be overridden
       propertyNameTypeMap.remove(propertyName);
       propertyNameOptionMap.remove(propertyName);
     }
     propertyNameTypeMap.put(propertyName, typeName);
     if (optionDef != null) {
       propertyNameOptionMap.put(propertyName, optionDef);
     }
   }
   final Map<String, Map<String, String>> bqpMap =
       _bqpSetupper.extractBasicBqpMap(createOutsideSqlPackAsOne());
   if (!bqpMap.isEmpty()) {
     final Map<String, String> bqpElementMap = bqpMap.values().iterator().next();
     pmbMetaData.setBqpElementMap(bqpElementMap);
   }
 }