/* * Copyright 2001-2008 Geert Bevin <gbevin[remove] at uwyn dot com> * Licensed under the Apache License, Version 2.0 (the "License") * $Id: TestInsertH2.java 3918 2008-04-14 17:35:35Z gbevin $ */ package com.uwyn.rife.database.queries; import java.math.BigDecimal; import java.sql.Time; import java.sql.Timestamp; import java.util.Arrays; import java.util.Calendar; import com.uwyn.rife.database.BeanImpl; import com.uwyn.rife.database.BeanImplConstrained; import com.uwyn.rife.database.DbPreparedStatement; import com.uwyn.rife.database.DbPreparedStatementHandler; import com.uwyn.rife.database.exceptions.FieldsRequiredException; import com.uwyn.rife.database.exceptions.TableNameRequiredException; import com.uwyn.rife.database.exceptions.UnsupportedSqlFeatureException; import com.uwyn.rife.database.types.SqlNull; public class TestInsertH2 extends TestInsert { public TestInsertH2(String name) { super(name); } public void testInstantiationH2() { Insert query = new Insert(mH2); assertNotNull(query); try { query.getSql(); fail(); } catch (TableNameRequiredException e) { assertEquals(e.getQueryName(), "Insert"); } } public void testIncompleteQueryH2() { Insert query = new Insert(mH2); try { query.getSql(); fail(); } catch (TableNameRequiredException e) { assertEquals(e.getQueryName(), "Insert"); } query.into("tablename"); try { query.getSql(); fail(); } catch (FieldsRequiredException e) { assertEquals(e.getQueryName(), "Insert"); } query.field("col1", "val1"); assertNotNull(query.getSql()); } public void testClearH2() { Insert query = new Insert(mH2); query.into("tablename") .field("col1", "val1"); assertNotNull(query.getSql()); query.clear(); try { query.getSql(); fail(); } catch (TableNameRequiredException e) { assertEquals(e.getQueryName(), "Insert"); } } public void testHintH2() { Insert query = new Insert(mH2) .hint("NO_INDEX") .into("tablename") .fieldParameter("col1"); try { query.getSql(); fail(); } catch (UnsupportedSqlFeatureException e) { assertTrue(true); } } public void testParameterH2() { Insert query = new Insert(mH2); query.into("tablename") .fieldParameter("col1"); assertEquals(query.getSql(), "INSERT INTO tablename (col1) VALUES (?)"); } public void testFieldH2() { Calendar cal = Calendar.getInstance(); cal.set(2002, 7, 19, 12, 17, 52); cal.set(Calendar.MILLISECOND, 462); Insert query = new Insert(mH2); query.into("tablename") .field("nullColumn", SqlNull.NULL) .field("propertyBigDecimal", new BigDecimal("98347.876438637")) .field("propertyBoolean", true) .field("propertyByte", (byte)16) .field("propertyCalendar", cal.getTime()) .field("propertyChar", 'M') .field("propertyDate", cal) .field("propertyDouble", 12.3d) .field("propertyFloat", 13.4f) .field("propertyInt", 34) .field("propertyLong", 45L) .field("propertyShort", (short)12) .field("propertySqlDate", new java.sql.Date(cal.getTime().getTime())) .field("propertyString", "string'value") .field("propertyStringbuffer", new StringBuffer("stringbuffer'value")) .field("propertyTime", new Time(cal.getTime().getTime())) .field("propertyTimestamp", new Timestamp(cal.getTime().getTime())); assertEquals(query.getSql(), "INSERT INTO tablename (nullColumn, propertyBigDecimal, propertyBoolean, propertyByte, propertyCalendar, propertyChar, propertyDate, propertyDouble, propertyFloat, propertyInt, propertyLong, propertyShort, propertySqlDate, propertyString, propertyStringbuffer, propertyTime, propertyTimestamp) VALUES (NULL, 98347.876438637, true, 16, '2002-08-19 12:17:52.462', 'M', '2002-08-19 12:17:52.462', 12.3, 13.4, 34, 45, 12, '2002-08-19', 'string''value', 'stringbuffer''value', '12:17:52', '2002-08-19 12:17:52.462')"); assertTrue(execute(query)); } public void testFieldCustomH2() { Insert query = new Insert(mH2); query.into("tablename") .fieldCustom("propertySqlDate", "now()"); assertEquals(query.getSql(), "INSERT INTO tablename (propertySqlDate) VALUES (now())"); assertTrue(execute(query)); } public void testFieldsH2() { Calendar cal = Calendar.getInstance(); cal.set(2002, 7, 19, 12, 17, 52); cal.set(Calendar.MILLISECOND, 462); Insert query = new Insert(mH2); query.into("tablename") .fields(new Object[] { "nullColumn", SqlNull.NULL, "propertyBigDecimal", new BigDecimal("98347.876438637"), "propertyBoolean", new Boolean(true), "propertyByte", new Byte((byte)16), "propertyCalendar", cal.getTime(), "propertyChar", new Character('M'), "propertyDate", cal, "propertyDouble", new Double(12.3d), "propertyFloat", new Float(13.4f), "propertyInt", new Integer(34), "propertyLong", new Long(45L), "propertyShort", new Short((short)12), "propertySqlDate", new java.sql.Date(cal.getTime().getTime()), "propertyString", new String("string'value"), "propertyStringbuffer", new StringBuffer("stringbuffer'value"), "propertyTime", new Time(cal.getTime().getTime()), "propertyTimestamp", new Timestamp(cal.getTime().getTime()) }); assertEquals(query.getSql(), "INSERT INTO tablename (nullColumn, propertyBigDecimal, propertyBoolean, propertyByte, propertyCalendar, propertyChar, propertyDate, propertyDouble, propertyFloat, propertyInt, propertyLong, propertyShort, propertySqlDate, propertyString, propertyStringbuffer, propertyTime, propertyTimestamp) VALUES (NULL, 98347.876438637, true, 16, '2002-08-19 12:17:52.462', 'M', '2002-08-19 12:17:52.462', 12.3, 13.4, 34, 45, 12, '2002-08-19', 'string''value', 'stringbuffer''value', '12:17:52', '2002-08-19 12:17:52.462')"); assertTrue(execute(query)); } public void testFieldParametersH2() { Insert query = new Insert(mH2); query.into("tablename"); assertNull(query.getParameters()); query.fieldParameter("nullColumn") .fieldParameter("propertyBigDecimal") .fieldParameter("propertyBoolean") .fieldParameter("propertyByte") .fieldParameter("propertyCalendar") .fieldParameter("propertyChar") .fieldParameter("propertyDate") .fieldParameter("propertyDouble") .fieldParameter("propertyFloat") .fieldParameter("propertyInt") .fieldParameter("propertyLong") .fieldParameter("propertyShort") .fieldParameter("propertySqlDate") .fieldParameter("propertyString") .fieldParameter("propertyStringbuffer") .fieldParameter("propertyTime") .fieldParameter("propertyTimestamp"); assertEquals(query.getParameters().getOrderedNames().size(), 17); assertEquals(query.getParameters().getOrderedNames().get(0), "nullColumn"); assertEquals(query.getParameters().getOrderedNames().get(1), "propertyBigDecimal"); assertEquals(query.getParameters().getOrderedNames().get(2), "propertyBoolean"); assertEquals(query.getParameters().getOrderedNames().get(3), "propertyByte"); assertEquals(query.getParameters().getOrderedNames().get(4), "propertyCalendar"); assertEquals(query.getParameters().getOrderedNames().get(5), "propertyChar"); assertEquals(query.getParameters().getOrderedNames().get(6), "propertyDate"); assertEquals(query.getParameters().getOrderedNames().get(7), "propertyDouble"); assertEquals(query.getParameters().getOrderedNames().get(8), "propertyFloat"); assertEquals(query.getParameters().getOrderedNames().get(9), "propertyInt"); assertEquals(query.getParameters().getOrderedNames().get(10), "propertyLong"); assertEquals(query.getParameters().getOrderedNames().get(11), "propertyShort"); assertEquals(query.getParameters().getOrderedNames().get(12), "propertySqlDate"); assertEquals(query.getParameters().getOrderedNames().get(13), "propertyString"); assertEquals(query.getParameters().getOrderedNames().get(14), "propertyStringbuffer"); assertEquals(query.getParameters().getOrderedNames().get(15), "propertyTime"); assertEquals(query.getParameters().getOrderedNames().get(16), "propertyTimestamp"); assertTrue(Arrays.equals(query.getParameters().getOrderedNamesArray(), new String[] { "nullColumn", "propertyBigDecimal", "propertyBoolean", "propertyByte", "propertyCalendar", "propertyChar", "propertyDate", "propertyDouble", "propertyFloat", "propertyInt", "propertyLong", "propertyShort", "propertySqlDate", "propertyString", "propertyStringbuffer", "propertyTime", "propertyTimestamp"})); assertEquals(query.getSql(), "INSERT INTO tablename (nullColumn, propertyBigDecimal, propertyBoolean, propertyByte, propertyCalendar, propertyChar, propertyDate, propertyDouble, propertyFloat, propertyInt, propertyLong, propertyShort, propertySqlDate, propertyString, propertyStringbuffer, propertyTime, propertyTimestamp) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); assertTrue(execute(query, new DbPreparedStatementHandler() { public void setParameters(DbPreparedStatement statement) { Calendar cal = Calendar.getInstance(); cal.set(2002, 7, 19, 12, 17, 52); cal.set(Calendar.MILLISECOND, 462); statement .setString(1, null) .setBigDecimal(2, new BigDecimal("98347.876438637")) .setBoolean(3, true) .setByte(4, (byte)16) .setDate(5, new java.sql.Date(cal.getTime().getTime())) .setString(6, "M") .setDate(7, new java.sql.Date(cal.getTime().getTime())) .setDouble(8, 12.3d) .setFloat(9, 13.4f) .setInt(10, 34) .setLong(11, 45L) .setShort(12, (short)12) .setDate(13, new java.sql.Date(cal.getTime().getTime())) .setString(14, "string'value") .setString(15, "string'value2") .setTime(16, new Time(cal.getTime().getTime())) .setTimestamp(17, new Timestamp(cal.getTime().getTime())); } })); } public void testFieldParametersMixedH2() { Insert query = new Insert(mH2); query.into("tablename"); assertNull(query.getParameters()); final Calendar cal = Calendar.getInstance(); cal.set(2002, 7, 19, 12, 17, 52); cal.set(Calendar.MILLISECOND, 462); query.fieldParameter("nullColumn") .field("propertyBigDecimal", new BigDecimal("98347.876438637")) .fieldParameter("propertyBoolean") .fieldParameter("propertyByte") .field("propertyCalendar", cal.getTime()) .fieldParameter("propertyChar") .field("propertyDate", cal) .field("propertyDouble", 12.3d) .fieldParameter("propertyFloat") .fieldParameter("propertyInt") .field("propertyLong", 45L) .field("propertyShort", (short)12) .fieldParameter("propertySqlDate") .fieldParameter("propertyString") .field("propertyStringbuffer", new StringBuffer("stringbuffer'value")) .field("propertyTime", new Time(cal.getTime().getTime())) .fieldParameter("propertyTimestamp"); assertEquals(query.getParameters().getOrderedNames().size(), 9); assertEquals(query.getParameters().getOrderedNames().get(0), "nullColumn"); assertEquals(query.getParameters().getOrderedNames().get(1), "propertyBoolean"); assertEquals(query.getParameters().getOrderedNames().get(2), "propertyByte"); assertEquals(query.getParameters().getOrderedNames().get(3), "propertyChar"); assertEquals(query.getParameters().getOrderedNames().get(4), "propertyFloat"); assertEquals(query.getParameters().getOrderedNames().get(5), "propertyInt"); assertEquals(query.getParameters().getOrderedNames().get(6), "propertySqlDate"); assertEquals(query.getParameters().getOrderedNames().get(7), "propertyString"); assertEquals(query.getParameters().getOrderedNames().get(8), "propertyTimestamp"); assertTrue(Arrays.equals(query.getParameters().getOrderedNamesArray(), new String[] { "nullColumn", "propertyBoolean", "propertyByte", "propertyChar", "propertyFloat", "propertyInt", "propertySqlDate", "propertyString", "propertyTimestamp"})); assertEquals(query.getSql(), "INSERT INTO tablename (nullColumn, propertyBigDecimal, propertyBoolean, propertyByte, propertyCalendar, propertyChar, propertyDate, propertyDouble, propertyFloat, propertyInt, propertyLong, propertyShort, propertySqlDate, propertyString, propertyStringbuffer, propertyTime, propertyTimestamp) VALUES (?, 98347.876438637, ?, ?, '2002-08-19 12:17:52.462', ?, '2002-08-19 12:17:52.462', 12.3, ?, ?, 45, 12, ?, ?, 'stringbuffer''value', '12:17:52', ?)"); assertTrue(execute(query, new DbPreparedStatementHandler() { public void setParameters(DbPreparedStatement statement) { statement .setString(1, null) .setBoolean(2, true) .setByte(3, (byte)16) .setString(4, "M") .setFloat(5, 13.4f) .setInt(6, 34) .setDate(7, new java.sql.Date(cal.getTime().getTime())) .setString(8, "string'value") .setTimestamp(9, new Timestamp(cal.getTime().getTime())); } })); } public void testFieldsBeanH2() { Insert query = new Insert(mH2); query.into("tablename") .fields(BeanImpl.getPopulatedBean()); assertEquals(query.getSql(), "INSERT INTO tablename (propertyBigDecimal, propertyBoolean, propertyBooleanObject, propertyByte, propertyByteObject, propertyCalendar, propertyChar, propertyCharacterObject, propertyDate, propertyDouble, propertyDoubleObject, propertyEnum, propertyFloat, propertyFloatObject, propertyInt, propertyIntegerObject, propertyLong, propertyLongObject, propertyShort, propertyShortObject, propertySqlDate, propertyString, propertyStringbuffer, propertyTime, propertyTimestamp) VALUES (219038743.392874, true, false, 89, 34, '2002-06-18 15:26:14.764', 'v', 'r', '2002-06-18 15:26:14.764', 53348.34, 143298.692, 'VALUE_THREE', 98634.2, 8734.7, 545, 968, 34563, 66875, 43, 68, '2002-06-18', 'someotherstring', 'someotherstringbuff', '15:26:14', '2002-06-18 15:26:14.764')"); assertTrue(execute(query)); } public void testFieldsBeanConstrainedH2() { Insert query = new Insert(mH2); query.into("tablename") .fields(BeanImplConstrained.getPopulatedBean()); assertEquals(query.getSql(), "INSERT INTO tablename (propertyBigDecimal, propertyBoolean, propertyBooleanObject, propertyByteObject, propertyCalendar, propertyChar, propertyCharacterObject, propertyDate, propertyDouble, propertyDoubleObject, propertyFloat, propertyFloatObject, propertyInt, propertyIntegerObject, propertyLongObject, propertyShort, propertySqlDate, propertyString, propertyStringbuffer, propertyTime, propertyTimestamp) VALUES (219038743.392874, true, false, 34, '2002-06-18 15:26:14.764', 'v', 'r', '2002-06-18 15:26:14.764', 53348.34, 143298.692, 98634.2, 8734.7, 545, 968, 66875, 43, '2002-06-18', 'someotherstring', 'someotherstringbuff', '15:26:14', '2002-06-18 15:26:14.764')"); assertTrue(execute(query)); } public void testFieldsBeanNullValuesH2() { Insert query = new Insert(mH2); query.into("tablename") .fields(BeanImpl.getNullBean()); assertEquals(query.getSql(), "INSERT INTO tablename (propertyBoolean, propertyBooleanObject, propertyByte, propertyByteObject, propertyDouble, propertyDoubleObject, propertyFloat, propertyFloatObject, propertyInt, propertyIntegerObject, propertyLong, propertyLongObject, propertyShort, propertyShortObject) VALUES (false, false, 0, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0, 0)"); assertTrue(execute(query)); } public void testFieldsBeanIncludedH2() { Insert query = new Insert(mH2); query.into("tablename") .fieldsIncluded(BeanImpl.getPopulatedBean(), new String[] {"propertyByte", "propertyDouble", "propertyShort", "propertyStringbuffer", "propertyTime"}); assertEquals(query.getSql(), "INSERT INTO tablename (propertyByte, propertyDouble, propertyShort, propertyStringbuffer, propertyTime) VALUES (89, 53348.34, 43, 'someotherstringbuff', '15:26:14')"); assertTrue(execute(query)); } public void testFieldsBeanExcludedH2() { Insert query = new Insert(mH2); query.into("tablename") .fieldsExcluded(BeanImpl.getPopulatedBean(), new String[] {"propertyByte", "propertyDouble", "propertyShort", "propertyStringbuffer", "propertyTime"}); assertEquals(query.getSql(), "INSERT INTO tablename (propertyBigDecimal, propertyBoolean, propertyBooleanObject, propertyByteObject, propertyCalendar, propertyChar, propertyCharacterObject, propertyDate, propertyDoubleObject, propertyEnum, propertyFloat, propertyFloatObject, propertyInt, propertyIntegerObject, propertyLong, propertyLongObject, propertyShortObject, propertySqlDate, propertyString, propertyTimestamp) VALUES (219038743.392874, true, false, 34, '2002-06-18 15:26:14.764', 'v', 'r', '2002-06-18 15:26:14.764', 143298.692, 'VALUE_THREE', 98634.2, 8734.7, 545, 968, 34563, 66875, 68, '2002-06-18', 'someotherstring', '2002-06-18 15:26:14.764')"); assertTrue(execute(query)); } public void testFieldsBeanFilteredH2() { Insert query = new Insert(mH2); query.into("tablename") .fieldsFiltered(BeanImpl.getPopulatedBean(), new String[] {"propertyByte", "propertyDouble", "propertyShort", "propertyStringbuffer", "propertyTime"}, new String[] {"propertyByte", "propertyShort", "propertyTime"}); assertEquals(query.getSql(), "INSERT INTO tablename (propertyDouble, propertyStringbuffer) VALUES (53348.34, 'someotherstringbuff')"); assertTrue(execute(query)); } public void testMultipleRowsH2() { Insert query = new Insert(mH2); query.into("tablename") .field("propertyChar", 'M') .field("propertyDouble", 12.3d) .field("propertyFloat", 13.4f) .field("propertyInt", 34); query.field("propertyChar", 'S') .field("propertyDouble", 45.1d) .field("propertyFloat", 27.9f); query.field("propertyChar", 'T'); try { query.getSql(); fail(); } catch (UnsupportedSqlFeatureException e) { assertTrue(true); } } public void testFieldsParametersBeanH2() { Insert query = new Insert(mH2); query.into("tablename") .fieldsParameters(BeanImpl.class); assertEquals(query.getSql(), "INSERT INTO tablename (propertyBigDecimal, propertyBoolean, propertyBooleanObject, propertyByte, propertyByteObject, propertyCalendar, propertyChar, propertyCharacterObject, propertyDate, propertyDouble, propertyDoubleObject, propertyEnum, propertyFloat, propertyFloatObject, propertyInt, propertyIntegerObject, propertyLong, propertyLongObject, propertyShort, propertyShortObject, propertySqlDate, propertyString, propertyStringbuffer, propertyTime, propertyTimestamp) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); assertEquals(query.getParameters().getOrderedNames().size(), 25); assertEquals(query.getParameters().getOrderedNames().get(0), "propertyBigDecimal"); assertEquals(query.getParameters().getOrderedNames().get(1), "propertyBoolean"); assertEquals(query.getParameters().getOrderedNames().get(2), "propertyBooleanObject"); assertEquals(query.getParameters().getOrderedNames().get(3), "propertyByte"); assertEquals(query.getParameters().getOrderedNames().get(4), "propertyByteObject"); assertEquals(query.getParameters().getOrderedNames().get(5), "propertyCalendar"); assertEquals(query.getParameters().getOrderedNames().get(6), "propertyChar"); assertEquals(query.getParameters().getOrderedNames().get(7), "propertyCharacterObject"); assertEquals(query.getParameters().getOrderedNames().get(8), "propertyDate"); assertEquals(query.getParameters().getOrderedNames().get(9), "propertyDouble"); assertEquals(query.getParameters().getOrderedNames().get(10), "propertyDoubleObject"); assertEquals(query.getParameters().getOrderedNames().get(11), "propertyEnum"); assertEquals(query.getParameters().getOrderedNames().get(12), "propertyFloat"); assertEquals(query.getParameters().getOrderedNames().get(13), "propertyFloatObject"); assertEquals(query.getParameters().getOrderedNames().get(14), "propertyInt"); assertEquals(query.getParameters().getOrderedNames().get(15), "propertyIntegerObject"); assertEquals(query.getParameters().getOrderedNames().get(16), "propertyLong"); assertEquals(query.getParameters().getOrderedNames().get(17), "propertyLongObject"); assertEquals(query.getParameters().getOrderedNames().get(18), "propertyShort"); assertEquals(query.getParameters().getOrderedNames().get(19), "propertyShortObject"); assertEquals(query.getParameters().getOrderedNames().get(20), "propertySqlDate"); assertEquals(query.getParameters().getOrderedNames().get(21), "propertyString"); assertEquals(query.getParameters().getOrderedNames().get(22), "propertyStringbuffer"); assertEquals(query.getParameters().getOrderedNames().get(23), "propertyTime"); assertEquals(query.getParameters().getOrderedNames().get(24), "propertyTimestamp"); assertTrue(Arrays.equals(query.getParameters().getOrderedNamesArray(), new String[] {"propertyBigDecimal", "propertyBoolean", "propertyBooleanObject", "propertyByte", "propertyByteObject", "propertyCalendar", "propertyChar", "propertyCharacterObject", "propertyDate", "propertyDouble", "propertyDoubleObject", "propertyEnum", "propertyFloat", "propertyFloatObject", "propertyInt", "propertyIntegerObject", "propertyLong", "propertyLongObject", "propertyShort", "propertyShortObject", "propertySqlDate", "propertyString", "propertyStringbuffer", "propertyTime", "propertyTimestamp"})); assertTrue(execute(query, new DbPreparedStatementHandler() { public void setParameters(DbPreparedStatement statement) { Calendar cal = Calendar.getInstance(); cal.set(2002, 7, 19, 12, 17, 52); cal.set(Calendar.MILLISECOND, 462); statement .setBigDecimal(1, new BigDecimal("98347.876438637")) .setBoolean(2, false) .setBoolean(3, true) .setByte(4, (byte)16) .setByte(5, (byte)72) .setTimestamp(6, new java.sql.Timestamp(cal.getTime().getTime())) .setString(7, "M") .setString(8, "p") .setTimestamp(9, new java.sql.Timestamp(cal.getTime().getTime())) .setDouble(10, 12.3d) .setDouble(11, 68.7d) .setString(12, "VALUE_THREE") .setFloat(13, 13.4f) .setFloat(14, 42.1f) .setInt(15, 92) .setInt(16, 34) .setLong(17, 687L) .setLong(18, 92) .setShort(19, (short)7) .setShort(20, (short)12) .setDate(21, new java.sql.Date(cal.getTime().getTime())) .setString(22, "string'value") .setString(23, "string'value2") .setTime(24, new Time(cal.getTime().getTime())) .setTimestamp(25, new Timestamp(cal.getTime().getTime())); } })); } public void testFieldsParametersBeanConstrainedH2() { Insert query = new Insert(mH2); query.into("tablename") .fieldsParameters(BeanImplConstrained.class); assertEquals(query.getSql(), "INSERT INTO tablename (propertyBigDecimal, propertyBoolean, propertyBooleanObject, propertyByteObject, propertyCalendar, propertyChar, propertyCharacterObject, propertyDate, propertyDouble, propertyDoubleObject, propertyFloat, propertyFloatObject, propertyInt, propertyIntegerObject, propertyLongObject, propertyShort, propertySqlDate, propertyString, propertyStringbuffer, propertyTime, propertyTimestamp) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); assertEquals(query.getParameters().getOrderedNames().size(), 21); assertEquals(query.getParameters().getOrderedNames().get(0), "propertyBigDecimal"); assertEquals(query.getParameters().getOrderedNames().get(1), "propertyBoolean"); assertEquals(query.getParameters().getOrderedNames().get(2), "propertyBooleanObject"); assertEquals(query.getParameters().getOrderedNames().get(3), "propertyByteObject"); assertEquals(query.getParameters().getOrderedNames().get(4), "propertyCalendar"); assertEquals(query.getParameters().getOrderedNames().get(5), "propertyChar"); assertEquals(query.getParameters().getOrderedNames().get(6), "propertyCharacterObject"); assertEquals(query.getParameters().getOrderedNames().get(7), "propertyDate"); assertEquals(query.getParameters().getOrderedNames().get(8), "propertyDouble"); assertEquals(query.getParameters().getOrderedNames().get(9), "propertyDoubleObject"); assertEquals(query.getParameters().getOrderedNames().get(10), "propertyFloat"); assertEquals(query.getParameters().getOrderedNames().get(11), "propertyFloatObject"); assertEquals(query.getParameters().getOrderedNames().get(12), "propertyInt"); assertEquals(query.getParameters().getOrderedNames().get(13), "propertyIntegerObject"); assertEquals(query.getParameters().getOrderedNames().get(14), "propertyLongObject"); assertEquals(query.getParameters().getOrderedNames().get(15), "propertyShort"); assertEquals(query.getParameters().getOrderedNames().get(16), "propertySqlDate"); assertEquals(query.getParameters().getOrderedNames().get(17), "propertyString"); assertEquals(query.getParameters().getOrderedNames().get(18), "propertyStringbuffer"); assertEquals(query.getParameters().getOrderedNames().get(19), "propertyTime"); assertEquals(query.getParameters().getOrderedNames().get(20), "propertyTimestamp"); assertTrue(Arrays.equals(query.getParameters().getOrderedNamesArray(), new String[] {"propertyBigDecimal", "propertyBoolean", "propertyBooleanObject", "propertyByteObject", "propertyCalendar", "propertyChar", "propertyCharacterObject", "propertyDate", "propertyDouble", "propertyDoubleObject", "propertyFloat", "propertyFloatObject", "propertyInt", "propertyIntegerObject", "propertyLongObject", "propertyShort", "propertySqlDate", "propertyString", "propertyStringbuffer", "propertyTime", "propertyTimestamp"})); assertTrue(execute(query, new DbPreparedStatementHandler() { public void setParameters(DbPreparedStatement statement) { Calendar cal = Calendar.getInstance(); cal.set(2002, 5, 18, 15, 26, 14); cal.set(Calendar.MILLISECOND, 764); statement .setBigDecimal(1, new BigDecimal("219038743.392874")) .setBoolean(2, true) .setBoolean(3, false) .setByte(4, (byte)34) .setTimestamp(5, new java.sql.Timestamp(cal.getTime().getTime())) .setString(6, "v") .setString(7, "r") .setTimestamp(8, new java.sql.Timestamp(cal.getTime().getTime())) .setDouble(9, 53348.34d) .setDouble(10, 143298.692d) .setFloat(11, 98634.2f) .setFloat(12, 8734.7f) .setInt(13, 545) .setInt(14, 968) .setLong(15, 66875L) .setShort(16, (short)43) .setDate(17, new java.sql.Date(cal.getTime().getTime())) .setString(18, "someotherstring") .setString(19, "someotherstringbuff") .setTime(20, new Time(cal.getTime().getTime())) .setTimestamp(21, new Timestamp(cal.getTime().getTime())); } })); } public void testFieldsParametersBeanExcludedH2() { Insert query = new Insert(mH2); query.into("tablename") .fieldsParametersExcluded(BeanImpl.class, new String[] {"propertyBoolean", "propertyByte", "propertyChar", "propertyDouble", "propertyInt", "propertyLong", "propertySqlDate", "propertyStringbuffer", "propertyTimestamp"}); assertEquals(query.getSql(), "INSERT INTO tablename (propertyBigDecimal, propertyBooleanObject, propertyByteObject, propertyCalendar, propertyCharacterObject, propertyDate, propertyDoubleObject, propertyEnum, propertyFloat, propertyFloatObject, propertyIntegerObject, propertyLongObject, propertyShort, propertyShortObject, propertyString, propertyTime) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); assertEquals(query.getParameters().getOrderedNames().size(), 16); assertEquals(query.getParameters().getOrderedNames().get(0), "propertyBigDecimal"); assertEquals(query.getParameters().getOrderedNames().get(1), "propertyBooleanObject"); assertEquals(query.getParameters().getOrderedNames().get(2), "propertyByteObject"); assertEquals(query.getParameters().getOrderedNames().get(3), "propertyCalendar"); assertEquals(query.getParameters().getOrderedNames().get(4), "propertyCharacterObject"); assertEquals(query.getParameters().getOrderedNames().get(5), "propertyDate"); assertEquals(query.getParameters().getOrderedNames().get(6), "propertyDoubleObject"); assertEquals(query.getParameters().getOrderedNames().get(7), "propertyEnum"); assertEquals(query.getParameters().getOrderedNames().get(8), "propertyFloat"); assertEquals(query.getParameters().getOrderedNames().get(9), "propertyFloatObject"); assertEquals(query.getParameters().getOrderedNames().get(10), "propertyIntegerObject"); assertEquals(query.getParameters().getOrderedNames().get(11), "propertyLongObject"); assertEquals(query.getParameters().getOrderedNames().get(12), "propertyShort"); assertEquals(query.getParameters().getOrderedNames().get(13), "propertyShortObject"); assertEquals(query.getParameters().getOrderedNames().get(14), "propertyString"); assertEquals(query.getParameters().getOrderedNames().get(15), "propertyTime"); assertTrue(Arrays.equals(query.getParameters().getOrderedNamesArray(), new String[] {"propertyBigDecimal", "propertyBooleanObject", "propertyByteObject", "propertyCalendar", "propertyCharacterObject", "propertyDate", "propertyDoubleObject", "propertyEnum", "propertyFloat", "propertyFloatObject", "propertyIntegerObject", "propertyLongObject", "propertyShort", "propertyShortObject", "propertyString", "propertyTime"})); assertTrue(execute(query, new DbPreparedStatementHandler() { public void setParameters(DbPreparedStatement statement) { Calendar cal = Calendar.getInstance(); cal.set(2002, 7, 19, 12, 17, 52); cal.set(Calendar.MILLISECOND, 462); statement .setBigDecimal(1, new BigDecimal("98347.876438637")) .setBoolean(2, true) .setByte(3, (byte)72) .setTimestamp(4, new java.sql.Timestamp(cal.getTime().getTime())) .setString(5, "o") .setTimestamp(6, new java.sql.Timestamp(cal.getTime().getTime())) .setDouble(7, 86.7d) .setString(8, "VALUE_THREE") .setFloat(9, 13.4f) .setFloat(10, 32.8f) .setInt(11, 358) .setLong(12, 9680L) .setShort(13, (short)12) .setShort(14, (short)78) .setString(15, "string'value") .setTime(16, new Time(cal.getTime().getTime())); } })); } public void testInsertSubselectParamsH2() { Select fieldquery = new Select(mH2); fieldquery .from("table2") .field("max(propertyLong)") .whereParameter("propertyInt", ">"); // Manual subselect creation Insert query = new Insert(mH2); // shuffled the structure around a bit to test the correct order usage query .into("tablename") .fieldParameter("propertyString") .fieldCustom("propertyLong", "("+fieldquery+")") .fieldSubselect(fieldquery); assertEquals(query.getSql(), "INSERT INTO tablename (propertyString, propertyLong) VALUES (?, (SELECT max(propertyLong) FROM table2 WHERE propertyInt > ?))"); String[] parameters = query.getParameters().getOrderedNamesArray(); assertEquals(2, parameters.length); assertEquals(parameters[0], "propertyString"); assertEquals(parameters[1], "propertyInt"); assertTrue(execute(query, new DbPreparedStatementHandler() { public void setParameters(DbPreparedStatement statement) { statement .setString("propertyString", "thestring") .setLong("propertyInt", 90); } })); // Automated subselect creation query = new Insert(mH2); // shuffled the structure around a bit to test the correct order usage query .into("tablename") .fieldParameter("propertyString") .field("propertyLong", fieldquery); assertEquals(query.getSql(), "INSERT INTO tablename (propertyString, propertyLong) VALUES (?, (SELECT max(propertyLong) FROM table2 WHERE propertyInt > ?))"); parameters = query.getParameters().getOrderedNamesArray(); assertEquals(2, parameters.length); assertEquals(parameters[0], "propertyString"); assertEquals(parameters[1], "propertyInt"); assertTrue(execute(query, new DbPreparedStatementHandler() { public void setParameters(DbPreparedStatement statement) { statement .setString("propertyString", "thestring") .setLong("propertyInt", 90); } })); } public void testCloneH2() { Select fieldquery = new Select(mH2); fieldquery .from("table2") .field("max(propertyLong)") .whereParameter("propertyInt", ">"); final Calendar cal = Calendar.getInstance(); cal.set(2002, 7, 19, 12, 17, 52); cal.set(Calendar.MILLISECOND, 462); Insert query = new Insert(mH2); query.into("tablename") .fieldParameter("nullColumn") .field("propertyBigDecimal", new BigDecimal("98347.876438637")) .fieldParameter("propertyBoolean") .fieldParameter("propertyByte") .field("propertyCalendar", cal.getTime()) .fieldParameter("propertyChar") .field("propertyDate", cal) .field("propertyDouble", 12.3d) .fieldParameter("propertyFloat") .fieldParameter("propertyInt") .field("propertyShort", (short)12) .fieldParameter("propertySqlDate") .fieldParameter("propertyString") .field("propertyStringbuffer", new StringBuffer("stringbuffer'value")) .field("propertyTime", new Time(cal.getTime().getTime())) .fieldParameter("propertyTimestamp") .fieldCustom("propertyLong", "("+fieldquery+")") .fieldSubselect(fieldquery); Insert query_clone = query.clone(); assertEquals(query.getSql(), query_clone.getSql()); assertTrue(query != query_clone); assertTrue(execute(query, new DbPreparedStatementHandler() { public void setParameters(DbPreparedStatement statement) { statement .setString("nullColumn", null) .setBoolean("propertyBoolean", true) .setByte("propertyByte", (byte)16) .setString("propertyChar", "M") .setFloat("propertyFloat", 13.4f) .setInt("propertyInt", 34) .setDate("propertySqlDate", new java.sql.Date(cal.getTime().getTime())) .setString("propertyString", "string'value") .setTimestamp("propertyTimestamp", new Timestamp(cal.getTime().getTime())); } })); } }