public void testSimpleQuerySplit() throws Exception { Connection con = getTestDbConnection(); DataContext dc = new JdbcDataContext(con); Schema schema = dc.getSchemaByName("PUBLIC"); Table employeesTable = schema.getTableByName("EMPLOYEES"); Table customersTable = schema.getTableByName("CUSTOMERS"); Query q = new Query().from(employeesTable, "e").from(customersTable, "c"); q.select(employeesTable.getColumns()[0], customersTable.getColumns()[0]); assertEquals( "SELECT e._EMPLOYEENUMBER_, c._CUSTOMERNUMBER_ FROM PUBLIC._EMPLOYEES_ e, PUBLIC._CUSTOMERS_ c", q.toString().replace('\"', '_')); QuerySplitter qs = new QuerySplitter(dc, q); long rowCount = qs.getRowCount(); assertEquals(2806, rowCount); qs.setMaxRows(1000); List<Query> splitQueries = qs.splitQuery(); assertEquals("[793, 610, 366, 714, 323]", Arrays.toString(getCounts(dc, splitQueries))); assertEquals( "[SELECT e._EMPLOYEENUMBER_, c._CUSTOMERNUMBER_ FROM PUBLIC._EMPLOYEES_ e, PUBLIC._CUSTOMERS_ c WHERE (c._CUSTOMERNUMBER_ < 299 OR c._CUSTOMERNUMBER_ IS NULL) AND (e._EMPLOYEENUMBER_ < 1352 OR e._EMPLOYEENUMBER_ IS NULL), SELECT e._EMPLOYEENUMBER_, c._CUSTOMERNUMBER_ FROM PUBLIC._EMPLOYEES_ e, PUBLIC._CUSTOMERS_ c WHERE (c._CUSTOMERNUMBER_ < 299 OR c._CUSTOMERNUMBER_ IS NULL) AND (e._EMPLOYEENUMBER_ > 1352 OR e._EMPLOYEENUMBER_ = 1352), SELECT e._EMPLOYEENUMBER_, c._CUSTOMERNUMBER_ FROM PUBLIC._EMPLOYEES_ e, PUBLIC._CUSTOMERS_ c WHERE (c._CUSTOMERNUMBER_ > 299 OR c._CUSTOMERNUMBER_ = 299) AND (e._REPORTSTO_ < 1072 OR e._REPORTSTO_ IS NULL), SELECT e._EMPLOYEENUMBER_, c._CUSTOMERNUMBER_ FROM PUBLIC._EMPLOYEES_ e, PUBLIC._CUSTOMERS_ c WHERE (c._CUSTOMERNUMBER_ > 299 OR c._CUSTOMERNUMBER_ = 299) AND (e._REPORTSTO_ > 1072 OR e._REPORTSTO_ = 1072) AND (c._SALESREPEMPLOYEENUMBER_ < 1433 OR c._SALESREPEMPLOYEENUMBER_ IS NULL), SELECT e._EMPLOYEENUMBER_, c._CUSTOMERNUMBER_ FROM PUBLIC._EMPLOYEES_ e, PUBLIC._CUSTOMERS_ c WHERE (c._CUSTOMERNUMBER_ > 299 OR c._CUSTOMERNUMBER_ = 299) AND (e._REPORTSTO_ > 1072 OR e._REPORTSTO_ = 1072) AND (c._SALESREPEMPLOYEENUMBER_ > 1433 OR c._SALESREPEMPLOYEENUMBER_ = 1433)]", Arrays.toString(splitQueries.toArray()).replace('\"', '_')); assertSameCount(dc, qs, splitQueries); assertEquals(5, splitQueries.size()); splitQueries = qs.setMaxRows(300).splitQuery(); assertSameCount(dc, qs, splitQueries); assertEquals( "[299, 221, 170, 299, 276, 253, 102, 289, 253, 138, 368, 138]", Arrays.toString(getCounts(dc, splitQueries))); splitQueries = qs.setMaxRows(5000).splitQuery(); assertEquals(1, splitQueries.size()); assertSame(q, splitQueries.get(0)); }