1 21 package net.sf.hajdbc.dialect; 22 23 import java.sql.DatabaseMetaData ; 24 import java.sql.ResultSet ; 25 import java.sql.SQLException ; 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 40 @Test 41 public class TestDefaultDialect 42 { 43 protected IMocksControl control = EasyMock.createStrictControl(); 44 protected DatabaseMetaData metaData = this.control.createMock(DatabaseMetaData .class); 45 protected ResultSet resultSet = this.control.createMock(ResultSet .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 63 public void testGetSimpleSQL() 64 { 65 String sql = this.dialect.getSimpleSQL(); 66 67 assert sql.equals("SELECT 1") : sql; 68 } 69 70 73 public void testGetLockTableSQL() 74 { 75 String schema = "schema"; 76 String table = "table"; 77 String 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 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 e) 101 { 102 assert false : e; 103 } 104 } 105 106 109 public void testGetTruncateTableSQL() 110 { 111 String schema = "schema"; 112 String table = "table"; 113 String 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 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 e) 129 { 130 assert false : e; 131 } 132 } 133 134 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 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 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 e) 169 { 170 assert false : e; 171 } 172 } 173 174 177 public void testGetDropForeignKeyConstraintSQL() 178 { 179 ForeignKeyConstraint constraint = new ForeignKeyConstraint("fk_name", "schema", "table"); 180 String 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 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 e) 197 { 198 assert false : e; 199 } 200 } 201 202 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 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 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 e) 227 { 228 assert false : e; 229 } 230 } 231 232 235 public void testGetDropUniqueConstraintSQL() 236 { 237 UniqueConstraint constraint = new UniqueConstraint("uk_name", "schema", "table"); 238 String 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 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 e) 255 { 256 assert false : e; 257 } 258 } 259 260 263 public void testQualifyTable() 264 { 265 String schema = "schema"; 266 String table = "table"; 267 String 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 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 e) 283 { 284 assert false : e; 285 } 286 } 287 288 291 public void testQualifyTableNoSchema() 292 { 293 String schema = null; 294 String table = "table"; 295 String quote = "'"; 296 297 try 298 { 299 EasyMock.expect(this.metaData.getIdentifierQuoteString()).andReturn(quote); 300 301 this.control.replay(); 302 303 String sql = this.dialect.qualifyTable(this.metaData, schema, table); 304 305 this.control.verify(); 306 307 assert sql.equals("'table'") : sql; 308 } 309 catch (SQLException e) 310 { 311 assert false : e; 312 } 313 } 314 315 318 public void testQualifyTableSchemaNotSupported() 319 { 320 String schema = "schema"; 321 String table = "table"; 322 String 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 sql = this.dialect.qualifyTable(this.metaData, schema, table); 332 333 this.control.verify(); 334 335 assert sql.equals("'table'") : sql; 336 } 337 catch (SQLException e) 338 { 339 assert false : e; 340 } 341 } 342 343 346 public void testQuote() 347 { 348 String identifier = "blah"; 349 String quote = "'"; 350 351 try 352 { 353 EasyMock.expect(this.metaData.getIdentifierQuoteString()).andReturn(quote); 354 355 this.control.replay(); 356 357 String sql = this.dialect.quote(this.metaData, identifier); 358 359 this.control.verify(); 360 361 assert sql.equals("'blah'") : sql; 362 } 363 catch (SQLException e) 364 { 365 assert false : e; 366 } 367 } 368 369 372 public void testIsSelectForUpdate() 373 { 374 String 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 e) 389 { 390 assert false : e; 391 } 392 } 393 394 397 public void testIsSelectForUpdateFalse() 398 { 399 String 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 e) 414 { 415 assert false : e; 416 } 417 } 418 419 422 public void testIsSelectForUpdateNotSupported() 423 { 424 String 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 e) 439 { 440 assert false : e; 441 } 442 } 443 } 444 | Popular Tags |