Can you add it to JIRA and submit your patch? http://issues.apache.org/jira/browse/IBATIS
This will greatly help to add it to main build. Christian -----Original Message----- From: Pascal Jacob [mailto:[EMAIL PROTECTED] Sent: Thursday, October 23, 2008 3:42 PM To: [email protected] Subject: Re: dynamic CREATE TABLE woe I finally achieve success with my original SQLScript by patching ibatis instead of having to do convoluted things in my source code that I could not stand before a QA session. 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; Hope this will make its way into the main build. regards. Poitras Christian wrote: > This is a bug in how iBATIS handles maps inside a list parameter. > Curiously, using #[].name# and #[].type# gave the expected result, but not > $[].name$ and $[].type$... > > You can use a simple patch by putting your list of maps inside a map: > private Map<String, List<Map<String, String>>> prepareCreateTableParams( > final String[] columnNames, final String[] columnTypes) { > Map<String, List<Map<String, String>>> ret = new HashMap<String, > List<Map<String, String>>>(); > 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); > } > ret.put("list", params); > return ret; > } > > And in xml: > <statement id="create-table" parameterClass="map"> > CREATE TABLE data > <iterate open="(" close=")" conjunction="," property="list"> > $list[].name$ $list[].type$ > </iterate> > </statement> > > > This should work. > > Christian > > > -----Original Message----- > From: Pascal Jacob [mailto:[EMAIL PROTECTED] > Sent: Wednesday, October 22, 2008 4:59 PM > To: [email protected] > Subject: Re: dynamic CREATE TABLE woe > > Investigating more, I found the following evidences in the PreparedStatement > sent by iBatis (I finally found the way to make iBatis log under SLF4J): > > 22:29:39.296 [DEBUG] [main] [java.sql.PreparedStatement:26] - {pstm-100002} > Executing Statement: > CREATE TABLE seqnsdb.seqnsdata ( {name=ID, type=INTEGER} {name=ID, > type=INTEGER}, {name=ARISING_SEQ_ID, type=INTEGER} > {name=ARISING_SEQ_ID, type=INTEGER}, {name=AC_SERIAL_NO, > type=VARCHAR(255)} {name=AC_SERIAL_NO, type=VARCHAR(255)} ... ) > > It is evident that iBatis is not transforming the SQLScript as expected ! > It seems like the whole Map.Entry is printed each time instead of only the > name value first then only the type value. > AAMOF I did replace $[].name$ and $[].type$ by simply $[]$ in the > script and get the exact same result, which confirms that $[].name$ > don't do anything more than $[]$ which is obviously not what is > expected (or there is something i didn't understood) > > Hope this helps someone helping me ;) > > Tanks in advance. > > ---------------------------------------------------------------------- > ----------------- Orange vous informe que cet e-mail a ete controle > par l'anti-virus mail. > Aucun virus connu a ce jour par nos services n'a ete detecte. > > > >
