ABATOR SQL map generator creates incorrect XML maps using Sybase and Oracle
---------------------------------------------------------------------------

         Key: IBATIS-284
         URL: http://issues.apache.org/jira/browse/IBATIS-284
     Project: iBatis for Java
        Type: Bug

  Components: DAO  
    Versions: 2.1.7    
 Environment: IBATIS 2.1.7, Abator 0.6.1, Sybase or Oracle DB 9.i, JAVA
    Reporter: Fischer Christian


I generated SQL maps and DAO classes using the ABATOR generator and the Eclipse 
plugin. The datasoruce is either Sybase or an Oracle 9.i DB. 

The problem is the generated SQL maps are not correct! In general all 
definitions which starts with 'abatorgenerated_' are missing the
prefix containing [schema]_[tablename]. 

Because they are referenced in the same XML map file and also from IBATIS 
classes using
the prefix you get errors like:
com.ibatis.common.exception.NestedRuntimeException: Could not find SQL 
statement to include with refid 
'schema_tablename.abatorgenerated_Example_Where_Clause'

There is an include in the map file like:
<include refid="schema_tablename.abatorgenerated_Example_Where_Clause"/>

But the definition is:
<sql id="abatorgenerated_Example_Where_Clause">

So the problem is fixed either by removing the prefix in the include or 
appending it in the definition.

I checked the ABATOR source code and found the problem immediately in 
SqlMapGeneratorDefaultImpl.java. 
The code to generate above refid attributes is:

addAttribute(xml, "refid", getSqlMapNamespace(tableConfiguration.getTable()) + 
"." + getExampleWhereClauseId());

whereas the code to generate e.g. above  <sql id="abatorgenerated ... tags is:

protected String getExampleWhereClauseId() {
        return "abatorgenerated_Example_Where_Clause";
    }

My quick solution was to remove the 
getSqlMapNamespace(tableConfiguration.getTable()) + "." in the code where the
refid attributs are generated. But unfortunately the XML map is also accessed 
directly by the IBATIS classes which also
appends the prefix. This affects all methods like:

public String getInsertStatementId()
public String getSelectByExampleStatementId()
....

So I think the solution should be to change all these getXXXId() methods to 
append the schema + tablename
prefix at he start of the return string. But this requires access to the 
tableConfiguration object which is not a class member variable.

I got the same problems using Sybase and Oracle DB. No idea how that should 
work using DB/2?

Best regards

Christian Fischer

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to