001: /*
002: * Copyright 2001-2007 Geert Bevin <gbevin[remove] at uwyn dot com>
003: * Distributed under the terms of either:
004: * - the common development and distribution license (CDDL), v1.0; or
005: * - the GNU Lesser General Public License, v2.1 or later
006: * $Id: TestDeleteMysql.java 3695 2007-03-16 09:26:50Z gbevin $
007: */
008: package com.uwyn.rife.database.queries;
009:
010: import com.uwyn.rife.database.BeanImpl;
011: import com.uwyn.rife.database.BeanImplConstrained;
012: import com.uwyn.rife.database.DbPreparedStatement;
013: import com.uwyn.rife.database.DbPreparedStatementHandler;
014: import com.uwyn.rife.database.exceptions.TableNameRequiredException;
015:
016: import java.math.BigDecimal;
017: import java.sql.Time;
018: import java.sql.Timestamp;
019: import java.util.Arrays;
020: import java.util.Calendar;
021:
022: public class TestDeleteMysql extends TestDelete {
023: public TestDeleteMysql(String name) {
024: super (name);
025: }
026:
027: public void testInstantiationMysql() {
028: Delete query = new Delete(mMysql);
029: assertNotNull(query);
030: try {
031: query.getSql();
032: fail();
033: } catch (TableNameRequiredException e) {
034: assertEquals(e.getQueryName(), "Delete");
035: }
036: }
037:
038: public void testIncompleteQueryMysql() {
039: Delete query = new Delete(mMysql);
040: try {
041: query.getSql();
042: fail();
043: } catch (TableNameRequiredException e) {
044: assertEquals(e.getQueryName(), "Delete");
045: }
046: query.where("this = that");
047: try {
048: query.getSql();
049: fail();
050: } catch (TableNameRequiredException e) {
051: assertEquals(e.getQueryName(), "Delete");
052: }
053: query.from("tablename");
054: assertNotNull(query.getSql());
055: }
056:
057: public void testClearMysql() {
058: Delete query = new Delete(mMysql);
059: query.from("tablename").where("this = that");
060: assertNotNull(query.getSql());
061: query.clear();
062: try {
063: query.getSql();
064: fail();
065: } catch (TableNameRequiredException e) {
066: assertEquals(e.getQueryName(), "Delete");
067: }
068: }
069:
070: public void testFromMysql() {
071: Delete query = new Delete(mMysql);
072: query.from("tablename");
073: assertEquals(query.getSql(), "DELETE FROM tablename");
074: assertTrue(execute(query));
075: }
076:
077: public void testHintMysql() {
078: Delete query = new Delete(mMysql);
079: query.hint("LOW_PRIORITY").from("tablename");
080: assertEquals(query.getSql(),
081: "DELETE LOW_PRIORITY FROM tablename");
082: assertTrue(execute(query));
083: }
084:
085: public void testWhereMysql() {
086: Delete query = new Delete(mMysql);
087: query.from("tablename").where("propertyByte = 89");
088: assertEquals(query.getSql(),
089: "DELETE FROM tablename WHERE propertyByte = 89");
090: assertTrue(execute(query));
091: }
092:
093: public void testWhereTypedMysql() {
094: Delete query = new Delete(mMysql);
095: query.from("tablename");
096:
097: Calendar cal = Calendar.getInstance();
098: cal.set(2003, 2, 3, 10, 1, 28);
099: cal.set(Calendar.MILLISECOND, 154);
100:
101: query.where("propertyBigDecimal", ">=",
102: new BigDecimal("53443433.9784567")).whereAnd(
103: "propertyBoolean", "=", false).whereOr("propertyByte",
104: "=", (byte) 54).whereAnd("propertyCalendar", "<=", cal)
105: .whereOr("propertyChar", "=", 'f').whereAnd(
106: "propertyDate", "=", cal.getTime()).whereAnd(
107: "propertyDouble", "!=", 73453.71d).whereOr(
108: "propertyFloat", ">=", 1987.14f).whereAnd(
109: "propertyInt", "=", 973).whereAnd(
110: "propertyLong", "<", 347678L).whereAnd(
111: "propertyShort", "=", (short) 78).whereOr(
112: "propertySqlDate", "=",
113: new java.sql.Date(cal.getTime().getTime()))
114: .whereAnd("propertyString", "LIKE", "someotherstring%")
115: .whereAnd("propertyStringbuffer", "=",
116: new StringBuffer("someotherstringbuff"))
117: .whereOr("propertyTime", "=",
118: new Time(cal.getTime().getTime())).whereAnd(
119: "propertyTimestamp", "<=",
120: new Timestamp(cal.getTime().getTime()));
121:
122: assertEquals(
123: query.getSql(),
124: "DELETE FROM tablename WHERE propertyBigDecimal >= 53443433.9784567 AND propertyBoolean = 0 OR propertyByte = 54 AND propertyCalendar <= '2003-03-03 10:01:28.0' OR propertyChar = 'f' AND propertyDate = '2003-03-03 10:01:28.0' AND propertyDouble != 73453.71 OR propertyFloat >= 1987.14 AND propertyInt = 973 AND propertyLong < 347678 AND propertyShort = 78 OR propertySqlDate = '2003-03-03' AND propertyString LIKE 'someotherstring%' AND propertyStringbuffer = 'someotherstringbuff' OR propertyTime = '10:01:28' AND propertyTimestamp <= '2003-03-03 10:01:28.0'");
125: assertFalse(execute(query));
126: }
127:
128: public void testWhereTypedMixedMysql() {
129: Delete query = new Delete(mMysql);
130: query.from("tablename");
131:
132: final Calendar cal = Calendar.getInstance();
133: cal.set(2003, 2, 3, 10, 1, 28);
134: cal.set(Calendar.MILLISECOND, 154);
135:
136: query.where("propertyBigDecimal", ">=",
137: new BigDecimal("53443433.9784567")).whereAnd(
138: "propertyBoolean", "=", false).whereOr(
139: "propertyByte = 54").whereAnd("propertyCalendar", "<=",
140: cal).whereOr("propertyChar", "=", 'f').whereAnd(
141: "propertyDate", "=", cal.getTime()).whereAnd(
142: "propertyDouble", "!=", 73453.71d).whereOr(
143: "propertyFloat >= 1987.14").whereAnd("propertyInt",
144: "=", 973).whereAnd("propertyLong", "<", 347678L)
145: .whereAnd("propertyShort", "=", (short) 78)
146: .whereParameterOr("propertySqlDate", "=").whereAnd(
147: "propertyString", "LIKE", "someotherstring%")
148: .whereAnd("propertyStringbuffer", "=",
149: new StringBuffer("someotherstringbuff"))
150: .whereOr("propertyTime", "=",
151: new Time(cal.getTime().getTime())).whereAnd(
152: "propertyTimestamp", "<=",
153: new Timestamp(cal.getTime().getTime()));
154:
155: assertEquals(
156: query.getSql(),
157: "DELETE FROM tablename WHERE propertyBigDecimal >= 53443433.9784567 AND propertyBoolean = 0 OR propertyByte = 54 AND propertyCalendar <= '2003-03-03 10:01:28.0' OR propertyChar = 'f' AND propertyDate = '2003-03-03 10:01:28.0' AND propertyDouble != 73453.71 OR propertyFloat >= 1987.14 AND propertyInt = 973 AND propertyLong < 347678 AND propertyShort = 78 OR propertySqlDate = ? AND propertyString LIKE 'someotherstring%' AND propertyStringbuffer = 'someotherstringbuff' OR propertyTime = '10:01:28' AND propertyTimestamp <= '2003-03-03 10:01:28.0'");
158:
159: assertFalse(execute(query, new DbPreparedStatementHandler() {
160: public void setParameters(DbPreparedStatement statement) {
161: statement.setDate("propertySqlDate", new java.sql.Date(
162: cal.getTime().getTime()));
163: }
164: }));
165: }
166:
167: public void testWhereParametersMysql() {
168: Delete query = new Delete(mMysql);
169: query.from("tablename");
170:
171: assertNull(query.getParameters());
172:
173: query.whereParameter("propertyInt", "=").whereParameterAnd(
174: "propertyLong", "<").whereParameterOr("propertyChar",
175: "=");
176:
177: assertEquals(query.getParameters().getOrderedNames().size(), 3);
178: assertEquals(query.getParameters().getOrderedNames().get(0),
179: "propertyInt");
180: assertEquals(query.getParameters().getOrderedNames().get(1),
181: "propertyLong");
182: assertEquals(query.getParameters().getOrderedNames().get(2),
183: "propertyChar");
184: assertTrue(Arrays.equals(query.getParameters()
185: .getOrderedNamesArray(), new String[] { "propertyInt",
186: "propertyLong", "propertyChar" }));
187:
188: assertEquals(
189: query.getSql(),
190: "DELETE FROM tablename WHERE propertyInt = ? AND propertyLong < ? OR propertyChar = ?");
191: assertTrue(execute(query, new DbPreparedStatementHandler() {
192: public void setParameters(DbPreparedStatement statement) {
193: statement.setInt(1, 545).setLong(2, 50000).setString(3,
194: "v");
195: }
196: }));
197:
198: query.where("propertyInt = 545");
199:
200: assertNull(query.getParameters());
201: assertEquals(query.getSql(),
202: "DELETE FROM tablename WHERE propertyInt = 545");
203: }
204:
205: public void testWhereParametersMixedMysql() {
206: Delete query = new Delete(mMysql);
207: query.from("tablename").where("propertyInt = 545")
208: .whereParameterAnd("propertyLong", "<")
209: .whereParameterOr("propertyChar", "=");
210:
211: assertEquals(query.getParameters().getOrderedNames().get(0),
212: "propertyLong");
213: assertEquals(query.getParameters().getOrderedNames().get(1),
214: "propertyChar");
215: assertTrue(Arrays.equals(query.getParameters()
216: .getOrderedNamesArray(), new String[] { "propertyLong",
217: "propertyChar" }));
218:
219: assertEquals(
220: query.getSql(),
221: "DELETE FROM tablename WHERE propertyInt = 545 AND propertyLong < ? OR propertyChar = ?");
222: assertTrue(execute(query, new DbPreparedStatementHandler() {
223: public void setParameters(DbPreparedStatement statement) {
224: statement.setLong(1, 50000).setString(2, "v");
225: }
226: }));
227:
228: query.where("propertyInt = 545");
229:
230: assertNull(query.getParameters());
231: assertEquals(query.getSql(),
232: "DELETE FROM tablename WHERE propertyInt = 545");
233: }
234:
235: public void testWhereConstructionMysql() {
236: Delete query = new Delete(mMysql);
237: query.from("tablename").where("propertyInt = 545").whereAnd(
238: "propertyLong < 50000").whereOr("propertyChar = 'v'");
239: assertEquals(
240: query.getSql(),
241: "DELETE FROM tablename WHERE propertyInt = 545 AND propertyLong < 50000 OR propertyChar = 'v'");
242: assertTrue(execute(query));
243: }
244:
245: public void testWhereConstructionGroupMysql() {
246: Delete query = new Delete(mMysql);
247: query.from("tablename").where("propertyInt = 545").whereAnd(
248: "propertyLong < 50000").startWhereOr().whereParameter(
249: "propertyString", "=").whereAnd("propertyByte", "<=",
250: (byte) 0).startWhereAnd().where("propertyBoolean",
251: "!=", true).whereParameterOr("propertyStringbuffer",
252: "LIKE").end().end().whereOr("propertyChar = 'v'");
253:
254: assertEquals(query.getParameters().getOrderedNames().get(0),
255: "propertyString");
256: assertEquals(query.getParameters().getOrderedNames().get(1),
257: "propertyStringbuffer");
258: assertTrue(Arrays.equals(query.getParameters()
259: .getOrderedNamesArray(), new String[] {
260: "propertyString", "propertyStringbuffer" }));
261:
262: assertEquals(
263: query.getSql(),
264: "DELETE FROM tablename WHERE propertyInt = 545 AND propertyLong < 50000 OR (propertyString = ? AND propertyByte <= 0 AND (propertyBoolean != 1 OR propertyStringbuffer LIKE ?)) OR propertyChar = 'v'");
265:
266: assertTrue(execute(query, new DbPreparedStatementHandler() {
267: public void setParameters(DbPreparedStatement statement) {
268: statement
269: .setString("propertyString", "someotherstring")
270: .setString("propertyStringbuffer", "stringbuff");
271: }
272: }));
273: }
274:
275: public void testWhereBeanMysql() {
276: Delete query = new Delete(mMysql);
277: query.from("tablename").where(BeanImpl.getPopulatedBean());
278: assertEquals(
279: query.getSql(),
280: "DELETE FROM tablename WHERE propertyBigDecimal = 219038743.392874 AND propertyBoolean = 1 AND propertyBooleanObject = 0 AND propertyByte = 89 AND propertyByteObject = 34 AND propertyCalendar = '2002-06-18 15:26:14.0' AND propertyChar = 'v' AND propertyCharacterObject = 'r' AND propertyDate = '2002-06-18 15:26:14.0' AND propertyDouble = 53348.34 AND propertyDoubleObject = 143298.692 AND propertyEnum = 'VALUE_THREE' AND propertyFloat = 98634.2 AND propertyFloatObject = 8734.7 AND propertyInt = 545 AND propertyIntegerObject = 968 AND propertyLong = 34563 AND propertyLongObject = 66875 AND propertyShort = 43 AND propertyShortObject = 68 AND propertySqlDate = '2002-06-18' AND propertyString = 'someotherstring' AND propertyStringbuffer = 'someotherstringbuff' AND propertyTime = '15:26:14' AND propertyTimestamp = '2002-06-18 15:26:14.0'");
281: // mysql doesn't compare correctly on floats, thus don't execute
282: }
283:
284: public void testWhereBeanConstrainedMysql() {
285: Delete query = new Delete(mMysql);
286: query.from("tablename").where(
287: BeanImplConstrained.getPopulatedBean());
288: assertEquals(
289: query.getSql(),
290: "DELETE FROM tablename WHERE propertyBigDecimal = 219038743.392874 AND propertyBoolean = 1 AND propertyBooleanObject = 0 AND propertyByte = 89 AND propertyByteObject = 34 AND propertyCalendar = '2002-06-18 15:26:14.0' AND propertyChar = 'v' AND propertyCharacterObject = 'r' AND propertyDate = '2002-06-18 15:26:14.0' AND propertyDouble = 53348.34 AND propertyDoubleObject = 143298.692 AND propertyFloat = 98634.2 AND propertyFloatObject = 8734.7 AND propertyInt = 545 AND propertyIntegerObject = 968 AND propertyLongObject = 66875 AND propertyShort = 43 AND propertySqlDate = '2002-06-18' AND propertyString = 'someotherstring' AND propertyStringbuffer = 'someotherstringbuff' AND propertyTime = '15:26:14' AND propertyTimestamp = '2002-06-18 15:26:14.0'");
291: // mysql doesn't compare correctly on floats, thus don't execute
292: }
293:
294: public void testWhereBeanNullValuesMysql() {
295: Delete query = new Delete(mMysql);
296: query.from("tablename").where(BeanImpl.getNullBean());
297: assertEquals(
298: query.getSql(),
299: "DELETE FROM tablename WHERE propertyBoolean = 0 AND propertyBooleanObject = 0 AND propertyByte = 0 AND propertyByteObject = 0 AND propertyDouble = 0.0 AND propertyDoubleObject = 0.0 AND propertyFloat = 0.0 AND propertyFloatObject = 0.0 AND propertyInt = 0 AND propertyIntegerObject = 0 AND propertyLong = 0 AND propertyLongObject = 0 AND propertyShort = 0 AND propertyShortObject = 0");
300: assertTrue(execute(query));
301: }
302:
303: public void testWhereBeanIncludedMysql() {
304: Delete query = new Delete(mMysql);
305: query.from("tablename").whereIncluded(
306: BeanImpl.getPopulatedBean(),
307: new String[] { "propertyByte", "propertyDouble",
308: "propertyShort", "propertyStringbuffer",
309: "propertyTime" });
310: assertEquals(
311: query.getSql(),
312: "DELETE FROM tablename WHERE propertyByte = 89 AND propertyDouble = 53348.34 AND propertyShort = 43 AND propertyStringbuffer = 'someotherstringbuff' AND propertyTime = '15:26:14'");
313: assertTrue(execute(query));
314: }
315:
316: public void testWhereBeanExcludedMysql() {
317: Delete query = new Delete(mMysql);
318: query.from("tablename").whereExcluded(
319: BeanImpl.getPopulatedBean(),
320: new String[] { "propertyByte", "propertyDouble",
321: "propertyShort", "propertyStringbuffer",
322: "propertyTime" });
323: assertEquals(
324: query.getSql(),
325: "DELETE FROM tablename WHERE propertyBigDecimal = 219038743.392874 AND propertyBoolean = 1 AND propertyBooleanObject = 0 AND propertyByteObject = 34 AND propertyCalendar = '2002-06-18 15:26:14.0' AND propertyChar = 'v' AND propertyCharacterObject = 'r' AND propertyDate = '2002-06-18 15:26:14.0' AND propertyDoubleObject = 143298.692 AND propertyEnum = 'VALUE_THREE' AND propertyFloat = 98634.2 AND propertyFloatObject = 8734.7 AND propertyInt = 545 AND propertyIntegerObject = 968 AND propertyLong = 34563 AND propertyLongObject = 66875 AND propertyShortObject = 68 AND propertySqlDate = '2002-06-18' AND propertyString = 'someotherstring' AND propertyTimestamp = '2002-06-18 15:26:14.0'");
326: // mysql doesn't compare correctly on floats, thus don't execute
327: }
328:
329: public void testWhereBeanFilteredMysql() {
330: Delete query = new Delete(mMysql);
331: query.from("tablename").whereFiltered(
332: BeanImpl.getPopulatedBean(),
333: new String[] { "propertyByte", "propertyDouble",
334: "propertyShort", "propertyStringbuffer",
335: "propertyTime" },
336: new String[] { "propertyByte", "propertyShort",
337: "propertyTime" });
338: assertEquals(
339: query.getSql(),
340: "DELETE FROM tablename WHERE propertyDouble = 53348.34 AND propertyStringbuffer = 'someotherstringbuff'");
341: assertTrue(execute(query));
342: }
343:
344: public void testWhereParametersBeanMysql() {
345: Delete query = new Delete(mMysql);
346: query.from("tablename").whereParameters(BeanImpl.class);
347: assertEquals(
348: query.getSql(),
349: "DELETE FROM tablename WHERE propertyBigDecimal = ? AND propertyBoolean = ? AND propertyBooleanObject = ? AND propertyByte = ? AND propertyByteObject = ? AND propertyCalendar = ? AND propertyChar = ? AND propertyCharacterObject = ? AND propertyDate = ? AND propertyDouble = ? AND propertyDoubleObject = ? AND propertyEnum = ? AND propertyFloat = ? AND propertyFloatObject = ? AND propertyInt = ? AND propertyIntegerObject = ? AND propertyLong = ? AND propertyLongObject = ? AND propertyShort = ? AND propertyShortObject = ? AND propertySqlDate = ? AND propertyString = ? AND propertyStringbuffer = ? AND propertyTime = ? AND propertyTimestamp = ?");
350:
351: assertEquals(query.getParameters().getOrderedNames().size(), 25);
352: assertEquals(query.getParameters().getOrderedNames().get(0),
353: "propertyBigDecimal");
354: assertEquals(query.getParameters().getOrderedNames().get(1),
355: "propertyBoolean");
356: assertEquals(query.getParameters().getOrderedNames().get(2),
357: "propertyBooleanObject");
358: assertEquals(query.getParameters().getOrderedNames().get(3),
359: "propertyByte");
360: assertEquals(query.getParameters().getOrderedNames().get(4),
361: "propertyByteObject");
362: assertEquals(query.getParameters().getOrderedNames().get(5),
363: "propertyCalendar");
364: assertEquals(query.getParameters().getOrderedNames().get(6),
365: "propertyChar");
366: assertEquals(query.getParameters().getOrderedNames().get(7),
367: "propertyCharacterObject");
368: assertEquals(query.getParameters().getOrderedNames().get(8),
369: "propertyDate");
370: assertEquals(query.getParameters().getOrderedNames().get(9),
371: "propertyDouble");
372: assertEquals(query.getParameters().getOrderedNames().get(10),
373: "propertyDoubleObject");
374: assertEquals(query.getParameters().getOrderedNames().get(11),
375: "propertyEnum");
376: assertEquals(query.getParameters().getOrderedNames().get(12),
377: "propertyFloat");
378: assertEquals(query.getParameters().getOrderedNames().get(13),
379: "propertyFloatObject");
380: assertEquals(query.getParameters().getOrderedNames().get(14),
381: "propertyInt");
382: assertEquals(query.getParameters().getOrderedNames().get(15),
383: "propertyIntegerObject");
384: assertEquals(query.getParameters().getOrderedNames().get(16),
385: "propertyLong");
386: assertEquals(query.getParameters().getOrderedNames().get(17),
387: "propertyLongObject");
388: assertEquals(query.getParameters().getOrderedNames().get(18),
389: "propertyShort");
390: assertEquals(query.getParameters().getOrderedNames().get(19),
391: "propertyShortObject");
392: assertEquals(query.getParameters().getOrderedNames().get(20),
393: "propertySqlDate");
394: assertEquals(query.getParameters().getOrderedNames().get(21),
395: "propertyString");
396: assertEquals(query.getParameters().getOrderedNames().get(22),
397: "propertyStringbuffer");
398: assertEquals(query.getParameters().getOrderedNames().get(23),
399: "propertyTime");
400: assertEquals(query.getParameters().getOrderedNames().get(24),
401: "propertyTimestamp");
402: assertTrue(Arrays.equals(query.getParameters()
403: .getOrderedNamesArray(), new String[] {
404: "propertyBigDecimal", "propertyBoolean",
405: "propertyBooleanObject", "propertyByte",
406: "propertyByteObject", "propertyCalendar",
407: "propertyChar", "propertyCharacterObject",
408: "propertyDate", "propertyDouble",
409: "propertyDoubleObject", "propertyEnum",
410: "propertyFloat", "propertyFloatObject", "propertyInt",
411: "propertyIntegerObject", "propertyLong",
412: "propertyLongObject", "propertyShort",
413: "propertyShortObject", "propertySqlDate",
414: "propertyString", "propertyStringbuffer",
415: "propertyTime", "propertyTimestamp" }));
416:
417: assertTrue(execute(query, new DbPreparedStatementHandler() {
418: public void setParameters(DbPreparedStatement statement) {
419: Calendar cal = Calendar.getInstance();
420: cal.set(2002, 5, 18, 15, 26, 14);
421: cal.set(Calendar.MILLISECOND, 764);
422: statement.setBigDecimal(1,
423: new BigDecimal("219038743.392874")).setBoolean(
424: 2, true).setBoolean(3, false).setByte(4,
425: (byte) 89).setByte(5, (byte) 34)
426: .setTimestamp(
427: 6,
428: new java.sql.Timestamp(cal.getTime()
429: .getTime())).setString(7, "v")
430: .setString(8, "r").setTimestamp(
431: 9,
432: new java.sql.Timestamp(cal.getTime()
433: .getTime())).setDouble(10,
434: 53348.34d).setDouble(11, 143298.692d)
435: .setString(12, "VALUE_THREE").setFloat(13,
436: 98634.2f).setFloat(14, 8734.7f).setInt(
437: 15, 545).setInt(16, 968).setLong(17,
438: 34563L).setLong(18, 66875L).setShort(
439: 19, (short) 43)
440: .setShort(20, (short) 68).setDate(
441: 21,
442: new java.sql.Date(cal.getTime()
443: .getTime())).setString(22,
444: "someotherstring").setString(23,
445: "someotherstringbuff").setTime(24,
446: new Time(cal.getTime().getTime()))
447: .setTimestamp(25,
448: new Timestamp(cal.getTime().getTime()));
449: }
450: }));
451: }
452:
453: public void testWhereParametersBeanConstrainedMysql() {
454: Delete query = new Delete(mMysql);
455: query.from("tablename").whereParameters(
456: BeanImplConstrained.class);
457: assertEquals(
458: query.getSql(),
459: "DELETE FROM tablename WHERE propertyBigDecimal = ? AND propertyBoolean = ? AND propertyBooleanObject = ? AND propertyByte = ? AND propertyByteObject = ? AND propertyCalendar = ? AND propertyChar = ? AND propertyCharacterObject = ? AND propertyDate = ? AND propertyDouble = ? AND propertyDoubleObject = ? AND propertyFloat = ? AND propertyFloatObject = ? AND propertyInt = ? AND propertyIntegerObject = ? AND propertyLongObject = ? AND propertyShort = ? AND propertySqlDate = ? AND propertyString = ? AND propertyStringbuffer = ? AND propertyTime = ? AND propertyTimestamp = ?");
460:
461: assertEquals(query.getParameters().getOrderedNames().size(), 22);
462: assertEquals(query.getParameters().getOrderedNames().get(0),
463: "propertyBigDecimal");
464: assertEquals(query.getParameters().getOrderedNames().get(1),
465: "propertyBoolean");
466: assertEquals(query.getParameters().getOrderedNames().get(2),
467: "propertyBooleanObject");
468: assertEquals(query.getParameters().getOrderedNames().get(3),
469: "propertyByte");
470: assertEquals(query.getParameters().getOrderedNames().get(4),
471: "propertyByteObject");
472: assertEquals(query.getParameters().getOrderedNames().get(5),
473: "propertyCalendar");
474: assertEquals(query.getParameters().getOrderedNames().get(6),
475: "propertyChar");
476: assertEquals(query.getParameters().getOrderedNames().get(7),
477: "propertyCharacterObject");
478: assertEquals(query.getParameters().getOrderedNames().get(8),
479: "propertyDate");
480: assertEquals(query.getParameters().getOrderedNames().get(9),
481: "propertyDouble");
482: assertEquals(query.getParameters().getOrderedNames().get(10),
483: "propertyDoubleObject");
484: assertEquals(query.getParameters().getOrderedNames().get(11),
485: "propertyFloat");
486: assertEquals(query.getParameters().getOrderedNames().get(12),
487: "propertyFloatObject");
488: assertEquals(query.getParameters().getOrderedNames().get(13),
489: "propertyInt");
490: assertEquals(query.getParameters().getOrderedNames().get(14),
491: "propertyIntegerObject");
492: assertEquals(query.getParameters().getOrderedNames().get(15),
493: "propertyLongObject");
494: assertEquals(query.getParameters().getOrderedNames().get(16),
495: "propertyShort");
496: assertEquals(query.getParameters().getOrderedNames().get(17),
497: "propertySqlDate");
498: assertEquals(query.getParameters().getOrderedNames().get(18),
499: "propertyString");
500: assertEquals(query.getParameters().getOrderedNames().get(19),
501: "propertyStringbuffer");
502: assertEquals(query.getParameters().getOrderedNames().get(20),
503: "propertyTime");
504: assertEquals(query.getParameters().getOrderedNames().get(21),
505: "propertyTimestamp");
506: assertTrue(Arrays.equals(query.getParameters()
507: .getOrderedNamesArray(), new String[] {
508: "propertyBigDecimal", "propertyBoolean",
509: "propertyBooleanObject", "propertyByte",
510: "propertyByteObject", "propertyCalendar",
511: "propertyChar", "propertyCharacterObject",
512: "propertyDate", "propertyDouble",
513: "propertyDoubleObject", "propertyFloat",
514: "propertyFloatObject", "propertyInt",
515: "propertyIntegerObject", "propertyLongObject",
516: "propertyShort", "propertySqlDate", "propertyString",
517: "propertyStringbuffer", "propertyTime",
518: "propertyTimestamp" }));
519:
520: // don't check if actual rows were deleted, since Mysql doesn't
521: // match on the float
522: execute(query, new DbPreparedStatementHandler() {
523: public void setParameters(DbPreparedStatement statement) {
524: Calendar cal = Calendar.getInstance();
525: cal.set(2002, 5, 18, 15, 26, 14);
526: cal.set(Calendar.MILLISECOND, 764);
527: statement.setBigDecimal(1,
528: new BigDecimal("219038743.392874")).setBoolean(
529: 2, true).setBoolean(3, false).setByte(4,
530: (byte) 89).setByte(5, (byte) 34)
531: .setTimestamp(
532: 6,
533: new java.sql.Timestamp(cal.getTime()
534: .getTime())).setString(7, "v")
535: .setString(8, "r").setTimestamp(
536: 9,
537: new java.sql.Timestamp(cal.getTime()
538: .getTime())).setDouble(10,
539: 53348.34d).setDouble(11, 143298.692d)
540: .setFloat(12, 98634.2f).setFloat(13, 8734.7f)
541: .setInt(14, 545).setInt(15, 968).setLong(16,
542: 66875L).setShort(17, (short) 43)
543: .setDate(
544: 18,
545: new java.sql.Date(cal.getTime()
546: .getTime())).setString(19,
547: "someotherstring").setString(20,
548: "someotherstringbuff").setTime(21,
549: new Time(cal.getTime().getTime()))
550: .setTimestamp(22,
551: new Timestamp(cal.getTime().getTime()));
552: }
553: });
554: }
555:
556: public void testWhereParametersBeanExcludedMysql() {
557: Delete query = new Delete(mMysql);
558: query.from("tablename").whereParametersExcluded(
559: BeanImpl.class,
560: new String[] { "propertyBoolean", "propertyByte",
561: "propertyChar", "propertyDouble",
562: "propertyDoubleObject", "propertyFloat",
563: "propertyFloatObject", "propertyInt",
564: "propertyLong", "propertySqlDate",
565: "propertyStringbuffer", "propertyTimestamp" });
566: assertEquals(
567: query.getSql(),
568: "DELETE FROM tablename WHERE propertyBigDecimal = ? AND propertyBooleanObject = ? AND propertyByteObject = ? AND propertyCalendar = ? AND propertyCharacterObject = ? AND propertyDate = ? AND propertyEnum = ? AND propertyIntegerObject = ? AND propertyLongObject = ? AND propertyShort = ? AND propertyShortObject = ? AND propertyString = ? AND propertyTime = ?");
569:
570: assertEquals(query.getParameters().getOrderedNames().size(), 13);
571: assertEquals(query.getParameters().getOrderedNames().get(0),
572: "propertyBigDecimal");
573: assertEquals(query.getParameters().getOrderedNames().get(1),
574: "propertyBooleanObject");
575: assertEquals(query.getParameters().getOrderedNames().get(2),
576: "propertyByteObject");
577: assertEquals(query.getParameters().getOrderedNames().get(3),
578: "propertyCalendar");
579: assertEquals(query.getParameters().getOrderedNames().get(4),
580: "propertyCharacterObject");
581: assertEquals(query.getParameters().getOrderedNames().get(5),
582: "propertyDate");
583: assertEquals(query.getParameters().getOrderedNames().get(6),
584: "propertyEnum");
585: assertEquals(query.getParameters().getOrderedNames().get(7),
586: "propertyIntegerObject");
587: assertEquals(query.getParameters().getOrderedNames().get(8),
588: "propertyLongObject");
589: assertEquals(query.getParameters().getOrderedNames().get(9),
590: "propertyShort");
591: assertEquals(query.getParameters().getOrderedNames().get(10),
592: "propertyShortObject");
593: assertEquals(query.getParameters().getOrderedNames().get(11),
594: "propertyString");
595: assertEquals(query.getParameters().getOrderedNames().get(12),
596: "propertyTime");
597: assertTrue(Arrays.equals(query.getParameters()
598: .getOrderedNamesArray(),
599: new String[] { "propertyBigDecimal",
600: "propertyBooleanObject", "propertyByteObject",
601: "propertyCalendar", "propertyCharacterObject",
602: "propertyDate", "propertyEnum",
603: "propertyIntegerObject", "propertyLongObject",
604: "propertyShort", "propertyShortObject",
605: "propertyString", "propertyTime" }));
606:
607: assertTrue(execute(query, new DbPreparedStatementHandler() {
608: public void setParameters(DbPreparedStatement statement) {
609: Calendar cal = Calendar.getInstance();
610: cal.set(2002, 5, 18, 15, 26, 14);
611: cal.set(Calendar.MILLISECOND, 764);
612: statement.setBigDecimal(1,
613: new BigDecimal("219038743.392874")).setBoolean(
614: 2, false).setByte(3, (byte) 34)
615: .setTimestamp(
616: 4,
617: new java.sql.Timestamp(cal.getTime()
618: .getTime())).setString(5, "r")
619: .setTimestamp(
620: 6,
621: new java.sql.Timestamp(cal.getTime()
622: .getTime())).setString(7,
623: "VALUE_THREE").setInt(8, 968).setLong(
624: 9, 66875L).setShort(10, (short) 43)
625: .setShort(11, (short) 68).setString(12,
626: "someotherstring").setTime(13,
627: new Time(cal.getTime().getTime()));
628: }
629: }));
630: }
631:
632: public void testDeleteSubselectParamsMysql() {
633: // mysql doesn't support subqueries
634: }
635:
636: public void testCloneMysql() {
637: Delete query = new Delete(mMysql);
638: query.hint("LOW_PRIORITY").from("tablename").whereParameter(
639: "propertyString", "=").whereOr("propertyByte", "=",
640: (byte) 54).whereAnd("propertyDouble", "!=", 73453.71d)
641: .whereParameterOr("propertyInt", "=")
642: .whereParameterAnd("propertyLong", "<")
643: .whereParameterOr("propertyChar", "=");
644:
645: Delete query_clone = query.clone();
646: assertEquals(query.getSql(), query_clone.getSql());
647: assertTrue(query != query_clone);
648: execute(query, new DbPreparedStatementHandler() {
649: public void setParameters(DbPreparedStatement statement) {
650: statement.setString("propertyChar", "M").setInt(
651: "propertyInt", 34).setString("propertyString",
652: "string'value").setLong("propertyLong", 34543);
653: }
654: });
655: }
656: }
|