com.ibatis.sqlmap.engine.mapping.sql.dynamic.DynamicSql.getParameterMap() does 
not build a complete ParameterMap for complex maps
---------------------------------------------------------------------------------------------------------------------------------

                 Key: IBATIS-486
                 URL: https://issues.apache.org/jira/browse/IBATIS-486
             Project: iBatis for Java
          Issue Type: Bug
          Components: SQL Maps
    Affects Versions: 2.3.0
         Environment: Windows XP; JDK 1.4.2_13; Apache Tomcat 5.0.19; Oracle 
10.2.0
            Reporter: John Geiglein


map:

    <sql id="ct_join_fragment">
        <isEqual property="codeTypeList[].join" 
compareValue="AND">AND</isEqual><isEqual property="codeTypeList[].join" 
compareValue="OR">OR</isEqual>
    </sql>

    <sql id="ct_min_max_fragment">
        <isEmpty property="codeTypeList[].max">
            p.appl_id in (select appl_id from indexer_appl_codes_info_vw acd, 
indexer_codes_info_vw cde where acd.cde_id = cde.id and cde.ctp_id = 
#codeTypeList[].codeTypeId# and acd.percent_relevance <![CDATA[ >= ]]> 
#codeTypeList[].min#)
         </isEmpty>
         <isNotEmpty property="codeTypeList[].max">
             p.appl_id in (select appl_id from indexer_appl_codes_info_vw acd, 
indexer_codes_info_vw cde where acd.cde_id = cde.id and cde.ctp_id = 
#codeTypeList[].codeTypeId# and acd.percent_relevance between 
#codeTypeList[].min# and #codeTypeList[].max#)
         </isNotEmpty>
    </sql>

    <sql id="ct_max_fragment">
        p.appl_id in (select appl_id from indexer_appl_codes_info_vw acd, 
indexer_codes_info_vw cde where acd.cde_id = cde.id and cde.ctp_id = 
#codeTypeList[].codeTypeId# and acd.percent_relevance <![CDATA[ <= ]]> 
#codeTypeList[].max#)
    </sql>

    <sql id="ct_coded_fragment">
        <isEqual property="codeTypeList[].coded" compareValue="yes">
            p.appl_id in (select appl_id from indexer_appl_codes_info_vw acd, 
indexer_codes_info_vw cde where acd.cde_id = cde.id and cde.ctp_id = 
#codeTypeList[].codeTypeId# )
        </isEqual>
        <isEqual property="codeTypeList[].coded" compareValue="no">
            p.appl_id not in (select appl_id from indexer_appl_codes_info_vw 
acd, indexer_codes_info_vw cde where acd.cde_id = cde.id and cde.ctp_id = 
#codeTypeList[].codeTypeId# )
        </isEqual>
        <isNotEmpty property="codeTypeList[].min">
            <include refid="ct_join_fragment"/> <include 
refid="ct_min_max_fragment"/>
         </isNotEmpty>
        <isEmpty property="codeTypeList[].min">
            <isNotEmpty property="codeTypeList[].max">
                <include refid="ct_join_fragment"/> <include 
refid="ct_max_fragment"/>
            </isNotEmpty>
        </isEmpty>
    </sql>

    <sql id="code_min_max_fragment">
        <isEmpty property="codeTypeList[].codes[].max">
         <![CDATA[ and p.appl_id in (select appl_id from 
indexer_appl_codes_info_vw where cde_id = #codeTypeList[].codes[].codeId# and 
percent_relevance >= #codeTypeList[].codes[].min#) ]]>
         </isEmpty>
         <isNotEmpty property="codeTypeList[].codes[].max">
              and p.appl_id in (select appl_id from indexer_appl_codes_info_vw 
where cde_id = #codeTypeList[].codes[].codeId# and percent_relevance between 
#codeTypeList[].codes[].min# and #codeTypeList[].codes[].max#)
         </isNotEmpty>
    </sql>

    <sql id="code_max_fragment">
        <![CDATA[ and p.appl_id in (select appl_id from 
indexer_appl_codes_info_vw where cde_id = #codeTypeList[].codes[].codeId# and 
percent_relevance <= #codeTypeList[].codes[].max#) ]]>
    </sql>

    <sql id="code_coded_fragment">
        <isEqual property="codeTypeList[].codes[].coded" compareValue="yes">
            p.appl_id in (select appl_id from indexer_appl_codes_info_vw where 
cde_id = #codeTypeList[].codes[].codeId# )
        </isEqual>
        <isEqual property="codeTypeList[].codes[].coded" compareValue="no">
            p.appl_id not in (select appl_id from indexer_appl_codes_info_vw 
where cde_id = #codeTypeList[].codes[].codeId# )
        </isEqual>
        <isNotEmpty property="codeTypeList[].codes[].min">
            <include refid="ct_join_fragment"/> <include 
refid="code_min_max_fragment"/>
         </isNotEmpty>
        <isEmpty property="codeTypeList[].codes[].min">
            <isNotEmpty property="codeTypeList[].codes[].max">
                <include refid="ct_join_fragment"/> <include 
refid="code_max_fragment"/>
            </isNotEmpty>
        </isEmpty>
    </sql>

    <sql id="cl_fragment">
        <isNotEmpty property="codeTypeList[].codes[].coded">
            <include refid="code_coded_fragment"/>
        </isNotEmpty>
        <isEmpty property="codeTypeList[].codes[].coded">
            <isNotEmpty property="codeTypeList[].codes[].min">
                <include refid="code_min_max_fragment"/>
            </isNotEmpty>
            <isEmpty property="codeTypeList[].codes[].min">
                <isNotEmpty property="codeTypeList[].codes[].max">
                    <include refid="code_max_fragment"/>
                </isNotEmpty>
            </isEmpty>
        </isEmpty>
    </sql>

    <sql id="codeList_fragment">
        <isNotEqual property="codeTypeList[].join" compareValue="OR">
            <iterate property="codeTypeList[].codes" conjunction="AND">
                <include refid="cl_fragment"/>
            </iterate>
        </isNotEqual>
        <isEqual property="codeTypeList[].join" compareValue="OR">
            <iterate property="codeTypeList[].codes" conjunction="OR">
                <include refid="cl_fragment"/>
            </iterate>
        </isEqual>
    </sql>

    <sql id="codeTypeList_fragment">
        <iterate prepend="AND" property="codeTypeList"  open="(" close=")" 
conjunction="AND">
            (
            <isNotEmpty property="codeTypeList[].coded">
                <include refid="ct_coded_fragment"/>
                <isNotEmpty property="codeTypeList[].codes">
                    <include refid="ct_join_fragment"/> <include 
refid="codeList_fragment"/>
                </isNotEmpty>
            </isNotEmpty>
            <isEmpty property="codeTypeList[].coded">
                <isNotEmpty property="codeTypeList[].min">
                    <include refid="ct_min_max_fragment"/>
                    <isNotEmpty property="codeTypeList[].codes">
                        <include refid="ct_join_fragment"/> <include 
refid="codeList_fragment"/>
                    </isNotEmpty>
                </isNotEmpty>
                <isEmpty property="codeTypeList[].min">
                    <isNotEmpty property="codeTypeList[].max">
                        <include refid="ct_max_fragment"/>
                        <isNotEmpty property="codeTypeList[].codes">
                            <include refid="ct_join_fragment"/> <include 
refid="codeList_fragment"/>
                        </isNotEmpty>
                    </isNotEmpty>
                    <isEmpty property="codeTypeList[].max">
                        <isNotEmpty property="codeTypeList[].codes">
                            <include refid="codeList_fragment"/>
                        </isNotEmpty>
                    </isEmpty>
                </isEmpty>
            </isEmpty>
            )
        </iterate>
    </sql>

    <statement id="getApplsforIndexer" resultMap="result" >
      select p.appl_id,decode((select count(*) from indexer_appl_codes_info_vw 
iad
                            where iad.appl_id = p.appl_id),0,'N','Y') as 
coded_flag
      from $grantInfoTableName$
        <dynamic prepend="WHERE">
            <isNotEmpty prepend="AND" property="fy">
               p.FY =#fy#
            </isNotEmpty>
            <isEmpty prepend="AND" property="fy">
                <isNotEmpty property="council">
                    p.COUNCIL_MEETING_DATE =#council#
                </isNotEmpty>
            </isEmpty>
            <isNotEmpty prepend="AND" property="typeCode">
                p.APPL_TYPE_CODE =#typeCode#
            </isNotEmpty>
            <isNotEmpty prepend="AND" property="activityCode">
                p.ACTIVITY_CODE =#activityCode#
            </isNotEmpty>
            <isNotEmpty prepend="AND" property="adminCode">
                 p.ADMIN_PHS_ORG_CODE=#adminCode#
            </isNotEmpty>
            <isNotEmpty prepend="AND" property="supportYear">
                  p.SUPPORT_YEAR=#supportYear#
            </isNotEmpty>
            <isNotEmpty prepend="AND" property="suffixCode">
                 p.SUFFIX_CODE like #suffixCode#
            </isNotEmpty>
            <isNotEmpty prepend="AND" property="cancerActivity">
                 p.appl_id in (select appl_id from appl_cancer_activities_t  
where cay_code = #cancerActivity#  and end_date is null)
            </isNotEmpty>
            <isNotEmpty prepend="AND" property="pdName">
                p.appl_id in  (select appl_id from application_pds_t app, 
nci_person_org_roles_t npe where app.npe_id = npe.id and npe.epn_id =#pdName#)
            </isNotEmpty>
            <isNotEmpty prepend="AND" property="pdCode">
                 p.appl_id in  (select appl_id from application_pds_t app, 
nci_person_org_roles_t npe where app.npe_id = npe.id and npe.role_usage_code 
=#pdCode#)
            </isNotEmpty>
            <isNotEmpty prepend="AND" property="division">
                 nci_util.f_get_appl_pd_orgtid(appl_id,'DIVISION') =#division#
            </isNotEmpty>
            <isNotEmpty prepend="AND" property="rfaPaNum">
                  p.RFA_PA_NUMBER like #rfaPaNum#
            </isNotEmpty>
            <isNotEmpty prepend="AND" property="selectFunding">
                  NCI.APPL_PAYCODE_PKG.get_pay_status(p.appl_id,'D')  = 'Y'
            </isNotEmpty>
            <isNotEmpty prepend="AND" property="piLastName">
                  p.LAST_NAME like #piLastName#
            </isNotEmpty>
            <isNotEmpty prepend="AND" property="piFirstName">
                 p.FIRST_NAME like #piFirstName#
            </isNotEmpty>
            <isNotEmpty prepend=" AND " property="institution">
                  p.ORG_NAME like #institution#
            </isNotEmpty>
            <isNotEmpty prepend="AND" property="stateCode">
               p.STATE_CODE =#stateCode#
             </isNotEmpty>
             <isNotEmpty prepend="AND" property="serialNum">
              p.SERIAL_NUM =#serialNum#
            </isNotEmpty>
            <isEqual property="subprojects" compareValue="P" prepend="AND">
              p.SUBPROJECT_ID is null
            </isEqual>
            <isEqual property="subprojects" compareValue="S" prepend="AND">
              p.SUBPROJECT_ID is not null
            </isEqual>
            <isNotEmpty property="codeTypeList">
                <include refid="codeTypeList_fragment"/>
            </isNotEmpty>
        </dynamic>
         order by admin_phs_org_code ASC, serial_num ASC, support_year ASC, 
suffix_code ASC NULLS FIRST
            <dynamic>
                <isNotEqual property="grantInfoTableName" 
compareValue="NCI.NCI_BASIC_APPL_VW p">
              , subproject_id ASC NULLS FIRST
                </isNotEqual>
            </dynamic>
    </statement>


This is the map for a complex search screen. not all of the parameters from the 
"code_min_max_fragment" are found. Specifically only the params from the first 
conditional branch.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to