Changeset 276

Show
Ignore:
Timestamp:
01/25/08 18:05:43 (1 year ago)
Author:
chris
Message:

Check that deletion of NULL fields is properly logged.

Check that undo() of an INSERT works without deleting all rows.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • lex/trunk/test/com/qwirx/db/SqlDatabaseTest.java

    r273 r276  
    7474                                "t_txt mediumtext," +  
    7575                                "t_flt decimal(10,2)," + // not supported by JDBC? 
    76                                 "t_dat date, "+ 
    77                                 "t_dtm datetime, "+ 
    78                 "t_dat2 DATE NOT NULL"+ 
     76                                "t_dat date, " + 
     77                                "t_dtm datetime, " + 
     78                "t_dat2 DATE NOT NULL, " + 
     79                "t_txt2 varchar(40)" + 
    7980                                ")"); 
    8081        }                
    81  
    82         public void tearDown() throws Exception  
     82         
     83        public void assertOldValues() throws Exception 
    8384        { 
    8485                db.prepareSelect("SELECT * FROM logtest"); 
    8586                ResultSet rs = db.select(); 
    8687                 
    87                 if (rs.next()) 
    88                 { 
    89                         assertEquals("1", rs.getString("ID")); 
    90                         assertEquals("1234", rs.getString("t_int")); 
    91                         assertEquals("Hello World", rs.getString("t_str")); 
    92                         assertEquals("A somewhat longer string", rs.getString("t_txt")); 
    93                         assertEquals("3.14", rs.getString("t_flt")); 
    94                         assertEquals("1979-01-07", rs.getString("t_dat")); 
    95                         assertEquals("1979-01-07 06:35:00.0", rs.getString("t_dtm")); 
    96                         assertEquals("0000-00-00", db.getString("t_dat2")); 
    97                         assertFalse(rs.next()); 
    98                 } 
    99                  
     88                assertTrue(rs.next()); 
     89                assertEquals("1", rs.getString("ID")); 
     90                assertEquals("1234", rs.getString("t_int")); 
     91                assertEquals("Hello World", rs.getString("t_str")); 
     92                assertEquals("A somewhat longer string", rs.getString("t_txt")); 
     93                assertEquals("3.14", rs.getString("t_flt")); 
     94                assertEquals("1979-01-07", rs.getString("t_dat")); 
     95                assertEquals("1979-01-07 06:35:00.0", rs.getString("t_dtm")); 
     96                assertEquals("0000-00-00", db.getString("t_dat2")); 
     97                assertFalse(rs.next()); 
     98        } 
     99         
     100        public void tearDown() throws Exception 
     101        { 
     102                db.finish(); 
    100103                db.executeDirect("DROP TABLE logtest"); 
    101104        } 
     
    234237        } 
    235238         
    236         private void assertEquals(ChangedRow rowA, ChangedRow rowB
    237         { 
    238                 List fieldsA = rowA.getColumns(); 
    239                  
    240                 for (Iterator i = rowB.getColumns().iterator(); i.hasNext();) 
     239        private void assertEquals(ChangedRow expected, ChangedRow actual
     240        { 
     241                List fieldsA = expected.getValues(); 
     242                 
     243                for (Iterator i = actual.getColumns().iterator(); i.hasNext();) 
    241244                { 
    242245                        String colName = (String)i.next(); 
    243                         String valA = rowA.get(colName).getOldValue(); 
    244                         String valB = rowB.get(colName).getOldValue(); 
     246                        assertNotNull(colName + " should have an expected value",  
     247                                expected.get(colName)); 
     248                        String valA = expected.get(colName).getOldValue(); 
     249                        String valB = actual.get(colName).getOldValue(); 
    245250                        if (valA != null && valB == null) 
    246251                        { 
     
    252257                        } 
    253258 
    254                         valA = rowA.get(colName).getNewValue(); 
    255                         valB = rowB.get(colName).getNewValue(); 
     259                        valA = expected.get(colName).getNewValue(); 
     260                        valB = actual.get(colName).getNewValue(); 
    256261                        if (valA != null && valB == null) 
    257262                        { 
     
    263268                        } 
    264269                         
    265                         fieldsA.remove(colName); 
     270                        fieldsA.remove(expected.get(colName)); 
    266271                } 
    267272                 
     
    328333                }); 
    329334                assertEquals(expectedReverseRowChange, expectedRowChange.reverse()); 
    330         assertEquals(expectedReverseRowChange, actualReverseRowChange); 
     335                expectedReverseRowChange.put(new ChangedValue("t_txt2", null, null)); 
     336                assertEquals(expectedReverseRowChange, actualReverseRowChange); 
    331337        assertEquals(0, db.getSingleInteger("SELECT COUNT(1) FROM logtest")); 
    332338        } 
    333          
     339 
     340        public void testInsert2() throws Exception  
     341        { 
     342                SqlChange insert1 = insertTestRecord(); 
     343                SqlChange insert2 = insertTestRecord(); 
     344                SqlChange insert3 = insertTestRecord(); 
     345                assertEquals(3, db.getSingleInteger("SELECT COUNT(1) FROM logtest")); 
     346                db.loadChange(insert3.getId()).undo(); 
     347                assertEquals(2, db.getSingleInteger("SELECT COUNT(1) FROM logtest")); 
     348                insert1.undo(); 
     349                assertEquals(1, db.getSingleInteger("SELECT COUNT(1) FROM logtest")); 
     350                insert2.undo(); 
     351                assertEquals(0, db.getSingleInteger("SELECT COUNT(1) FROM logtest")); 
     352        } 
     353 
    334354        public void testUpdate() throws Exception 
    335355        { 
     
    345365                testUpdate.setString("t_dat", "1980-10-15"); // happy birthday 
    346366                testUpdate.setString("t_dtm", "1980-10-15 12:34:56.0"); 
     367                testUpdate.setString("t_txt2", "This value was null"); 
    347368                testUpdate.execute(); 
    348369                 
     
    388409                expectedRowChange.put(new ChangedValue("t_dtm",  
    389410                                "1979-01-07 06:35:00.0", "1980-10-15 12:34:56.0")); 
     411                expectedRowChange.put(new ChangedValue("t_txt2", 
     412                                null, "This value was null")); 
    390413 
    391414                assertCurrentValues("SELECT * FROM logtest", expectedRowChange); 
     
    413436                                new ChangedValue("t_dtm",  
    414437                                        "1980-10-15 12:34:56.0", "1979-01-07 06:35:00.0"), 
     438                                new ChangedValue("t_txt2", "This value was null", null), 
    415439                }); 
    416440                assertEquals(expectedReverseRowChange, expectedRowChange.reverse()); 
    417441        assertEquals(expectedReverseRowChange, actualReverseRowChange); 
    418442        assertEquals(1, db.getSingleInteger("SELECT COUNT(1) FROM logtest")); 
     443        assertOldValues(); 
    419444        } 
    420445 
     
    466491                cr.put(new ChangedValue("t_dtm",  "1979-01-07 06:35:00.0",    null)); 
    467492        cr.put(new ChangedValue("t_dat2", "0000-00-00",               null)); 
     493        cr.put(new ChangedValue("t_txt2", null,                       null)); 
    468494 
    469495                stmt = db.prepareSelect("SELECT * FROM logtest"); 
     
    481507 
    482508                assertEquals(1, db.getSingleInteger("SELECT COUNT(1) FROM logtest")); 
     509                assertOldValues(); 
    483510        } 
    484511