01: // Copyright (c) 2003-2007, Jodd Team (jodd.sf.net). All Rights Reserved.
02:
03: package jodd.db;
04:
05: import junit.framework.TestCase;
06:
07: import jodd.util.collection.IntArrayList;
08:
09: public class DbQueryTest extends TestCase {
10:
11: static class DbQueryEx extends DbQueryParser {
12: String prepare(String sql) {
13: super .parseSql(sql);
14: return this .sql;
15: }
16: }
17:
18: private void doTestSingleNamedParam(DbQueryEx dbp,
19: String paramName, int position) {
20: IntArrayList list = dbp.getNamedParameterPositions(paramName);
21: assertEquals(1, list.size());
22: assertEquals(position, list.get(0));
23: assertTrue(dbp.prepared);
24: }
25:
26: private void doTestDoubleNamedParam(DbQueryEx dbp,
27: String paramName, int position1, int position2) {
28: IntArrayList list = dbp.getNamedParameterPositions(paramName);
29: assertEquals(2, list.size());
30: assertEquals(position1, list.get(0));
31: assertEquals(position2, list.get(1));
32: assertTrue(dbp.prepared);
33: }
34:
35: public void testPrepareSql() {
36: DbQueryEx dbp = new DbQueryEx();
37: assertEquals("aaa", dbp.prepare("aaa"));
38: assertFalse(dbp.prepared);
39: assertEquals("", dbp.prepare(""));
40: assertFalse(dbp.prepared);
41: assertEquals("aaa ? aa", dbp.prepare("aaa ? aa"));
42: assertTrue(dbp.prepared);
43: assertEquals("? aaa ? aa ?", dbp.prepare("? aaa ? aa ?"));
44: assertTrue(dbp.prepared);
45: assertEquals("aaa ? aa ? x ? x", dbp
46: .prepare("aaa ? aa ? x ? x"));
47: assertTrue(dbp.prepared);
48:
49: assertEquals("aaa ? aa", dbp.prepare("aaa :x aa"));
50: doTestSingleNamedParam(dbp, "x", 1);
51:
52: assertEquals("? aaa ?", dbp.prepare(":x aaa :y"));
53: doTestSingleNamedParam(dbp, "x", 1);
54: doTestSingleNamedParam(dbp, "y", 2);
55:
56: assertEquals("? aaa ?", dbp.prepare(":xxx aaa :x"));
57: doTestSingleNamedParam(dbp, "xxx", 1);
58: doTestSingleNamedParam(dbp, "x", 2);
59:
60: assertEquals("aaa ? aaa ? aaa ? aa ? aaa ?", dbp
61: .prepare("aaa :x aaa :y aaa ? aa :x aaa ?"));
62: doTestDoubleNamedParam(dbp, "x", 1, 4);
63: doTestSingleNamedParam(dbp, "y", 2);
64:
65: assertEquals("aaa ? aaa ? aaa ? aa ? aaa ?", dbp
66: .prepare("aaa :x aaa ?1 aaa ? aa :x aaa ?1"));
67: doTestDoubleNamedParam(dbp, "1", 2, 5);
68: doTestDoubleNamedParam(dbp, "x", 1, 4);
69:
70: assertTrue(dbp.prepared);
71:
72: }
73: }
|