001: package com.uwyn.rife.database.querymanagers.generic;
002:
003: import com.uwyn.rife.database.Datasource;
004: import com.uwyn.rife.database.queries.Delete;
005: import com.uwyn.rife.database.queries.Select;
006: import com.uwyn.rife.database.querymanagers.generic.beans.BeanImpl;
007: import com.uwyn.rife.database.querymanagers.generic.beans.LinkBean;
008: import com.uwyn.rife.database.querymanagers.generic.beans.SimpleBean;
009: import java.math.BigDecimal;
010: import java.sql.Time;
011: import java.sql.Timestamp;
012: import java.util.Calendar;
013: import java.util.List;
014: import junit.framework.TestCase;
015:
016: public class TestDeleteQuery extends TestCase {
017: private Datasource mDatasource = null;
018: private GenericQueryManager<BeanImpl> mBigBeanManager = null;
019: private GenericQueryManager<SimpleBean> mManager = null;
020: private GenericQueryManager<LinkBean> mLinkManager = null;
021:
022: public TestDeleteQuery(Datasource datasource,
023: String datasourceName, String name) {
024: super (name);
025: mDatasource = datasource;
026: }
027:
028: protected void setUp() {
029: mManager = GenericQueryManagerFactory.getInstance(mDatasource,
030: SimpleBean.class);
031: mLinkManager = GenericQueryManagerFactory.getInstance(
032: mDatasource, LinkBean.class);
033: mBigBeanManager = GenericQueryManagerFactory.getInstance(
034: mDatasource, BeanImpl.class);
035:
036: int poolsize = mDatasource.getPoolsize();
037: // disabling pool for firebird
038: if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource
039: .getAliasedDriver())) {
040: mDatasource.setPoolsize(0);
041: }
042: try {
043: mManager.install();
044: mLinkManager.install();
045: mBigBeanManager.install();
046: } finally {
047: if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource
048: .getAliasedDriver())) {
049: mDatasource.setPoolsize(poolsize);
050: }
051: }
052: }
053:
054: protected void tearDown() {
055: int poolsize = mDatasource.getPoolsize();
056: // disabling pool for firebird
057: if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource
058: .getAliasedDriver())) {
059: mDatasource.setPoolsize(0);
060: }
061: try {
062: mManager.remove();
063: mLinkManager.remove();
064: mBigBeanManager.remove();
065: } finally {
066: if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource
067: .getAliasedDriver())) {
068: mDatasource.setPoolsize(poolsize);
069: }
070: }
071: }
072:
073: public void testCloneToStringAndClear() {
074: DeleteQuery query = mBigBeanManager.getDeleteQuery().where(
075: "propertyString", "=", "bean set 1");
076:
077: assertEquals(query.toString(),
078: "DELETE FROM beanimpl WHERE propertyString = 'bean set 1'");
079:
080: DeleteQuery queryclone = query.clone();
081:
082: assertEquals(queryclone.toString(),
083: "DELETE FROM beanimpl WHERE propertyString = 'bean set 1'");
084:
085: queryclone.where("propertyString", "!=", "bean set 2");
086:
087: assertEquals(
088: queryclone.toString(),
089: "DELETE FROM beanimpl WHERE propertyString = 'bean set 1' AND propertyString != 'bean set 2'");
090:
091: queryclone.clear();
092:
093: assertEquals(queryclone.toString(),
094: "DELETE FROM beanimpl WHERE propertyString = 'bean set 1'");
095:
096: query.clear();
097:
098: assertEquals(query.toString(), "DELETE FROM beanimpl");
099: }
100:
101: public void testGetParameters() {
102: Delete delete = new Delete(mDatasource);
103: delete.from("simplebean").whereParameter("testString", "=");
104:
105: DeleteQuery query = new DeleteQuery(delete);
106:
107: assertEquals(query.getParameters().getOrderedNames().size(), 1);
108: assertTrue(query.getParameters().getOrderedNames().contains(
109: "testString"));
110:
111: assertEquals(
112: query.getParameters().getOrderedNamesArray().length, 1);
113: assertEquals(query.getParameters().getOrderedNamesArray()[0],
114: "testString");
115: }
116:
117: public void testGetDatasource() {
118: assertTrue(mDatasource.equals(mBigBeanManager.getDeleteQuery()
119: .getDatasource()));
120: }
121:
122: public void testGetFrom() {
123: assertTrue(mBigBeanManager.getDeleteQuery().getFrom().equals(
124: BeanImpl.class.getName()
125: .replaceAll(
126: BeanImpl.class.getPackage().getName()
127: + ".", "").toLowerCase()));
128: }
129:
130: public void testWhere() {
131: BeanImpl bean1 = new BeanImpl();
132:
133: Calendar cal = Calendar.getInstance();
134: cal.set(2004, 6, 19, 16, 27, 15);
135: cal.set(Calendar.MILLISECOND, 765);
136: bean1
137: .setPropertyBigDecimal(new BigDecimal(
138: "384834838434.38483"));
139: bean1.setPropertyBoolean(false);
140: bean1.setPropertyBooleanObject(true);
141: bean1.setPropertyByte((byte) 90);
142: bean1.setPropertyByteObject((byte) 35);
143: bean1.setPropertyCalendar(cal);
144: bean1.setPropertyChar('w');
145: bean1.setPropertyCharacterObject('s');
146: bean1.setPropertyDate(cal.getTime());
147: bean1.setPropertyDouble(37478.34d);
148: bean1.setPropertyDoubleObject(384724.692d);
149: bean1.setPropertyFloat(34241.2f);
150: bean1.setPropertyFloatObject(3432.7f);
151: bean1.setPropertyLong(23432L);
152: bean1.setPropertyLongObject(23423L);
153: bean1.setPropertyShort((short) 44);
154: bean1.setPropertyShortObject((short) 69);
155: bean1.setPropertyIntegerObject(421);
156: bean1.setPropertySqlDate(new java.sql.Date(cal.getTime()
157: .getTime()));
158: bean1.setPropertyString("nostringhere");
159: bean1.setPropertyStringbuffer(new StringBuffer("buffbuffbuff"));
160: bean1.setPropertyTime(new Time(cal.getTime().getTime()));
161: bean1.setPropertyTimestamp(new Timestamp(cal.getTime()
162: .getTime()));
163:
164: int bean1id = mBigBeanManager.save(bean1);
165: mBigBeanManager.save(BeanImpl.getPopulatedBean());
166:
167: mBigBeanManager.delete(mBigBeanManager.getDeleteQuery().where(
168: "propertyString = 'nostringhere'"));
169: List<BeanImpl> list = mBigBeanManager.restore();
170: assertEquals(list.size(), 1);
171: bean1id = mBigBeanManager.save(bean1);
172:
173: mBigBeanManager.delete(mBigBeanManager.getDeleteQuery().where(
174: "propertyBoolean", "=", false));
175: list = mBigBeanManager.restore();
176: assertEquals(list.size(), 1);
177: bean1id = mBigBeanManager.save(bean1);
178:
179: mBigBeanManager.delete(mBigBeanManager.getDeleteQuery().where(
180: "propertyByte", "=", (byte) 90));
181: list = mBigBeanManager.restore();
182: assertEquals(list.size(), 1);
183: bean1id = mBigBeanManager.save(bean1);
184:
185: mBigBeanManager.delete(mBigBeanManager.getDeleteQuery().where(
186: "propertyChar", "=", 'w'));
187: list = mBigBeanManager.restore();
188: assertEquals(list.size(), 1);
189: bean1id = mBigBeanManager.save(bean1);
190:
191: mBigBeanManager.delete(mBigBeanManager.getDeleteQuery().where(
192: "propertyDouble", "=", 37478.34d));
193: list = mBigBeanManager.restore();
194: assertEquals(list.size(), 1);
195: bean1id = mBigBeanManager.save(bean1);
196:
197: if (!("org.postgresql.Driver".equals(mDatasource
198: .getAliasedDriver()))
199: && !("com.mysql.jdbc.Driver".equals(mDatasource
200: .getAliasedDriver()))
201: && !("org.hsqldb.jdbcDriver".equals(mDatasource
202: .getAliasedDriver()))
203: && !("org.h2.Driver".equals(mDatasource
204: .getAliasedDriver()))
205: && !("org.apache.derby.jdbc.EmbeddedDriver"
206: .equals(mDatasource.getAliasedDriver()))) // skip this for postgres, mysql, hsqldb, h2 and derby since it doesn't work
207: {
208: mBigBeanManager.delete(mBigBeanManager.getDeleteQuery()
209: .where("propertyFloat", "=", 34241.2f));
210: list = mBigBeanManager.restore();
211: assertEquals(list.size(), 1);
212: bean1id = mBigBeanManager.save(bean1);
213: }
214:
215: mBigBeanManager.delete(mBigBeanManager.getDeleteQuery().where(
216: "propertyLong", "=", 23432L));
217: list = mBigBeanManager.restore();
218: assertEquals(list.size(), 1);
219: bean1id = mBigBeanManager.save(bean1);
220:
221: mBigBeanManager.delete(mBigBeanManager.getDeleteQuery().where(
222: "propertyShort", "=", (short) 44));
223: list = mBigBeanManager.restore();
224: assertEquals(list.size(), 1);
225:
226: DeleteQuery query = new DeleteQuery(mBigBeanManager
227: .getDeleteQuery().where("id", "=", bean1id)
228: .getDelegate());
229:
230: mBigBeanManager.delete(query
231: .where("propertyString = 'nostringhere'"));
232: list = mBigBeanManager.restore();
233: assertEquals(list.size(), 1);
234: bean1id = mBigBeanManager.save(bean1);
235: query = new DeleteQuery(mBigBeanManager.getDeleteQuery().where(
236: "id", "=", bean1id).getDelegate());
237:
238: mBigBeanManager.delete(query.where("propertyBoolean", "=",
239: false));
240: list = mBigBeanManager.restore();
241: assertEquals(list.size(), 1);
242: bean1id = mBigBeanManager.save(bean1);
243: query = new DeleteQuery(mBigBeanManager.getDeleteQuery().where(
244: "id", "=", bean1id).getDelegate());
245:
246: mBigBeanManager.delete(query.where("propertyByte", "=",
247: (byte) 90));
248: list = mBigBeanManager.restore();
249: assertEquals(list.size(), 1);
250: bean1id = mBigBeanManager.save(bean1);
251: query = new DeleteQuery(mBigBeanManager.getDeleteQuery().where(
252: "id", "=", bean1id).getDelegate());
253:
254: mBigBeanManager.delete(query.where("propertyChar", "=", 'w'));
255: list = mBigBeanManager.restore();
256: assertEquals(list.size(), 1);
257: bean1id = mBigBeanManager.save(bean1);
258: query = new DeleteQuery(mBigBeanManager.getDeleteQuery().where(
259: "id", "=", bean1id).getDelegate());
260:
261: mBigBeanManager.delete(query.where("propertyDouble", "=",
262: 37478.34d));
263: list = mBigBeanManager.restore();
264: assertEquals(list.size(), 1);
265: bean1id = mBigBeanManager.save(bean1);
266: query = new DeleteQuery(mBigBeanManager.getDeleteQuery().where(
267: "id", "=", bean1id).getDelegate());
268:
269: if (!("org.postgresql.Driver".equals(mDatasource
270: .getAliasedDriver()))
271: && !("com.mysql.jdbc.Driver".equals(mDatasource
272: .getAliasedDriver()))
273: && !("org.hsqldb.jdbcDriver".equals(mDatasource
274: .getAliasedDriver()))
275: && !("org.h2.Driver".equals(mDatasource
276: .getAliasedDriver()))
277: && !("org.apache.derby.jdbc.EmbeddedDriver"
278: .equals(mDatasource.getAliasedDriver()))) // skip this for postgres, mysql, hsqldb, h2 and derby since it doesn't work
279: {
280: mBigBeanManager.delete(query.where("propertyFloat", "=",
281: 34241.2f));
282: list = mBigBeanManager.restore();
283: assertEquals(list.size(), 1);
284: bean1id = mBigBeanManager.save(bean1);
285: query = new DeleteQuery(mBigBeanManager.getDeleteQuery()
286: .where("id", "=", bean1id).getDelegate());
287: }
288:
289: mBigBeanManager.delete(query.where("id", "=", bean1id)); // primary key
290: list = mBigBeanManager.restore();
291: assertEquals(list.size(), 1);
292: bean1id = mBigBeanManager.save(bean1);
293: query = new DeleteQuery(mBigBeanManager.getDeleteQuery().where(
294: "id", "=", bean1id).getDelegate());
295:
296: mBigBeanManager
297: .delete(query.where("propertyLong", "=", 23432L));
298: list = mBigBeanManager.restore();
299: assertEquals(list.size(), 1);
300: bean1id = mBigBeanManager.save(bean1);
301: query = new DeleteQuery(mBigBeanManager.getDeleteQuery().where(
302: "id", "=", bean1id).getDelegate());
303:
304: mBigBeanManager.delete(query.where("propertyShort", "=",
305: (short) 44));
306: list = mBigBeanManager.restore();
307: assertEquals(list.size(), 1);
308: }
309:
310: public void testWhereAnd() {
311: BeanImpl bean1 = new BeanImpl();
312:
313: Calendar cal = Calendar.getInstance();
314: cal.set(2004, 6, 19, 16, 27, 15);
315: cal.set(Calendar.MILLISECOND, 765);
316: bean1
317: .setPropertyBigDecimal(new BigDecimal(
318: "384834838434.38483"));
319: bean1.setPropertyBoolean(false);
320: bean1.setPropertyBooleanObject(true);
321: bean1.setPropertyByte((byte) 90);
322: bean1.setPropertyByteObject((byte) 35);
323: bean1.setPropertyCalendar(cal);
324: bean1.setPropertyChar('w');
325: bean1.setPropertyCharacterObject('s');
326: bean1.setPropertyDate(cal.getTime());
327: bean1.setPropertyDouble(37478.34d);
328: bean1.setPropertyDoubleObject(384724.692d);
329: bean1.setPropertyFloat(34241.2f);
330: bean1.setPropertyFloatObject(3432.7f);
331: bean1.setPropertyLong(23432L);
332: bean1.setPropertyLongObject(23423L);
333: bean1.setPropertyShort((short) 44);
334: bean1.setPropertyShortObject((short) 69);
335: bean1.setPropertyIntegerObject(421);
336: bean1.setPropertySqlDate(new java.sql.Date(cal.getTime()
337: .getTime()));
338: bean1.setPropertyString("nostringhere");
339: bean1.setPropertyStringbuffer(new StringBuffer("buffbuffbuff"));
340: bean1.setPropertyTime(new Time(cal.getTime().getTime()));
341: bean1.setPropertyTimestamp(new Timestamp(cal.getTime()
342: .getTime()));
343:
344: int bean1id = mBigBeanManager.save(bean1);
345: mBigBeanManager.save(BeanImpl.getPopulatedBean());
346:
347: mBigBeanManager.delete(mBigBeanManager.getDeleteQuery().where(
348: "id", "=", bean1id).whereAnd(
349: "propertyString = 'nostringhere'").whereAnd(
350: "propertyBoolean", "=", false).whereAnd("propertyByte",
351: "=", (byte) 90).whereAnd("propertyChar", "=", 'w')
352: .whereAnd("propertyDouble", "=", 37478.34d).whereAnd(
353: "propertyLong", "=", 23432L).whereAnd(
354: "propertyString", "=", "nostringhere")
355: .whereAnd("propertyIntegerObject", "=", 421).whereAnd(
356: "propertyShort", "=", (short) 44));
357:
358: List<BeanImpl> list = mBigBeanManager.restore();
359: assertEquals(list.size(), 1);
360:
361: if (!("org.postgresql.Driver".equals(mDatasource
362: .getAliasedDriver()))
363: && !("com.mysql.jdbc.Driver".equals(mDatasource
364: .getAliasedDriver()))
365: && !("org.hsqldb.jdbcDriver".equals(mDatasource
366: .getAliasedDriver()))
367: && !("org.h2.Driver".equals(mDatasource
368: .getAliasedDriver()))
369: && !("org.apache.derby.jdbc.EmbeddedDriver"
370: .equals(mDatasource.getAliasedDriver()))) // skip this for postgres, mysql, hsqldb, h2 and derby since it doesn't work
371: {
372: bean1id = mBigBeanManager.save(bean1);
373: mBigBeanManager.delete(mBigBeanManager.getDeleteQuery()
374: .where("id", "=", bean1id).whereAnd(
375: "propertyFloat", "=", 34241.2f));
376: list = mBigBeanManager.restore();
377: assertEquals(list.size(), 1);
378: }
379: }
380:
381: public void testWhereOr() {
382: BeanImpl bean1 = new BeanImpl();
383:
384: Calendar cal = Calendar.getInstance();
385: cal.set(2004, 6, 19, 16, 27, 15);
386: cal.set(Calendar.MILLISECOND, 765);
387: bean1
388: .setPropertyBigDecimal(new BigDecimal(
389: "384834838434.38483"));
390: bean1.setPropertyBoolean(false);
391: bean1.setPropertyBooleanObject(true);
392: bean1.setPropertyByte((byte) 90);
393: bean1.setPropertyByteObject((byte) 35);
394: bean1.setPropertyCalendar(cal);
395: bean1.setPropertyChar('w');
396: bean1.setPropertyCharacterObject('s');
397: bean1.setPropertyDate(cal.getTime());
398: bean1.setPropertyDouble(37478.34d);
399: bean1.setPropertyDoubleObject(384724.692d);
400: bean1.setPropertyFloat(34241.2f);
401: bean1.setPropertyFloatObject(3432.7f);
402: bean1.setPropertyLong(23432L);
403: bean1.setPropertyLongObject(23423L);
404: bean1.setPropertyShort((short) 44);
405: bean1.setPropertyShortObject((short) 69);
406: bean1.setPropertyIntegerObject(421);
407: bean1.setPropertySqlDate(new java.sql.Date(cal.getTime()
408: .getTime()));
409: bean1.setPropertyString("nostringhere");
410: bean1.setPropertyStringbuffer(new StringBuffer("buffbuffbuff"));
411: bean1.setPropertyTime(new Time(cal.getTime().getTime()));
412: bean1.setPropertyTimestamp(new Timestamp(cal.getTime()
413: .getTime()));
414:
415: int bean1id = mBigBeanManager.save(bean1);
416: mBigBeanManager.save(BeanImpl.getPopulatedBean());
417:
418: mBigBeanManager.delete(mBigBeanManager.getDeleteQuery().where(
419: "id", "=", bean1id).whereOr(
420: "propertyString = 'nostringhere'").whereOr(
421: "propertyBoolean", "=", false).whereOr("propertyByte",
422: "=", (byte) 90).whereOr("propertyChar", "=", 'w')
423: .whereOr("propertyDouble", "=", 37478.34d).whereOr(
424: "propertyLong", "=", 23432L).whereOr(
425: "propertyIntegerObject", "=", 421).whereOr(
426: "propertyShort", "=", (short) 44).whereOr(
427: "propertyString", "=", "nostringhere"));
428:
429: List<BeanImpl> list = mBigBeanManager.restore();
430: assertEquals(list.size(), 1);
431:
432: if (!("com.mysql.jdbc.Driver".equals(mDatasource
433: .getAliasedDriver()))
434: && !("org.hsqldb.jdbcDriver".equals(mDatasource
435: .getAliasedDriver()))) // skip this for mysql and hsqldb since it doesn't work
436: {
437: bean1id = mBigBeanManager.save(bean1);
438:
439: mBigBeanManager.delete(mBigBeanManager.getDeleteQuery()
440: .where("id", "=", bean1id).whereOr("propertyFloat",
441: "=", 34241.2f));
442: list = mBigBeanManager.restore();
443: assertEquals(list.size(), 1);
444: }
445: }
446:
447: public void testWhereSubselect() {
448: SimpleBean bean1 = new SimpleBean();
449: SimpleBean bean2 = new SimpleBean();
450: SimpleBean bean3 = new SimpleBean();
451: SimpleBean bean4 = new SimpleBean();
452: SimpleBean bean5 = new SimpleBean();
453:
454: LinkBean linkbean1 = new LinkBean();
455: LinkBean linkbean2 = new LinkBean();
456:
457: linkbean1.setTestString("linkbean 1");
458: linkbean2.setTestString("linkbean 2");
459:
460: mLinkManager.save(linkbean1);
461: mLinkManager.save(linkbean2);
462:
463: bean1.setTestString("bean set 1");
464: bean2.setTestString("bean set 1");
465: bean3.setTestString("bean set 1");
466: bean4.setTestString("bean set 2");
467: bean5.setTestString("bean set 2");
468:
469: bean1.setLinkBean(linkbean1.getId());
470: bean2.setLinkBean(linkbean1.getId());
471: bean3.setLinkBean(linkbean1.getId());
472: bean4.setLinkBean(linkbean2.getId());
473: bean5.setLinkBean(linkbean2.getId());
474:
475: mManager.save(bean1);
476: mManager.save(bean2);
477: mManager.save(bean3);
478: mManager.save(bean4);
479: mManager.save(bean5);
480:
481: Select select = new Select(mDatasource);
482: select.from(mLinkManager.getTable()).field("id").where("id",
483: "=", linkbean1.getId());
484:
485: DeleteQuery query = mManager.getDeleteQuery();
486: query.where("linkBean = (" + select.getSql() + ")")
487: .whereSubselect(select);
488:
489: if (!("com.mysql.jdbc.Driver".equals(mDatasource
490: .getAliasedDriver()))) // skip this for mysql since it doesn't work
491: {
492: mManager.delete(query);
493: List<SimpleBean> list = mManager.restore();
494: assertEquals(list.size(), 2);
495: }
496: }
497: }
|