KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sf > hajdbc > dialect > TestDefaultDialect


1 /*
2  * HA-JDBC: High-Availability JDBC
3  * Copyright (c) 2004-2006 Paul Ferraro
4  *
5  * This library is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU Lesser General Public License as published by the
7  * Free Software Foundation; either version 2.1 of the License, or (at your
8  * option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
13  * for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with this library; if not, write to the Free Software Foundation,
17  * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  *
19  * Contact: ferraro@users.sourceforge.net
20  */

21 package net.sf.hajdbc.dialect;
22
23 import java.sql.DatabaseMetaData JavaDoc;
24 import java.sql.ResultSet JavaDoc;
25 import java.sql.SQLException JavaDoc;
26
27 import net.sf.hajdbc.Dialect;
28 import net.sf.hajdbc.ForeignKeyConstraint;
29 import net.sf.hajdbc.UniqueConstraint;
30
31 import org.easymock.EasyMock;
32 import org.easymock.IMocksControl;
33 import org.testng.annotations.AfterMethod;
34 import org.testng.annotations.Test;
35
36 /**
37  * @author Paul Ferraro
38  *
39  */

40 @Test
41 public class TestDefaultDialect
42 {
43     protected IMocksControl control = EasyMock.createStrictControl();
44     protected DatabaseMetaData JavaDoc metaData = this.control.createMock(DatabaseMetaData JavaDoc.class);
45     protected ResultSet JavaDoc resultSet = this.control.createMock(ResultSet JavaDoc.class);
46     
47     protected Dialect dialect = this.createDialect();
48     
49     protected Dialect createDialect()
50     {
51         return new DefaultDialect();
52     }
53     
54     @AfterMethod
55     public void reset()
56     {
57         this.control.reset();
58     }
59     
60     /**
61      * Test case for {@link net.sf.hajdbc.Dialect#getSimpleSQL()}
62      */

63     public void testGetSimpleSQL()
64     {
65         String JavaDoc sql = this.dialect.getSimpleSQL();
66         
67         assert sql.equals("SELECT 1") : sql;
68     }
69
70     /**
71      * Test case for {@link net.sf.hajdbc.Dialect#getLockTableSQL(java.sql.DatabaseMetaData, java.lang.String, java.lang.String)}
72      */

73     public void testGetLockTableSQL()
74     {
75         String JavaDoc schema = "schema";
76         String JavaDoc table = "table";
77         String JavaDoc quote = "'";
78         
79         try
80         {
81             EasyMock.expect(this.metaData.supportsSchemasInDataManipulation()).andReturn(true);
82             EasyMock.expect(this.metaData.getIdentifierQuoteString()).andReturn(quote).times(2);
83             EasyMock.expect(this.metaData.getPrimaryKeys(null, schema, table)).andReturn(this.resultSet);
84             EasyMock.expect(this.resultSet.next()).andReturn(true);
85             EasyMock.expect(this.resultSet.getString("COLUMN_NAME")).andReturn("column");
86             EasyMock.expect(this.resultSet.next()).andReturn(false);
87             
88             this.resultSet.close();
89             
90             EasyMock.expect(this.metaData.getIdentifierQuoteString()).andReturn(quote);
91             
92             this.control.replay();
93             
94             String JavaDoc sql = this.dialect.getLockTableSQL(this.metaData, schema, table);
95             
96             this.control.verify();
97             
98             assert sql.equals("UPDATE 'schema'.'table' SET 'column'='column'") : sql;
99         }
100         catch (SQLException JavaDoc e)
101         {
102             assert false : e;
103         }
104     }
105
106     /**
107      * Test case for {@link net.sf.hajdbc.Dialect#getTruncateTableSQL(java.sql.DatabaseMetaData, java.lang.String, java.lang.String)}
108      */

109     public void testGetTruncateTableSQL()
110     {
111         String JavaDoc schema = "schema";
112         String JavaDoc table = "table";
113         String JavaDoc quote = "'";
114         
115         try
116         {
117             EasyMock.expect(this.metaData.supportsSchemasInDataManipulation()).andReturn(true);
118             EasyMock.expect(this.metaData.getIdentifierQuoteString()).andReturn(quote).times(2);
119             
120             this.control.replay();
121             
122             String JavaDoc sql = this.dialect.getTruncateTableSQL(this.metaData, schema, table);
123             
124             this.control.verify();
125             
126             assert sql.equals("DELETE FROM 'schema'.'table'") : sql;
127         }
128         catch (SQLException JavaDoc e)
129         {
130             assert false : e;
131         }
132     }
133
134     /**
135      * Test case for {@link net.sf.hajdbc.Dialect#getCreateForeignKeyConstraintSQL(java.sql.DatabaseMetaData, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)}
136      */

137     public void testGetCreateForeignKeyConstraintSQL()
138     {
139         ForeignKeyConstraint constraint = new ForeignKeyConstraint("fk_name", "schema", "table");
140         constraint.getColumnList().add("column1");
141         constraint.getColumnList().add("column2");
142         constraint.setForeignSchema("other_schema");
143         constraint.setForeignTable("other_table");
144         constraint.getForeignColumnList().add("other_column1");
145         constraint.getForeignColumnList().add("other_column2");
146         constraint.setUpdateRule(DatabaseMetaData.importedKeyNoAction);
147         constraint.setDeleteRule(DatabaseMetaData.importedKeyNoAction);
148         constraint.setDeferrability(DatabaseMetaData.importedKeyNotDeferrable);
149
150         String JavaDoc quote = "'";
151         
152         try
153         {
154             EasyMock.expect(this.metaData.getIdentifierQuoteString()).andReturn(quote);
155             EasyMock.expect(this.metaData.supportsSchemasInDataManipulation()).andReturn(true);
156             EasyMock.expect(this.metaData.getIdentifierQuoteString()).andReturn(quote).times(4);
157             EasyMock.expect(this.metaData.supportsSchemasInDataManipulation()).andReturn(true);
158             EasyMock.expect(this.metaData.getIdentifierQuoteString()).andReturn(quote).times(4);
159             
160             this.control.replay();
161             
162             String JavaDoc sql = this.dialect.getCreateForeignKeyConstraintSQL(this.metaData, constraint);
163             
164             this.control.verify();
165             
166             assert sql.equals("ALTER TABLE 'schema'.'table' ADD CONSTRAINT 'fk_name' FOREIGN KEY ('column1','column2') REFERENCES 'other_schema'.'other_table' ('other_column1','other_column2') ON DELETE NO ACTION ON UPDATE NO ACTION NOT DEFERRABLE") : sql;
167         }
168         catch (SQLException JavaDoc e)
169         {
170             assert false : e;
171         }
172     }
173
174     /**
175      * Test case for {@link net.sf.hajdbc.Dialect#getDropForeignKeyConstraintSQL(java.sql.DatabaseMetaData, java.lang.String, java.lang.String, java.lang.String)}
176      */

177     public void testGetDropForeignKeyConstraintSQL()
178     {
179         ForeignKeyConstraint constraint = new ForeignKeyConstraint("fk_name", "schema", "table");
180         String JavaDoc quote = "'";
181         
182         try
183         {
184             EasyMock.expect(this.metaData.getIdentifierQuoteString()).andReturn(quote);
185             EasyMock.expect(this.metaData.supportsSchemasInDataManipulation()).andReturn(true);
186             EasyMock.expect(this.metaData.getIdentifierQuoteString()).andReturn(quote).times(2);
187             
188             this.control.replay();
189             
190             String JavaDoc sql = this.dialect.getDropForeignKeyConstraintSQL(this.metaData, constraint);
191             
192             this.control.verify();
193             
194             assert sql.equals("ALTER TABLE 'schema'.'table' DROP CONSTRAINT 'fk_name'") : sql;
195         }
196         catch (SQLException JavaDoc e)
197         {
198             assert false : e;
199         }
200     }
201
202     /**
203      * Test case for {@link net.sf.hajdbc.Dialect#getCreateUniqueConstraintSQL(java.sql.DatabaseMetaData, java.lang.String, java.lang.String, java.lang.String, java.util.List)}
204      */

205     public void testGetCreateUniqueConstraintSQL()
206     {
207         UniqueConstraint constraint = new UniqueConstraint("uk_name", "schema", "table");
208         constraint.getColumnList().add("column1");
209         constraint.getColumnList().add("column2");
210         String JavaDoc quote = "'";
211         
212         try
213         {
214             EasyMock.expect(this.metaData.getIdentifierQuoteString()).andReturn(quote);
215             EasyMock.expect(this.metaData.supportsSchemasInDataManipulation()).andReturn(true);
216             EasyMock.expect(this.metaData.getIdentifierQuoteString()).andReturn(quote).times(4);
217             
218             this.control.replay();
219             
220             String JavaDoc sql = this.dialect.getCreateUniqueConstraintSQL(this.metaData, constraint);
221             
222             this.control.verify();
223             
224             assert sql.equals("ALTER TABLE 'schema'.'table' ADD CONSTRAINT 'uk_name' UNIQUE ('column1','column2')") : sql;
225         }
226         catch (SQLException JavaDoc e)
227         {
228             assert false : e;
229         }
230     }
231
232     /**
233      * Test case for {@link net.sf.hajdbc.Dialect#getDropUniqueConstraintSQL(java.sql.DatabaseMetaData, java.lang.String, java.lang.String, java.lang.String)}
234      */

235     public void testGetDropUniqueConstraintSQL()
236     {
237         UniqueConstraint constraint = new UniqueConstraint("uk_name", "schema", "table");
238         String JavaDoc quote = "'";
239         
240         try
241         {
242             EasyMock.expect(this.metaData.getIdentifierQuoteString()).andReturn(quote);
243             EasyMock.expect(this.metaData.supportsSchemasInDataManipulation()).andReturn(true);
244             EasyMock.expect(this.metaData.getIdentifierQuoteString()).andReturn(quote).times(2);
245             
246             this.control.replay();
247             
248             String JavaDoc sql = this.dialect.getDropUniqueConstraintSQL(this.metaData, constraint);
249             
250             this.control.verify();
251             
252             assert sql.equals("ALTER TABLE 'schema'.'table' DROP CONSTRAINT 'uk_name'") : sql;
253         }
254         catch (SQLException JavaDoc e)
255         {
256             assert false : e;
257         }
258     }
259
260     /**
261      * Test case for {@link net.sf.hajdbc.Dialect#qualifyTable(java.sql.DatabaseMetaData, java.lang.String, java.lang.String)}
262      */

263     public void testQualifyTable()
264     {
265         String JavaDoc schema = "schema";
266         String JavaDoc table = "table";
267         String JavaDoc quote = "'";
268         
269         try
270         {
271             EasyMock.expect(this.metaData.supportsSchemasInDataManipulation()).andReturn(true);
272             EasyMock.expect(this.metaData.getIdentifierQuoteString()).andReturn(quote).times(2);
273             
274             this.control.replay();
275             
276             String JavaDoc sql = this.dialect.qualifyTable(this.metaData, schema, table);
277             
278             this.control.verify();
279             
280             assert sql.equals("'schema'.'table'") : sql;
281         }
282         catch (SQLException JavaDoc e)
283         {
284             assert false : e;
285         }
286     }
287
288     /**
289      * Test case for {@link net.sf.hajdbc.Dialect#qualifyTable(java.sql.DatabaseMetaData, java.lang.String, java.lang.String)}
290      */

291     public void testQualifyTableNoSchema()
292     {
293         String JavaDoc schema = null;
294         String JavaDoc table = "table";
295         String JavaDoc quote = "'";
296         
297         try
298         {
299             EasyMock.expect(this.metaData.getIdentifierQuoteString()).andReturn(quote);
300             
301             this.control.replay();
302             
303             String JavaDoc sql = this.dialect.qualifyTable(this.metaData, schema, table);
304             
305             this.control.verify();
306             
307             assert sql.equals("'table'") : sql;
308         }
309         catch (SQLException JavaDoc e)
310         {
311             assert false : e;
312         }
313     }
314
315     /**
316      * Test case for {@link net.sf.hajdbc.Dialect#qualifyTable(java.sql.DatabaseMetaData, java.lang.String, java.lang.String)}
317      */

318     public void testQualifyTableSchemaNotSupported()
319     {
320         String JavaDoc schema = "schema";
321         String JavaDoc table = "table";
322         String JavaDoc quote = "'";
323         
324         try
325         {
326             EasyMock.expect(this.metaData.supportsSchemasInDataManipulation()).andReturn(false);
327             EasyMock.expect(this.metaData.getIdentifierQuoteString()).andReturn(quote);
328             
329             this.control.replay();
330             
331             String JavaDoc sql = this.dialect.qualifyTable(this.metaData, schema, table);
332             
333             this.control.verify();
334             
335             assert sql.equals("'table'") : sql;
336         }
337         catch (SQLException JavaDoc e)
338         {
339             assert false : e;
340         }
341     }
342
343     /**
344      * Test case for {@link net.sf.hajdbc.Dialect#quote(java.sql.DatabaseMetaData, java.lang.String)}
345      */

346     public void testQuote()
347     {
348         String JavaDoc identifier = "blah";
349         String JavaDoc quote = "'";
350         
351         try
352         {
353             EasyMock.expect(this.metaData.getIdentifierQuoteString()).andReturn(quote);
354             
355             this.control.replay();
356             
357             String JavaDoc sql = this.dialect.quote(this.metaData, identifier);
358             
359             this.control.verify();
360             
361             assert sql.equals("'blah'") : sql;
362         }
363         catch (SQLException JavaDoc e)
364         {
365             assert false : e;
366         }
367     }
368
369     /**
370      * Test case for {@link net.sf.hajdbc.Dialect#isSelectForUpdate(java.sql.DatabaseMetaData, java.lang.String)}
371      */

372     public void testIsSelectForUpdate()
373     {
374         String JavaDoc sql = "SELECT * FROM table FOR UPDATE";
375         
376         try
377         {
378             EasyMock.expect(this.metaData.supportsSelectForUpdate()).andReturn(true);
379             
380             this.control.replay();
381             
382             boolean result = this.dialect.isSelectForUpdate(this.metaData, sql);
383             
384             this.control.verify();
385             
386             assert result;
387         }
388         catch (SQLException JavaDoc e)
389         {
390             assert false : e;
391         }
392     }
393
394     /**
395      * Test case for {@link net.sf.hajdbc.Dialect#isSelectForUpdate(java.sql.DatabaseMetaData, java.lang.String)}
396      */

397     public void testIsSelectForUpdateFalse()
398     {
399         String JavaDoc sql = "SELECT * FROM table";
400         
401         try
402         {
403             EasyMock.expect(this.metaData.supportsSelectForUpdate()).andReturn(true);
404             
405             this.control.replay();
406             
407             boolean result = this.dialect.isSelectForUpdate(this.metaData, sql);
408             
409             this.control.verify();
410             
411             assert !result;
412         }
413         catch (SQLException JavaDoc e)
414         {
415             assert false : e;
416         }
417     }
418
419     /**
420      * Test case for {@link net.sf.hajdbc.Dialect#isSelectForUpdate(java.sql.DatabaseMetaData, java.lang.String)}
421      */

422     public void testIsSelectForUpdateNotSupported()
423     {
424         String JavaDoc sql = "SELECT blah FOR UPDATE";
425         
426         try
427         {
428             EasyMock.expect(this.metaData.supportsSelectForUpdate()).andReturn(false);
429             
430             this.control.replay();
431             
432             boolean result = this.dialect.isSelectForUpdate(this.metaData, sql);
433             
434             this.control.verify();
435             
436             assert !result;
437         }
438         catch (SQLException JavaDoc e)
439         {
440             assert false : e;
441         }
442     }
443 }
444
Popular Tags