1
2
3
4 package org.melati.poem.test;
5
6 import java.sql.Connection;
7 import java.sql.Driver;
8 import java.sql.SQLException;
9 import java.sql.Statement;
10 import java.util.Properties;
11
12 import org.melati.poem.PoemDatabase;
13 import org.melati.poem.dbms.Hsqldb;
14
15 import junit.framework.TestCase;
16
17
18
19
20
21
22
23
24
25
26 public class DatabaseUnifyWithDBTest extends TestCase {
27
28 public DatabaseUnifyWithDBTest(String name) {
29 super(name);
30 }
31
32 protected void setUp() throws Exception {
33 super.setUp();
34 }
35
36 protected void tearDown() throws Exception {
37 super.tearDown();
38 }
39
40
41
42
43 public void testUnifyWithDB() throws Exception {
44 Driver driver = null;
45 Class<?> driverClass;
46 String url = "jdbc:hsqldb:mem:unifiable";
47 driverClass = Class.forName("org.hsqldb.jdbcDriver");
48 driver = (Driver)driverClass.newInstance();
49 Properties info = new Properties();
50 info.put("user", "sa");
51 info.put("password", "");
52
53 Connection c = driver.connect(url, info);
54 Statement s = c.createStatement();
55 Hsqldb dbms = new Hsqldb();
56 StringBuffer sqb = new StringBuffer();
57 sqb.append("CREATE TABLE " + dbms.getQuotedName("testable") + " (");
58 sqb.append(dbms.getQuotedName("id") + " INTEGER NOT NULL PRIMARY KEY");
59 sqb.append(", ");
60 sqb.append(dbms.getQuotedName("testname") + " VARCHAR(233) NOT NULL");
61 sqb.append(", ");
62 sqb.append(dbms.getQuotedName("deleted") + " BOOLEAN");
63 sqb.append(", ");
64 sqb.append(dbms.getQuotedName("canRead") + " INTEGER");
65 sqb.append(", ");
66 sqb.append(dbms.getQuotedName("canCreate") + " INTEGER");
67 sqb.append(", ");
68 sqb.append(dbms.getQuotedName("canDelete") + " INTEGER");
69 sqb.append(", ");
70 sqb.append(dbms.getQuotedName("canSelect") + " INTEGER");
71 sqb.append(")");
72
73 try {
74 s.executeUpdate(sqb.toString());
75 } catch (SQLException e) {
76 try {
77 assertTrue(e.getMessage().indexOf("already exists") > 0);
78 } catch (Error e2) {
79 throw e;
80 }
81 }
82 try {
83 s.executeUpdate("CREATE UNIQUE INDEX \"TESTABLE_ID_INDEX\" ON \"TESTABLE\" (\"ID\")");
84 } catch (SQLException e) {
85 assertTrue(e.getMessage().indexOf("already exists") > 0);
86 }
87 StringBuffer sqb2 = new StringBuffer();
88 sqb2.append("INSERT INTO " + dbms.getQuotedName("testable") + " (");
89 sqb2.append(dbms.getQuotedName("id")) ;
90 sqb2.append(", ");
91 sqb2.append(dbms.getQuotedName("testname")) ;
92 sqb2.append(") VALUES (");
93 sqb2.append("0, 't1'");
94 sqb2.append(") ");
95
96 try {
97 s.executeUpdate(sqb2.toString());
98 } catch (SQLException e) {
99 assertTrue(e.getMessage().indexOf("Violation of unique index") >= 0);
100 }
101
102 s.close();
103 c.commit();
104 if (!c.isClosed()) {
105 Statement st = c.createStatement();
106
107 st.close();
108 }
109 c.close();
110 PoemDatabase db = new PoemDatabase();
111 db.connect("unifiable", "org.melati.poem.dbms.Hsqldb",
112 url, "sa", "", 22);
113 assertEquals(22, db.getFreeTransactionsCount());
114 assertTrue(db.getClass().getName() == "org.melati.poem.PoemDatabase");
115 assertEquals("testable", db.getTable("testable").getName());
116 db.setLogSQL(false);
117 }
118
119
120
121
122 public void testUnifyWithDB_nonIDKey() throws Exception {
123 Driver driver = null;
124 Class<?> driverClass;
125 String url = "jdbc:hsqldb:mem:unifiable";
126 driverClass = Class.forName("org.hsqldb.jdbcDriver");
127 driver = (Driver)driverClass.newInstance();
128 Properties info = new Properties();
129 info.put("user", "sa");
130 info.put("password", "");
131
132 Connection c = driver.connect(url, info);
133 Statement s = c.createStatement();
134 Hsqldb dbms = new Hsqldb();
135 StringBuffer sqb = new StringBuffer();
136 sqb.append("CREATE TABLE " + dbms.getQuotedName("testable2") + " (");
137 sqb.append(dbms.getQuotedName("testableId") + " INTEGER NOT NULL PRIMARY KEY");
138 sqb.append(", ");
139 sqb.append(dbms.getQuotedName("testname") + " VARCHAR(233) NOT NULL");
140 sqb.append(", ");
141 sqb.append(dbms.getQuotedName("deleted") + " BOOLEAN");
142 sqb.append(", ");
143 sqb.append(dbms.getQuotedName("canRead") + " INTEGER");
144 sqb.append(", ");
145 sqb.append(dbms.getQuotedName("canCreate") + " INTEGER");
146 sqb.append(", ");
147 sqb.append(dbms.getQuotedName("canDelete") + " INTEGER");
148 sqb.append(", ");
149 sqb.append(dbms.getQuotedName("canSelect") + " INTEGER");
150 sqb.append(")");
151
152 try {
153 s.executeUpdate(sqb.toString());
154 } catch (SQLException e) {
155 assertTrue(e.getMessage().indexOf("already exists") > 0);
156 }
157 try {
158 s.executeUpdate("CREATE UNIQUE INDEX \"TESTABLE_ID_INDEX\" ON \"TESTABLE2\" (\"TESTABLEID\")");
159 } catch (SQLException e) {
160 assertTrue(e.getMessage(),e.getMessage().indexOf("already exists") > 0);
161 }
162 StringBuffer sqb2 = new StringBuffer();
163 sqb2.append("INSERT INTO " + dbms.getQuotedName("testable2") + " (");
164 sqb2.append(dbms.getQuotedName("testableid")) ;
165 sqb2.append(", ");
166 sqb2.append(dbms.getQuotedName("testname")) ;
167 sqb2.append(") VALUES (");
168 sqb2.append("0, 't1'");
169 sqb2.append(") ");
170
171 try {
172 s.executeUpdate(sqb2.toString());
173 } catch (SQLException e) {
174 assertTrue(e.getMessage(),e.getMessage().indexOf("Violation of unique index") >= 0);
175 }
176
177 s.close();
178 c.commit();
179 if (!c.isClosed()) {
180 Statement st = c.createStatement();
181
182 st.close();
183 }
184 c.close();
185 PoemDatabase db = new PoemDatabase();
186 db.connect("unifiable", "org.melati.poem.dbms.Hsqldb",
187 url, "sa", "", 22);
188 assertEquals(22, db.getFreeTransactionsCount());
189 assertTrue(db.getClass().getName() == "org.melati.poem.PoemDatabase");
190 assertEquals("testable2", db.getTable("testable2").getName());
191 db.setLogSQL(false);
192 }
193
194 }