def lastItemId_table5000Rows_returnsItemId4999(self): DataGenerator.addFiveThousandPeople(self._connectionPool) container = self.SQLContainer(TableQuery('people', self._connectionPool, AllTests.sqlGen)) if AllTests.db == DB.ORACLE: Assert.assertEquals(str(self.RowId([4999 + self._offset])), str(container.lastItemId())) else: Assert.assertEquals(self.RowId([4999 + self._offset]), container.lastItemId())
def isLastId_table5000RowsLastId_returnsTrue(self): DataGenerator.addFiveThousandPeople(self._connectionPool) container = self.SQLContainer(TableQuery('people', self._connectionPool, AllTests.sqlGen)) if AllTests.db == DB.ORACLE: Assert.assertTrue(container.isLastId(self.RowId([BigDecimal(4999 + self._offset)]))) else: Assert.assertTrue(container.isLastId(self.RowId([4999 + self._offset])))
def removeRow_throwsOptimisticLockException_shouldStillWork(self): if AllTests.db == AllTests.DB.HSQLDB: # HSQLDB doesn't support versioning, so this is to make the test # green. return DataGenerator.addVersionedData(self._connectionPool) tQuery = TableQuery('versioned', self._connectionPool, AllTests.sqlGen) tQuery.setVersionColumn('VERSION') container = SQLContainer(tQuery) row = container.getItem(container.firstItemId()) Assert.assertEquals('Junk', row.getItemProperty('TEXT').getValue()) # Update the version using another connection. conn = self._connectionPool.reserveConnection() stmt = conn.prepareStatement('UPDATE VERSIONED SET \"TEXT\" = ? WHERE \"ID\" = ?') stmt.setString(1, 'asdf') stmt.setObject(2, row.getItemProperty('ID').getValue()) stmt.executeUpdate() stmt.close() conn.commit() self._connectionPool.releaseConnection(conn) itemToRemove = container.firstItemId() # This is expected, refresh and try again. try: container.removeItem(itemToRemove) container.commit() except OptimisticLockException, e: container.rollback() container.removeItem(itemToRemove) container.commit()
def getResults_delegateRegistered5000Rows_returns100rows(self): DataGenerator.addFiveThousandPeople(self._connectionPool) query = FreeformQuery('SELECT * FROM people', Arrays.asList('ID'), self._connectionPool) delegate = EasyMock.createMock(FreeformQueryDelegate) if AllTests.db == DB.MSSQL: EasyMock.expect(delegate.getQueryString(200, 100)).andReturn('SELECT * FROM (SELECT row_number()' + 'OVER (ORDER BY id ASC) AS rownum, * FROM people)' + ' AS a WHERE a.rownum BETWEEN 201 AND 300') elif AllTests.db == DB.ORACLE: EasyMock.expect(delegate.getQueryString(200, 100)).andReturn('SELECT * FROM (SELECT x.*, ROWNUM AS r FROM' + ' (SELECT * FROM people ORDER BY ID ASC) x) WHERE r BETWEEN 201 AND 300') else: EasyMock.expect(delegate.getQueryString(200, 100)).andReturn('SELECT * FROM people LIMIT 100 OFFSET 200') EasyMock.replay(delegate) query.setDelegate(delegate) query.beginTransaction() rs = query.getResults(200, 100) _0 = True i = 0 while True: if _0 is True: _0 = False else: i += 1 if not (i < 100): break Assert.assertTrue(rs.next()) Assert.assertEquals(200 + i + self._offset, rs.getInt('ID')) Assert.assertFalse(rs.next()) query.commit()
def getIdByIndex_table5000rowsIndex1337_returnsRowId1337(self): DataGenerator.addFiveThousandPeople(self._connectionPool) container = self.SQLContainer(TableQuery('people', self._connectionPool, AllTests.sqlGen)) itemId = container.getIdByIndex(1337) if AllTests.db == DB.ORACLE: Assert.assertEquals(str(self.RowId([1337 + self._offset])), str(itemId)) else: Assert.assertEquals(self.RowId([1337 + self._offset]), itemId)
def isFirstId_tableAddedFirstItemRemoved_returnsFalse(self): DataGenerator.createGarbage(self._connectionPool) container = self.SQLContainer(TableQuery('garbage', self._connectionPool, AllTests.sqlGen)) first = container.addItem() container.addItem() Assert.assertSame(first, container.firstItemId()) Assert.assertTrue(container.removeItem(first)) Assert.assertFalse(container.isFirstId(first))
def prevItemId_tableCurrentItem1337_returns1336(self): DataGenerator.addFiveThousandPeople(self._connectionPool) container = self.SQLContainer(TableQuery('people', self._connectionPool, AllTests.sqlGen)) itemId = container.getIdByIndex(1337) if AllTests.db == DB.ORACLE: Assert.assertEquals(str(self.RowId([1336 + self._offset])), str(container.prevItemId(itemId))) else: Assert.assertEquals(self.RowId([1336 + self._offset]), container.prevItemId(itemId))
def firstItemId_tableNewlyAddedFirstItemRemoved_resultChanges(self): DataGenerator.createGarbage(self._connectionPool) container = self.SQLContainer(TableQuery('garbage', self._connectionPool, AllTests.sqlGen)) first = container.addItem() second = container.addItem() Assert.assertSame(first, container.firstItemId()) Assert.assertTrue(container.removeItem(first)) Assert.assertSame(second, container.firstItemId())
def getCount_delegateRegisteredZeroRows_returnsZero(self): DataGenerator.createGarbage(self._connectionPool) query = FreeformQuery('SELECT * FROM GARBAGE', Arrays.asList('ID'), self._connectionPool) delegate = EasyMock.createMock(FreeformQueryDelegate) EasyMock.expect(delegate.getCountQuery()).andReturn('SELECT COUNT(*) FROM GARBAGE') EasyMock.replay(delegate) query.setDelegate(delegate) Assert.assertEquals(0, query.getCount()) EasyMock.verify(delegate)
def refresh_tableWithoutCallingRefresh_sizeShouldNotUpdate(self): # Yeah, this is a weird one. We're testing that the size doesn't update # after adding lots of items unless we call refresh inbetween. This to # make sure that the refresh method actually refreshes stuff and isn't # a NOP. container = self.SQLContainer(TableQuery('people', self._connectionPool, AllTests.sqlGen)) Assert.assertEquals(4, len(container)) DataGenerator.addFiveThousandPeople(self._connectionPool) Assert.assertEquals(4, len(container))
def indexOfId_table5000RowsWithParameter1337_returns1337(self): DataGenerator.addFiveThousandPeople(self._connectionPool) q = TableQuery('people', self._connectionPool, AllTests.sqlGen) container = self.SQLContainer(q) if AllTests.db == DB.ORACLE: container.getItem(self.RowId([BigDecimal(1337 + self._offset)])) Assert.assertEquals(1337, container.indexOfId(self.RowId([BigDecimal(1337 + self._offset)]))) else: container.getItem(self.RowId([1337 + self._offset])) Assert.assertEquals(1337, container.indexOfId(self.RowId([1337 + self._offset])))
def allIdsFound_table5000RowsLastId_shouldSucceed(self): DataGenerator.addFiveThousandPeople(self._connectionPool) container = self.SQLContainer(TableQuery('people', self._connectionPool, AllTests.sqlGen)) _0 = True i = 0 while True: if _0 is True: _0 = False else: i += 1 if not (i < 5000): break Assert.assertTrue(container.containsId(container.getIdByIndex(i)))
def getItem_table5000RowsWithParameter1337_returnsItemWithId1337(self): DataGenerator.addFiveThousandPeople(self._connectionPool) query = TableQuery('people', self._connectionPool, AllTests.sqlGen) container = self.SQLContainer(query) if AllTests.db == DB.ORACLE: item = container.getItem(self.RowId([BigDecimal(1337 + self._offset)])) Assert.assertNotNull(item) Assert.assertEquals(BigDecimal(1337 + self._offset), item.getItemProperty('ID').getValue()) else: item = container.getItem(self.RowId([1337 + self._offset])) Assert.assertNotNull(item) Assert.assertEquals(1337 + self._offset, item.getItemProperty('ID').getValue()) Assert.assertEquals('Person 1337', item.getItemProperty('NAME').getValue())
def getResults_noDelegate5000Rows_returns5000rows(self): DataGenerator.addFiveThousandPeople(self._connectionPool) tQuery = TableQuery('people', self._connectionPool, AllTests.sqlGen) tQuery.beginTransaction() rs = tQuery.getResults(0, 0) _0 = True i = 0 while True: if _0 is True: _0 = False else: i += 1 if not (i < 5000): break Assert.assertTrue(rs.next()) Assert.assertFalse(rs.next()) tQuery.commit()
def getResults_noDelegate5000Rows_returns5000rows(self): DataGenerator.addFiveThousandPeople(self._connectionPool) query = FreeformQuery('SELECT * FROM people', Arrays.asList('ID'), self._connectionPool) query.beginTransaction() rs = query.getResults(0, 0) _0 = True i = 0 while True: if _0 is True: _0 = False else: i += 1 if not (i < 5000): break Assert.assertTrue(rs.next()) Assert.assertFalse(rs.next()) query.commit()
def removeRow_versionSetAndEqualToDBValue_shouldSucceed(self): DataGenerator.addVersionedData(self._connectionPool) tQuery = TableQuery('versioned', self._connectionPool, AllTests.sqlGen) tQuery.setVersionColumn('VERSION') container = SQLContainer(tQuery) row = container.getItem(container.firstItemId()) Assert.assertEquals('Junk', row.getItemProperty('TEXT').getValue()) container.removeItem(container.firstItemId()) container.commit() conn = self._connectionPool.reserveConnection() stmt = conn.prepareStatement('SELECT * FROM VERSIONED WHERE \"TEXT\" = ?') stmt.setString(1, 'Junk') rs = stmt.executeQuery() Assert.assertFalse(rs.next()) rs.close() stmt.close() conn.commit() self._connectionPool.releaseConnection(conn)
def storeRow_versionSetAndLessThanDBValue_shouldThrowException(self): if AllTests.db == DB.HSQLDB: raise OptimisticLockException('HSQLDB doesn\'t support row versioning for optimistic locking - don\'t run this test.', None) DataGenerator.addVersionedData(self._connectionPool) tQuery = TableQuery('versioned', self._connectionPool, AllTests.sqlGen) tQuery.setVersionColumn('VERSION') container = SQLContainer(tQuery) row = container.getItem(container.firstItemId()) Assert.assertEquals('Junk', row.getItemProperty('TEXT').getValue()) row.getItemProperty('TEXT').setValue('asdf') # Update the version using another connection. conn = self._connectionPool.reserveConnection() stmt = conn.prepareStatement('UPDATE VERSIONED SET \"TEXT\" = ? WHERE \"ID\" = ?') stmt.setString(1, 'foo') stmt.setObject(2, row.getItemProperty('ID').getValue()) stmt.executeUpdate() stmt.close() conn.commit() self._connectionPool.releaseConnection(conn) container.commit()
def isFirstId_tableEmptyResultSet_returnsFirstAddedItem(self): DataGenerator.createGarbage(self._connectionPool) container = self.SQLContainer(TableQuery('garbage', self._connectionPool, AllTests.sqlGen)) id = container.addItem() Assert.assertTrue(container.isFirstId(id))
def refresh_table_sizeShouldUpdate(self): container = self.SQLContainer(TableQuery('people', self._connectionPool, AllTests.sqlGen)) Assert.assertEquals(4, len(container)) DataGenerator.addFiveThousandPeople(self._connectionPool) container.refresh() Assert.assertEquals(5000, len(container))
def setUp(self): self._connectionPool = SimpleJDBCConnectionPool( AllTests.dbDriver, AllTests.dbURL, AllTests.dbUser, AllTests.dbPwd, 2, 2 ) DataGenerator.addPeopleToDatabase(self._connectionPool)