You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ibatis.apache.org by "pascal jacob (JIRA)" <ib...@incubator.apache.org> on 2008/10/27 16:26:44 UTC

[jira] Created: (IBATIS-550) $[].xxx$ expressions are not interpreted correctly

$[].xxx$ expressions are not interpreted correctly
--------------------------------------------------

                 Key: IBATIS-550
                 URL: https://issues.apache.org/jira/browse/IBATIS-550
             Project: iBatis for Java
          Issue Type: Bug
          Components: SQL Maps
    Affects Versions: 2.3.4
            Reporter: pascal jacob


I encountered a 'com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException' while executing the following SQL script:

   <statement id="create-table" parameterClass="list">
       CREATE TABLE data
           <iterate open="(" close=")" conjunction=",">
               $[].name$ $[].type$
           </iterate>
   </statement>

The java code that prepare the list parameter and execute the SQL script is as follow:

   ...
   sqlMapClient.startTransaction();
   sqlMapClient.update("create-table", prepareCreateTableParams());
   sqlMapClient.commitTransaction();
   ...

   private List<Map<String, String>> prepareCreateTableParams(
           final String[] columnNames, final String[] columnTypes) {
       List<Map<String, String>> params =
           new ArrayList<Map<String, String>>();
       for(int i = 0; i < columnNames.length; i++) {
           HashMap<String, String> map = new HashMap<String, String>();
           map.put("name", columnNames[i]);
           map.put("type", columnTypes[i]);
           params.add(map);
       }
       return params;
   }

and the exception was:

com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred while applying a parameter map.
--- Check the create-seqnsdata-table-InlineParameterMap.
--- Check the statement (update failed).
--- Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near '     ,          ,          ,          ,          ,          ,          ,   '
at line 1
   at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeUpdate(MappedStatement.java:107)
   at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.update(SqlMapExecutorDelegate.java:457)
   at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.update(SqlMapSessionImpl.java:90)
   at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.update(SqlMapClientImpl.java:66)
   at net.eads.iw.seqns.CsvJdbcInjector.inject(CsvJdbcInjector.java:117)
   ... 1 more

It seems that iBatis is not correctly replacing $[].name$ and $[].type$ by the value supplied in the list of map of string, string.



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


[jira] Commented: (IBATIS-550) $[].xxx$ expressions are not interpreted correctly

Posted by "pascal jacob (JIRA)" <ib...@incubator.apache.org>.
    [ https://issues.apache.org/jira/browse/IBATIS-550?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12642942#action_12642942 ] 

pascal jacob commented on IBATIS-550:
-------------------------------------

A very simple patch in the iBatis source code resolved this issue:

in file: ibatis-2.3.4.726\src\ibatis-src\com\ibatis\common\beans\ProbeFactory.java
in method: getProbe(), line: 33
replaced: return GENERIC;
by: return BEAN;



> $[].xxx$ expressions are not interpreted correctly
> --------------------------------------------------
>
>                 Key: IBATIS-550
>                 URL: https://issues.apache.org/jira/browse/IBATIS-550
>             Project: iBatis for Java
>          Issue Type: Bug
>          Components: SQL Maps
>    Affects Versions: 2.3.4
>            Reporter: pascal jacob
>
> I encountered a 'com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException' while executing the following SQL script:
>    <statement id="create-table" parameterClass="list">
>        CREATE TABLE data
>            <iterate open="(" close=")" conjunction=",">
>                $[].name$ $[].type$
>            </iterate>
>    </statement>
> The java code that prepare the list parameter and execute the SQL script is as follow:
>    ...
>    sqlMapClient.startTransaction();
>    sqlMapClient.update("create-table", prepareCreateTableParams());
>    sqlMapClient.commitTransaction();
>    ...
>    private List<Map<String, String>> prepareCreateTableParams(
>            final String[] columnNames, final String[] columnTypes) {
>        List<Map<String, String>> params =
>            new ArrayList<Map<String, String>>();
>        for(int i = 0; i < columnNames.length; i++) {
>            HashMap<String, String> map = new HashMap<String, String>();
>            map.put("name", columnNames[i]);
>            map.put("type", columnTypes[i]);
>            params.add(map);
>        }
>        return params;
>    }
> and the exception was:
> com.ibatis.common.jdbc.exception.NestedSQLException:
> --- The error occurred while applying a parameter map.
> --- Check the create-seqnsdata-table-InlineParameterMap.
> --- Check the statement (update failed).
> --- Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
> You have an error in your SQL syntax; check the manual that corresponds
> to your MySQL server version for the right syntax to use near '     ,          ,          ,          ,          ,          ,          ,   '
> at line 1
>    at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeUpdate(MappedStatement.java:107)
>    at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.update(SqlMapExecutorDelegate.java:457)
>    at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.update(SqlMapSessionImpl.java:90)
>    at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.update(SqlMapClientImpl.java:66)
>    at net.eads.iw.seqns.CsvJdbcInjector.inject(CsvJdbcInjector.java:117)
>    ... 1 more
> It seems that iBatis is not correctly replacing $[].name$ and $[].type$ by the value supplied in the list of map of string, string.

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