http://git-wip-us.apache.org/repos/asf/cayenne/blob/26d8434d/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextSQLTemplateIT.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextSQLTemplateIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextSQLTemplateIT.java index dd7f582..d55111c 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextSQLTemplateIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextSQLTemplateIT.java @@ -53,534 +53,497 @@ import static org.junit.Assert.assertTrue; @UseServerRuntime(CayenneProjects.TESTMAP_PROJECT) public class DataContextSQLTemplateIT extends ServerCase { - @Inject - private ServerRuntime runtime; - - @Inject - protected DataContext context; - - @Inject - protected DBHelper dbHelper; - - @Inject - protected SQLTemplateCustomizer sqlTemplateCustomizer; - - protected TableHelper tPainting; - protected TableHelper tArtist; - - @Before - public void setUp() throws Exception { - tArtist = new TableHelper(dbHelper, "ARTIST"); - tArtist.setColumns("ARTIST_ID", "ARTIST_NAME"); - - tPainting = new TableHelper(dbHelper, "PAINTING"); - tPainting.setColumns( - "PAINTING_ID", - "PAINTING_TITLE", - "ARTIST_ID", - "ESTIMATED_PRICE").setColumnTypes( - Types.INTEGER, - Types.VARCHAR, - Types.BIGINT, - Types.DECIMAL); - } - - protected void createFourArtists() throws Exception { - tArtist.insert(11, "artist2"); - tArtist.insert(101, "artist3"); - tArtist.insert(201, "artist4"); - tArtist.insert(3001, "artist5"); - } - - protected void createFourArtistsAndThreePaintingsDataSet() throws Exception { - createFourArtists(); - - tPainting.insert(6, "p_artist3", 11, 1000); - tPainting.insert(7, "p_artist2", 101, 2000); - tPainting.insert(8, "p_artist4", null, 3000); - } - - @Test - public void testSQLResultSetMappingMixed() throws Exception { - createFourArtistsAndThreePaintingsDataSet(); - - String sql = "SELECT #result('t0.ARTIST_ID' 'long' 'X'), #result('t0.ARTIST_NAME' 'String' 'Y'), #result('t0.DATE_OF_BIRTH' 'Date' 'Z'), #result('count(t1.PAINTING_ID)' 'int' 'C') " - + "FROM ARTIST t0 LEFT JOIN PAINTING t1 ON (t0.ARTIST_ID = t1.ARTIST_ID) " - + "GROUP BY t0.ARTIST_ID, t0.ARTIST_NAME, t0.DATE_OF_BIRTH " - + "ORDER BY t0.ARTIST_ID"; - - DataMap map = context.getEntityResolver().getDataMap("testmap"); - SQLTemplate query = new SQLTemplate(map, sql, false); - query.setColumnNamesCapitalization(CapsStrategy.UPPER); - - EntityResult artistResult = new EntityResult(Artist.class); - artistResult.addDbField(Artist.ARTIST_ID_PK_COLUMN, "X"); - artistResult.addObjectField(Artist.ARTIST_NAME_PROPERTY, "Y"); - artistResult.addObjectField(Artist.DATE_OF_BIRTH_PROPERTY, "Z"); - - SQLResult rsMap = new SQLResult(); - rsMap.addEntityResult(artistResult); - rsMap.addColumnResult("C"); - query.setResult(rsMap); - - List<?> objects = context.performQuery(query); - assertEquals(4, objects.size()); - - Object o1 = objects.get(0); - assertTrue("Expected Object[]: " + o1, o1 instanceof Object[]); - Object[] array1 = (Object[]) o1; - assertEquals(2, array1.length); - Object[] array2 = (Object[]) objects.get(1); - assertEquals(2, array2.length); - Object[] array3 = (Object[]) objects.get(2); - assertEquals(2, array3.length); - Object[] array4 = (Object[]) objects.get(3); - assertEquals(2, array3.length); - - assertEquals(new Integer(1), array1[1]); - assertEquals(new Integer(1), array2[1]); - assertEquals(new Integer(0), array3[1]); - assertEquals(new Integer(0), array4[1]); - assertTrue("Unexpected DataObject: " + array1[0], array1[0] instanceof Artist); - } - - @Test - public void testRootless_DataNodeName() throws Exception { - createFourArtists(); - - SQLTemplate query = new SQLTemplate("SELECT * FROM ARTIST", true); - query.setDataNodeName("testmap"); - assertEquals(4, context.performQuery(query).size()); - } - - @Test - public void testRootless_DefaultDataNode() throws Exception { - createFourArtists(); - SQLTemplate query = new SQLTemplate("SELECT * FROM ARTIST", true); - assertEquals(4, context.performQuery(query).size()); - } - - @Test - public void testSQLResultSetMappingScalar() throws Exception { - createFourArtists(); - - String sql = "SELECT count(1) AS X FROM ARTIST"; - - DataMap map = context.getEntityResolver().getDataMap("testmap"); - SQLTemplate query = new SQLTemplate(map, sql, false); - query.setTemplate( - FrontBaseAdapter.class.getName(), - "SELECT COUNT(ARTIST_ID) X FROM ARTIST"); - query.setTemplate( - OpenBaseAdapter.class.getName(), - "SELECT COUNT(ARTIST_ID) X FROM ARTIST"); - query.setColumnNamesCapitalization(CapsStrategy.UPPER); - - SQLResult rsMap = new SQLResult(); - rsMap.addColumnResult("X"); - query.setResult(rsMap); - - List<?> objects = context.performQuery(query); - assertEquals(1, objects.size()); - - Object o = objects.get(0); - assertTrue("Expected Number: " + o, o instanceof Number); - assertEquals(4, ((Number) o).intValue()); - } - - @Test - public void testSQLResultSetMappingScalarArray() throws Exception { - createFourArtists(); - - String sql = "SELECT count(1) AS X, 77 AS Y FROM ARTIST"; - - DataMap map = context.getEntityResolver().getDataMap("testmap"); - SQLTemplate query = new SQLTemplate(map, sql, false); - query.setTemplate( - FrontBaseAdapter.class.getName(), - "SELECT COUNT(ARTIST_ID) X, 77 Y FROM ARTIST GROUP BY Y"); - query.setTemplate( - OpenBaseAdapter.class.getName(), - "SELECT COUNT(ARTIST_ID) X, 77 Y FROM ARTIST GROUP BY 77"); - query.setColumnNamesCapitalization(CapsStrategy.UPPER); - - SQLResult rsMap = new SQLResult(); - rsMap.addColumnResult("X"); - rsMap.addColumnResult("Y"); - query.setResult(rsMap); - - List<?> objects = context.performQuery(query); - assertEquals(1, objects.size()); - - Object o = objects.get(0); - assertTrue(o instanceof Object[]); - - Object[] row = (Object[]) o; - assertEquals(2, row.length); - - assertEquals(4, ((Number) row[0]).intValue()); - assertEquals(77, ((Number) row[1]).intValue()); - } - - @Test - public void testColumnNamesCapitalization() throws Exception { - createFourArtistsAndThreePaintingsDataSet(); - - String template = "SELECT * FROM ARTIST ORDER BY ARTIST_ID"; - SQLTemplate query = new SQLTemplate(Artist.class, template); - query.setColumnNamesCapitalization(CapsStrategy.LOWER); - query.setFetchingDataRows(true); - - List<DataRow> rows = context.performQuery(query); - - DataRow row1 = rows.get(0); - assertFalse(row1.containsKey("ARTIST_ID")); - assertTrue(row1.containsKey("artist_id")); - - DataRow row2 = rows.get(1); - assertFalse(row2.containsKey("ARTIST_ID")); - assertTrue(row2.containsKey("artist_id")); + @Inject + private ServerRuntime runtime; + + @Inject + protected DataContext context; + + @Inject + protected DBHelper dbHelper; + + @Inject + protected SQLTemplateCustomizer sqlTemplateCustomizer; + + protected TableHelper tPainting; + protected TableHelper tArtist; + + @Before + public void setUp() throws Exception { + tArtist = new TableHelper(dbHelper, "ARTIST"); + tArtist.setColumns("ARTIST_ID", "ARTIST_NAME"); + + tPainting = new TableHelper(dbHelper, "PAINTING"); + tPainting.setColumns("PAINTING_ID", "PAINTING_TITLE", "ARTIST_ID", "ESTIMATED_PRICE").setColumnTypes( + Types.INTEGER, Types.VARCHAR, Types.BIGINT, Types.DECIMAL); + } + + protected void createFourArtists() throws Exception { + tArtist.insert(11, "artist2"); + tArtist.insert(101, "artist3"); + tArtist.insert(201, "artist4"); + tArtist.insert(3001, "artist5"); + } + + protected void createFourArtistsAndThreePaintingsDataSet() throws Exception { + createFourArtists(); + + tPainting.insert(6, "p_artist3", 11, 1000); + tPainting.insert(7, "p_artist2", 101, 2000); + tPainting.insert(8, "p_artist4", null, 3000); + } + + @Test + public void testSQLResultSetMappingMixed() throws Exception { + createFourArtistsAndThreePaintingsDataSet(); + + String sql = "SELECT #result('t0.ARTIST_ID' 'long' 'X'), #result('t0.ARTIST_NAME' 'String' 'Y'), #result('t0.DATE_OF_BIRTH' 'Date' 'Z'), #result('count(t1.PAINTING_ID)' 'int' 'C') " + + "FROM ARTIST t0 LEFT JOIN PAINTING t1 ON (t0.ARTIST_ID = t1.ARTIST_ID) " + + "GROUP BY t0.ARTIST_ID, t0.ARTIST_NAME, t0.DATE_OF_BIRTH " + "ORDER BY t0.ARTIST_ID"; + + DataMap map = context.getEntityResolver().getDataMap("testmap"); + SQLTemplate query = new SQLTemplate(map, sql, false); + query.setColumnNamesCapitalization(CapsStrategy.UPPER); + + EntityResult artistResult = new EntityResult(Artist.class); + artistResult.addDbField(Artist.ARTIST_ID_PK_COLUMN, "X"); + artistResult.addObjectField(Artist.ARTIST_NAME_PROPERTY, "Y"); + artistResult.addObjectField(Artist.DATE_OF_BIRTH_PROPERTY, "Z"); + + SQLResult rsMap = new SQLResult(); + rsMap.addEntityResult(artistResult); + rsMap.addColumnResult("C"); + query.setResult(rsMap); + + List<?> objects = context.performQuery(query); + assertEquals(4, objects.size()); + + Object o1 = objects.get(0); + assertTrue("Expected Object[]: " + o1, o1 instanceof Object[]); + Object[] array1 = (Object[]) o1; + assertEquals(2, array1.length); + Object[] array2 = (Object[]) objects.get(1); + assertEquals(2, array2.length); + Object[] array3 = (Object[]) objects.get(2); + assertEquals(2, array3.length); + Object[] array4 = (Object[]) objects.get(3); + assertEquals(2, array3.length); + + assertEquals(new Integer(1), array1[1]); + assertEquals(new Integer(1), array2[1]); + assertEquals(new Integer(0), array3[1]); + assertEquals(new Integer(0), array4[1]); + assertTrue("Unexpected DataObject: " + array1[0], array1[0] instanceof Artist); + } + + @Test + public void testRootless_DataNodeName() throws Exception { + createFourArtists(); + + SQLTemplate query = new SQLTemplate("SELECT * FROM ARTIST", true); + query.setDataNodeName("testmap"); + assertEquals(4, context.performQuery(query).size()); + } + + @Test + public void testRootless_DefaultDataNode() throws Exception { + createFourArtists(); + SQLTemplate query = new SQLTemplate("SELECT * FROM ARTIST", true); + assertEquals(4, context.performQuery(query).size()); + } - query.setColumnNamesCapitalization(CapsStrategy.UPPER); + @Test + public void testSQLResultSetMappingScalar() throws Exception { + createFourArtists(); + + String sql = "SELECT count(1) AS X FROM ARTIST"; + + DataMap map = context.getEntityResolver().getDataMap("testmap"); + SQLTemplate query = new SQLTemplate(map, sql, false); + query.setTemplate(FrontBaseAdapter.class.getName(), "SELECT COUNT(ARTIST_ID) X FROM ARTIST"); + query.setTemplate(OpenBaseAdapter.class.getName(), "SELECT COUNT(ARTIST_ID) X FROM ARTIST"); + query.setColumnNamesCapitalization(CapsStrategy.UPPER); + + SQLResult rsMap = new SQLResult(); + rsMap.addColumnResult("X"); + query.setResult(rsMap); + + List<?> objects = context.performQuery(query); + assertEquals(1, objects.size()); + + Object o = objects.get(0); + assertTrue("Expected Number: " + o, o instanceof Number); + assertEquals(4, ((Number) o).intValue()); + } + + @Test + public void testSQLResultSetMappingScalarArray() throws Exception { + createFourArtists(); + + String sql = "SELECT count(1) AS X, 77 AS Y FROM ARTIST"; - List<DataRow> rowsUpper = context.performQuery(query); - - DataRow row3 = rowsUpper.get(0); - assertFalse(row3.containsKey("artist_id")); - assertTrue(row3.containsKey("ARTIST_ID")); + DataMap map = context.getEntityResolver().getDataMap("testmap"); + SQLTemplate query = new SQLTemplate(map, sql, false); + query.setTemplate(FrontBaseAdapter.class.getName(), "SELECT COUNT(ARTIST_ID) X, 77 Y FROM ARTIST GROUP BY Y"); + query.setTemplate(OpenBaseAdapter.class.getName(), "SELECT COUNT(ARTIST_ID) X, 77 Y FROM ARTIST GROUP BY 77"); + query.setColumnNamesCapitalization(CapsStrategy.UPPER); - DataRow row4 = rowsUpper.get(1); - assertFalse(row4.containsKey("artist_id")); - assertTrue(row4.containsKey("ARTIST_ID")); - } + SQLResult rsMap = new SQLResult(); + rsMap.addColumnResult("X"); + rsMap.addColumnResult("Y"); + query.setResult(rsMap); - @Test - public void testFetchDataRows() throws Exception { - createFourArtists(); + List<?> objects = context.performQuery(query); + assertEquals(1, objects.size()); - String template = "SELECT * FROM ARTIST ORDER BY ARTIST_ID"; - SQLTemplate query = new SQLTemplate(Artist.class, template); + Object o = objects.get(0); + assertTrue(o instanceof Object[]); - sqlTemplateCustomizer.updateSQLTemplate(query); + Object[] row = (Object[]) o; + assertEquals(2, row.length); - query.setFetchingDataRows(true); + assertEquals(4, ((Number) row[0]).intValue()); + assertEquals(77, ((Number) row[1]).intValue()); + } - List<DataRow> rows = context.performQuery(query); - assertEquals(4, rows.size()); + @Test + public void testColumnNamesCapitalization() throws Exception { + createFourArtistsAndThreePaintingsDataSet(); - DataRow row2 = rows.get(1); - assertEquals(3, row2.size()); - Object id = row2.get("ARTIST_ID"); - assertEquals(new Integer(101), new Integer(id.toString())); - } + String template = "SELECT * FROM ARTIST ORDER BY ARTIST_ID"; + SQLTemplate query = new SQLTemplate(Artist.class, template); + query.setColumnNamesCapitalization(CapsStrategy.LOWER); + query.setFetchingDataRows(true); - @Test - public void testFetchObjects() throws Exception { - createFourArtists(); + List<DataRow> rows = context.performQuery(query); - String template = "SELECT * FROM ARTIST ORDER BY ARTIST_ID"; - SQLTemplate query = sqlTemplateCustomizer.createSQLTemplate( - Artist.class, - template); + DataRow row1 = rows.get(0); + assertFalse(row1.containsKey("ARTIST_ID")); + assertTrue(row1.containsKey("artist_id")); - query.setFetchingDataRows(false); + DataRow row2 = rows.get(1); + assertFalse(row2.containsKey("ARTIST_ID")); + assertTrue(row2.containsKey("artist_id")); - List<?> objects = context.performQuery(query); - assertEquals(4, objects.size()); - assertTrue(objects.get(1) instanceof Artist); + query.setColumnNamesCapitalization(CapsStrategy.UPPER); - Artist artist2 = (Artist) objects.get(1); - assertEquals("artist3", artist2.getArtistName()); - } + List<DataRow> rowsUpper = context.performQuery(query); - @Test - public void testBindObjectEqualShort() throws Exception { - createFourArtistsAndThreePaintingsDataSet(); + DataRow row3 = rowsUpper.get(0); + assertFalse(row3.containsKey("artist_id")); + assertTrue(row3.containsKey("ARTIST_ID")); - Artist a = Cayenne.objectForPK(context, Artist.class, 101); + DataRow row4 = rowsUpper.get(1); + assertFalse(row4.containsKey("artist_id")); + assertTrue(row4.containsKey("ARTIST_ID")); + } - String template = "SELECT * FROM PAINTING " - + "WHERE #bindObjectEqual($a) ORDER BY PAINTING_ID"; - SQLTemplate query = new SQLTemplate(Painting.class, template); - query.setColumnNamesCapitalization(CapsStrategy.UPPER); - query.setParameters(Collections.singletonMap("a", a)); + @Test + public void testFetchDataRows() throws Exception { + createFourArtists(); - List<?> objects = context.performQuery(query); - assertEquals(1, objects.size()); + String template = "SELECT * FROM ARTIST ORDER BY ARTIST_ID"; + SQLTemplate query = new SQLTemplate(Artist.class, template); - Painting p = (Painting) objects.get(0); - assertEquals(7, Cayenne.intPKForObject(p)); - } + sqlTemplateCustomizer.updateSQLTemplate(query); - @Test - public void testBindObjectNotEqualShort() throws Exception { - createFourArtistsAndThreePaintingsDataSet(); + query.setFetchingDataRows(true); - Artist a = Cayenne.objectForPK(context, Artist.class, 101); + List<DataRow> rows = context.performQuery(query); + assertEquals(4, rows.size()); - String template = "SELECT * FROM PAINTING " - + "WHERE #bindObjectNotEqual($a) ORDER BY PAINTING_ID"; - SQLTemplate query = new SQLTemplate(Painting.class, template); - query.setColumnNamesCapitalization(CapsStrategy.UPPER); - query.setParameters(Collections.singletonMap("a", a)); + DataRow row2 = rows.get(1); + assertEquals(3, row2.size()); + Object id = row2.get("ARTIST_ID"); + assertEquals(new Integer(101), new Integer(id.toString())); + } - List<?> objects = context.performQuery(query); + @Test + public void testFetchObjects() throws Exception { + createFourArtists(); - // null comparison is unpredictable across DB's ... some would return true on null - // <> value, some - false - assertTrue(objects.size() == 1 || objects.size() == 2); + String template = "SELECT * FROM ARTIST ORDER BY ARTIST_ID"; + SQLTemplate query = sqlTemplateCustomizer.createSQLTemplate(Artist.class, template); - Painting p = (Painting) objects.get(0); - assertEquals(6, Cayenne.intPKForObject(p)); - } + query.setFetchingDataRows(false); - @Test - public void testBindObjectEqualFull() throws Exception { - createFourArtistsAndThreePaintingsDataSet(); + List<?> objects = context.performQuery(query); + assertEquals(4, objects.size()); + assertTrue(objects.get(1) instanceof Artist); - Artist a = Cayenne.objectForPK(context, Artist.class, 101); + Artist artist2 = (Artist) objects.get(1); + assertEquals("artist3", artist2.getArtistName()); + } - String template = "SELECT * FROM PAINTING t0" - + " WHERE #bindObjectEqual($a [ 't0.ARTIST_ID' ] [ 'ARTIST_ID' ] ) ORDER BY PAINTING_ID"; - SQLTemplate query = new SQLTemplate(Painting.class, template); - query.setColumnNamesCapitalization(CapsStrategy.UPPER); - query.setParameters(Collections.singletonMap("a", a)); + @Test + public void testBindObjectEqualShort() throws Exception { + createFourArtistsAndThreePaintingsDataSet(); - List<?> objects = context.performQuery(query); - assertEquals(1, objects.size()); + Artist a = Cayenne.objectForPK(context, Artist.class, 101); - Painting p = (Painting) objects.get(0); - assertEquals(7, Cayenne.intPKForObject(p)); - } + String template = "SELECT * FROM PAINTING " + "WHERE #bindObjectEqual($a) ORDER BY PAINTING_ID"; + SQLTemplate query = new SQLTemplate(Painting.class, template); + query.setColumnNamesCapitalization(CapsStrategy.UPPER); + query.setParameters(Collections.singletonMap("a", a)); - @Test - public void testBindObjectEqualFullNonArray() throws Exception { - createFourArtistsAndThreePaintingsDataSet(); + List<?> objects = context.performQuery(query); + assertEquals(1, objects.size()); - Artist a = Cayenne.objectForPK(context, Artist.class, 101); + Painting p = (Painting) objects.get(0); + assertEquals(7, Cayenne.intPKForObject(p)); + } - String template = "SELECT * FROM PAINTING t0" - + " WHERE #bindObjectEqual($a 't0.ARTIST_ID' 'ARTIST_ID' ) ORDER BY PAINTING_ID"; - SQLTemplate query = new SQLTemplate(Painting.class, template); - query.setColumnNamesCapitalization(CapsStrategy.UPPER); - query.setParameters(Collections.singletonMap("a", a)); + @Test + public void testBindObjectNotEqualShort() throws Exception { + createFourArtistsAndThreePaintingsDataSet(); - List<?> objects = context.performQuery(query); - assertEquals(1, objects.size()); + Artist a = Cayenne.objectForPK(context, Artist.class, 101); - Painting p = (Painting) objects.get(0); - assertEquals(7, Cayenne.intPKForObject(p)); - } + String template = "SELECT * FROM PAINTING " + "WHERE #bindObjectNotEqual($a) ORDER BY PAINTING_ID"; + SQLTemplate query = new SQLTemplate(Painting.class, template); + query.setColumnNamesCapitalization(CapsStrategy.UPPER); + query.setParameters(Collections.singletonMap("a", a)); - @Test - public void testBindObjectEqualNull() throws Exception { - createFourArtistsAndThreePaintingsDataSet(); + List<?> objects = context.performQuery(query); - String template = "SELECT * FROM PAINTING t0" - + " WHERE #bindObjectEqual($a [ 't0.ARTIST_ID' ] [ 'ARTIST_ID' ] ) ORDER BY PAINTING_ID"; - SQLTemplate query = new SQLTemplate(Painting.class, template); - query.setColumnNamesCapitalization(CapsStrategy.UPPER); - query.setParameters(Collections.singletonMap("a", null)); + // null comparison is unpredictable across DB's ... some would return + // true on null + // <> value, some - false + assertTrue(objects.size() == 1 || objects.size() == 2); - List<?> objects = context.performQuery(query); - assertEquals(1, objects.size()); + Painting p = (Painting) objects.get(0); + assertEquals(6, Cayenne.intPKForObject(p)); + } - Painting p = (Painting) objects.get(0); - assertEquals(8, Cayenne.intPKForObject(p)); - } + @Test + public void testBindObjectEqualFull() throws Exception { + createFourArtistsAndThreePaintingsDataSet(); - @Test - public void testBindObjectNotEqualFull() throws Exception { - createFourArtistsAndThreePaintingsDataSet(); - - Artist a = Cayenne.objectForPK(context, Artist.class, 101); - - String template = "SELECT * FROM PAINTING t0" - + " WHERE #bindObjectNotEqual($a [ 't0.ARTIST_ID' ] [ 'ARTIST_ID' ] ) ORDER BY PAINTING_ID"; - SQLTemplate query = new SQLTemplate(Painting.class, template); - query.setColumnNamesCapitalization(CapsStrategy.UPPER); - query.setParameters(Collections.singletonMap("a", a)); - - List<?> objects = context.performQuery(query); - // null comparison is unpredictable across DB's ... some would return true on null - // <> value, some - false - assertTrue(objects.size() == 1 || objects.size() == 2); - - Painting p = (Painting) objects.get(0); - assertEquals(6, Cayenne.intPKForObject(p)); - } - - @Test - public void testBindObjectNotEqualNull() throws Exception { - createFourArtistsAndThreePaintingsDataSet(); - - String template = "SELECT * FROM PAINTING t0" - + " WHERE #bindObjectNotEqual($a [ 't0.ARTIST_ID' ] [ 'ARTIST_ID' ] ) ORDER BY PAINTING_ID"; - SQLTemplate query = new SQLTemplate(Painting.class, template); - query.setColumnNamesCapitalization(CapsStrategy.UPPER); - query.setParameters(Collections.singletonMap("a", null)); - - List<Painting> objects = context.performQuery(query); - assertEquals(2, objects.size()); + Artist a = Cayenne.objectForPK(context, Artist.class, 101); - Painting p1 = objects.get(0); - assertEquals(6, Cayenne.intPKForObject(p1)); + String template = "SELECT * FROM PAINTING t0" + + " WHERE #bindObjectEqual($a [ 't0.ARTIST_ID' ] [ 'ARTIST_ID' ] ) ORDER BY PAINTING_ID"; + SQLTemplate query = new SQLTemplate(Painting.class, template); + query.setColumnNamesCapitalization(CapsStrategy.UPPER); + query.setParameters(Collections.singletonMap("a", a)); - Painting p2 = objects.get(1); - assertEquals(7, Cayenne.intPKForObject(p2)); - } + List<?> objects = context.performQuery(query); + assertEquals(1, objects.size()); - @Test - public void testBindEqualNull() throws Exception { - createFourArtistsAndThreePaintingsDataSet(); - - String template = "SELECT * FROM PAINTING t0" - + " WHERE t0.ARTIST_ID #bindEqual($id) ORDER BY PAINTING_ID"; - SQLTemplate query = new SQLTemplate(Painting.class, template); - query.setColumnNamesCapitalization(CapsStrategy.UPPER); - query.setParameters(Collections.singletonMap("id", null)); - - List<Painting> objects = context.performQuery(query); - assertEquals(1, objects.size()); - - Painting p = objects.get(0); - assertEquals(8, Cayenne.intPKForObject(p)); - } - - @Test - public void testFetchLimit() throws Exception { - createFourArtists(); - - int fetchLimit = 2; - - // sanity check - assertTrue(fetchLimit < 4); - String template = "SELECT * FROM ARTIST ORDER BY ARTIST_ID"; - SQLTemplate query = sqlTemplateCustomizer.createSQLTemplate( - Artist.class, - template); - query.setFetchLimit(fetchLimit); - - List<?> objects = context.performQuery(query); - assertEquals(fetchLimit, objects.size()); - assertTrue(objects.get(0) instanceof Artist); - } - - @Test - public void testFetchOffset() throws Exception { - createFourArtists(); - - int fetchOffset = 2; - - // sanity check - assertTrue(fetchOffset < 4); - String template = "SELECT * FROM ARTIST ORDER BY ARTIST_ID"; - SQLTemplate query = sqlTemplateCustomizer.createSQLTemplate( - Artist.class, - template); - query.setFetchOffset(fetchOffset); - - List<?> objects = context.performQuery(query); - assertEquals(4 - fetchOffset, objects.size()); - assertTrue(objects.get(0) instanceof Artist); - } - - @Test - public void testFetchOffsetFetchLimit() throws Exception { - createFourArtists(); - - String template = "SELECT * FROM ARTIST ORDER BY ARTIST_ID"; - SQLTemplate query = sqlTemplateCustomizer.createSQLTemplate( - Artist.class, - template); - query.setFetchOffset(1); - query.setFetchLimit(2); - - List<?> objects = context.performQuery(query); - assertEquals(2, objects.size()); - assertTrue(objects.get(0) instanceof Artist); - } - - @Test - public void testPageSize() throws Exception { - createFourArtists(); - - int pageSize = 3; - - // sanity check - assertTrue(pageSize < 4); - - String template = "SELECT * FROM ARTIST ORDER BY ARTIST_ID"; - SQLTemplate query = sqlTemplateCustomizer.createSQLTemplate( - Artist.class, - template); - - query.setPageSize(pageSize); - - List<?> objects = context.performQuery(query); - - assertEquals(4, objects.size()); - assertTrue(objects.get(0) instanceof Artist); - - assertTrue(objects instanceof IncrementalFaultList<?>); - IncrementalFaultList<?> pagedList = (IncrementalFaultList<?>) objects; - assertEquals(4 - pageSize, pagedList.getUnfetchedObjects()); - - // check if we can resolve subsequent pages - Artist artist = (Artist) objects.get(pageSize); - - int expectUnresolved = 4 - pageSize - pageSize; - if (expectUnresolved < 0) { - expectUnresolved = 0; - } - assertEquals(expectUnresolved, pagedList.getUnfetchedObjects()); - assertEquals("artist" + (pageSize + 2), artist.getArtistName()); - } - - @Test - public void testIteratedQuery() throws Exception { - createFourArtists(); - - String template = "SELECT * FROM ARTIST ORDER BY ARTIST_ID"; - SQLTemplate query = sqlTemplateCustomizer.createSQLTemplate( - Artist.class, - template); - - ResultIterator it = context.performIteratedQuery(query); - - try { - long i = 0; - - while (it.hasNextRow()) { - i++; - - DataRow row = (DataRow) it.nextRow(); - assertEquals(3, row.size()); - assertEquals("artist" + (1 + i), row.get("ARTIST_NAME")); - } - - assertEquals(4, i); - } - finally { - it.close(); - } - } - - @Test - public void testQueryWithLineBreakAfterMacro() throws Exception { - createFourArtists(); - - // see CAY-726 for details - String template = "SELECT #result('count(*)' 'int' 'X')" - + System.getProperty("line.separator") - + "FROM ARTIST"; - SQLTemplate query = sqlTemplateCustomizer.createSQLTemplate( - Artist.class, - template); - query.setFetchingDataRows(true); - - List<?> result = context.performQuery(query); - - assertEquals(4, ((DataRow) result.get(0)).get("X")); - } + Painting p = (Painting) objects.get(0); + assertEquals(7, Cayenne.intPKForObject(p)); + } + + @Test + public void testBindObjectEqualFullNonArray() throws Exception { + createFourArtistsAndThreePaintingsDataSet(); + + Artist a = Cayenne.objectForPK(context, Artist.class, 101); + + String template = "SELECT * FROM PAINTING t0" + + " WHERE #bindObjectEqual($a 't0.ARTIST_ID' 'ARTIST_ID' ) ORDER BY PAINTING_ID"; + SQLTemplate query = new SQLTemplate(Painting.class, template); + query.setColumnNamesCapitalization(CapsStrategy.UPPER); + query.setParameters(Collections.singletonMap("a", a)); + + List<?> objects = context.performQuery(query); + assertEquals(1, objects.size()); + + Painting p = (Painting) objects.get(0); + assertEquals(7, Cayenne.intPKForObject(p)); + } + + @Test + public void testBindObjectEqualNull() throws Exception { + createFourArtistsAndThreePaintingsDataSet(); + + String template = "SELECT * FROM PAINTING t0" + + " WHERE #bindObjectEqual($a [ 't0.ARTIST_ID' ] [ 'ARTIST_ID' ] ) ORDER BY PAINTING_ID"; + SQLTemplate query = new SQLTemplate(Painting.class, template); + query.setColumnNamesCapitalization(CapsStrategy.UPPER); + query.setParameters(Collections.singletonMap("a", null)); + + List<?> objects = context.performQuery(query); + assertEquals(1, objects.size()); + + Painting p = (Painting) objects.get(0); + assertEquals(8, Cayenne.intPKForObject(p)); + } + + @Test + public void testBindObjectNotEqualFull() throws Exception { + createFourArtistsAndThreePaintingsDataSet(); + + Artist a = Cayenne.objectForPK(context, Artist.class, 101); + + String template = "SELECT * FROM PAINTING t0" + + " WHERE #bindObjectNotEqual($a [ 't0.ARTIST_ID' ] [ 'ARTIST_ID' ] ) ORDER BY PAINTING_ID"; + SQLTemplate query = new SQLTemplate(Painting.class, template); + query.setColumnNamesCapitalization(CapsStrategy.UPPER); + query.setParameters(Collections.singletonMap("a", a)); + + List<?> objects = context.performQuery(query); + // null comparison is unpredictable across DB's ... some would return + // true on null + // <> value, some - false + assertTrue(objects.size() == 1 || objects.size() == 2); + + Painting p = (Painting) objects.get(0); + assertEquals(6, Cayenne.intPKForObject(p)); + } + + @Test + public void testBindObjectNotEqualNull() throws Exception { + createFourArtistsAndThreePaintingsDataSet(); + + String template = "SELECT * FROM PAINTING t0" + + " WHERE #bindObjectNotEqual($a [ 't0.ARTIST_ID' ] [ 'ARTIST_ID' ] ) ORDER BY PAINTING_ID"; + SQLTemplate query = new SQLTemplate(Painting.class, template); + query.setColumnNamesCapitalization(CapsStrategy.UPPER); + query.setParameters(Collections.singletonMap("a", null)); + + List<Painting> objects = context.performQuery(query); + assertEquals(2, objects.size()); + + Painting p1 = objects.get(0); + assertEquals(6, Cayenne.intPKForObject(p1)); + + Painting p2 = objects.get(1); + assertEquals(7, Cayenne.intPKForObject(p2)); + } + + @Test + public void testBindEqualNull() throws Exception { + createFourArtistsAndThreePaintingsDataSet(); + + String template = "SELECT * FROM PAINTING t0" + " WHERE t0.ARTIST_ID #bindEqual($id) ORDER BY PAINTING_ID"; + SQLTemplate query = new SQLTemplate(Painting.class, template); + query.setColumnNamesCapitalization(CapsStrategy.UPPER); + query.setParameters(Collections.singletonMap("id", null)); + + List<Painting> objects = context.performQuery(query); + assertEquals(1, objects.size()); + + Painting p = objects.get(0); + assertEquals(8, Cayenne.intPKForObject(p)); + } + + @Test + public void testFetchLimit() throws Exception { + createFourArtists(); + + int fetchLimit = 2; + + // sanity check + assertTrue(fetchLimit < 4); + String template = "SELECT * FROM ARTIST ORDER BY ARTIST_ID"; + SQLTemplate query = sqlTemplateCustomizer.createSQLTemplate(Artist.class, template); + query.setFetchLimit(fetchLimit); + + List<?> objects = context.performQuery(query); + assertEquals(fetchLimit, objects.size()); + assertTrue(objects.get(0) instanceof Artist); + } + + @Test + public void testFetchOffset() throws Exception { + createFourArtists(); + + int fetchOffset = 2; + + // sanity check + assertTrue(fetchOffset < 4); + String template = "SELECT * FROM ARTIST ORDER BY ARTIST_ID"; + SQLTemplate query = sqlTemplateCustomizer.createSQLTemplate(Artist.class, template); + query.setFetchOffset(fetchOffset); + + List<?> objects = context.performQuery(query); + assertEquals(4 - fetchOffset, objects.size()); + assertTrue(objects.get(0) instanceof Artist); + } + + @Test + public void testFetchOffsetFetchLimit() throws Exception { + createFourArtists(); + + String template = "SELECT * FROM ARTIST ORDER BY ARTIST_ID"; + SQLTemplate query = sqlTemplateCustomizer.createSQLTemplate(Artist.class, template); + query.setFetchOffset(1); + query.setFetchLimit(2); + + List<?> objects = context.performQuery(query); + assertEquals(2, objects.size()); + assertTrue(objects.get(0) instanceof Artist); + } + + @Test + public void testPageSize() throws Exception { + createFourArtists(); + + int pageSize = 3; + + // sanity check + assertTrue(pageSize < 4); + + String template = "SELECT * FROM ARTIST ORDER BY ARTIST_ID"; + SQLTemplate query = sqlTemplateCustomizer.createSQLTemplate(Artist.class, template); + + query.setPageSize(pageSize); + + List<?> objects = context.performQuery(query); + + assertEquals(4, objects.size()); + assertTrue(objects.get(0) instanceof Artist); + + assertTrue(objects instanceof IncrementalFaultList<?>); + IncrementalFaultList<?> pagedList = (IncrementalFaultList<?>) objects; + assertEquals(4 - pageSize, pagedList.getUnfetchedObjects()); + + // check if we can resolve subsequent pages + Artist artist = (Artist) objects.get(pageSize); + + int expectUnresolved = 4 - pageSize - pageSize; + if (expectUnresolved < 0) { + expectUnresolved = 0; + } + assertEquals(expectUnresolved, pagedList.getUnfetchedObjects()); + assertEquals("artist" + (pageSize + 2), artist.getArtistName()); + } + + @Test + public void testIteratedQuery() throws Exception { + createFourArtists(); + + String template = "SELECT * FROM ARTIST ORDER BY ARTIST_ID"; + SQLTemplate query = sqlTemplateCustomizer.createSQLTemplate(Artist.class, template); + + try (ResultIterator<?> it = context.performIteratedQuery(query);) { + long i = 0; + + while (it.hasNextRow()) { + i++; + + DataRow row = (DataRow) it.nextRow(); + assertEquals(3, row.size()); + assertEquals("artist" + (1 + i), row.get("ARTIST_NAME")); + } + + assertEquals(4, i); + } + + } + + @Test + public void testQueryWithLineBreakAfterMacro() throws Exception { + createFourArtists(); + + // see CAY-726 for details + String template = "SELECT #result('count(*)' 'int' 'X')" + System.getProperty("line.separator") + "FROM ARTIST"; + SQLTemplate query = sqlTemplateCustomizer.createSQLTemplate(Artist.class, template); + query.setFetchingDataRows(true); + + List<?> result = context.performQuery(query); + + assertEquals(4, ((DataRow) result.get(0)).get("X")); + } }
http://git-wip-us.apache.org/repos/asf/cayenne/blob/26d8434d/cayenne-server/src/test/java/org/apache/cayenne/access/MockOperationObserver.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/MockOperationObserver.java b/cayenne-server/src/test/java/org/apache/cayenne/access/MockOperationObserver.java index 7970f0f..cc72063 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/access/MockOperationObserver.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/access/MockOperationObserver.java @@ -70,11 +70,11 @@ public class MockOperationObserver implements OperationObserver { throw new CayenneRuntimeException(ex); } - public void nextRows(Query q, ResultIterator it) { + public void nextRows(Query q, ResultIterator<?> it) { } @Override - public void nextGeneratedRows(Query query, ResultIterator keys, ObjectId idToUpdate) { + public void nextGeneratedRows(Query query, ResultIterator<?> keys, ObjectId idToUpdate) { } public boolean isIteratedResult() { http://git-wip-us.apache.org/repos/asf/cayenne/blob/26d8434d/cayenne-server/src/test/java/org/apache/cayenne/access/dbsync/SchemaUpdateStrategyBase.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/dbsync/SchemaUpdateStrategyBase.java b/cayenne-server/src/test/java/org/apache/cayenne/access/dbsync/SchemaUpdateStrategyBase.java index 59b5b73..ca73183 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/access/dbsync/SchemaUpdateStrategyBase.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/access/dbsync/SchemaUpdateStrategyBase.java @@ -18,15 +18,6 @@ ****************************************************************/ package org.apache.cayenne.access.dbsync; -import org.apache.cayenne.CayenneRuntimeException; -import org.apache.cayenne.ObjectContext; -import org.apache.cayenne.access.DataNode; -import org.apache.cayenne.dba.DbAdapter; -import org.apache.cayenne.di.Inject; -import org.apache.cayenne.map.DataMap; -import org.apache.cayenne.query.SQLTemplate; -import org.apache.cayenne.unit.di.server.ServerCase; - import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; @@ -36,6 +27,15 @@ import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; +import org.apache.cayenne.CayenneRuntimeException; +import org.apache.cayenne.ObjectContext; +import org.apache.cayenne.access.DataNode; +import org.apache.cayenne.dba.DbAdapter; +import org.apache.cayenne.di.Inject; +import org.apache.cayenne.map.DataMap; +import org.apache.cayenne.query.SQLTemplate; +import org.apache.cayenne.unit.di.server.ServerCase; + public class SchemaUpdateStrategyBase extends ServerCase { @Inject @@ -96,30 +96,21 @@ public class SchemaUpdateStrategyBase extends ServerCase { } String tableLabel = node.getAdapter().tableTypeForTable(); - Connection con = null; - try { - con = node.getDataSource().getConnection(); - ResultSet rs = con.getMetaData().getTables(null, null, "%", new String[] { tableLabel }); - while (rs.next()) { - String dbName = rs.getString("TABLE_NAME"); + try (Connection con = node.getDataSource().getConnection();) { + + try (ResultSet rs = con.getMetaData().getTables(null, null, "%", new String[] { tableLabel });) { + while (rs.next()) { + String dbName = rs.getString("TABLE_NAME"); - String name = tables.get(dbName); + String name = tables.get(dbName); - if (name != null) { - presentInDB.put(name, true); + if (name != null) { + presentInDB.put(name, true); + } } } - rs.close(); } catch (SQLException e) { throw new CayenneRuntimeException(e); - } finally { - try { - if (con != null) { - con.close(); - } - } catch (SQLException e) { - throw new CayenneRuntimeException(e); - } } return presentInDB; http://git-wip-us.apache.org/repos/asf/cayenne/blob/26d8434d/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/JDBCResultIteratorTest.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/JDBCResultIteratorTest.java b/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/JDBCResultIteratorTest.java index 4547957..85dc21f 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/JDBCResultIteratorTest.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/JDBCResultIteratorTest.java @@ -43,45 +43,44 @@ import static org.mockito.Mockito.mock; public class JDBCResultIteratorTest { - @Test - public void testNextDataRow() throws Exception { - Connection c = new MockConnection(); - Statement s = new MockStatement(c); - MockResultSet rs = new MockResultSet("rs"); - rs.addColumn("a", new Object[] { "1", "2", "3" }); + @Test + public void testNextDataRow() throws Exception { + Connection c = new MockConnection(); + Statement s = new MockStatement(c); + MockResultSet rs = new MockResultSet("rs"); + rs.addColumn("a", new Object[] { "1", "2", "3" }); - RowDescriptor descriptor = new RowDescriptorBuilder().setResultSet(rs).getDescriptor(new ExtendedTypeMap()); - RowReader<?> rowReader = new DefaultRowReaderFactory().rowReader(descriptor, new MockQueryMetadata(), - mock(DbAdapter.class), Collections.<ObjAttribute, ColumnDescriptor> emptyMap()); + RowDescriptor descriptor = new RowDescriptorBuilder().setResultSet(rs).getDescriptor(new ExtendedTypeMap()); + RowReader<?> rowReader = new DefaultRowReaderFactory().rowReader(descriptor, new MockQueryMetadata(), + mock(DbAdapter.class), Collections.<ObjAttribute, ColumnDescriptor> emptyMap()); - JDBCResultIterator it = new JDBCResultIterator(s, rs, rowReader); + JDBCResultIterator it = new JDBCResultIterator(s, rs, rowReader); - DataRow row = (DataRow) it.nextRow(); + DataRow row = (DataRow) it.nextRow(); - assertNotNull(row); - assertEquals(1, row.size()); - assertEquals("1", row.get("a")); - } + assertNotNull(row); + assertEquals(1, row.size()); + assertEquals("1", row.get("a")); + } - @Test - public void testClose() throws Exception { - Connection c = new MockConnection(); - MockStatement s = new MockStatement(c); - MockResultSet rs = new MockResultSet("rs"); - rs.addColumn("a", new Object[] { "1", "2", "3" }); + @Test + public void testClose() throws Exception { + Connection c = new MockConnection(); + MockStatement s = new MockStatement(c); + MockResultSet rs = new MockResultSet("rs"); + rs.addColumn("a", new Object[] { "1", "2", "3" }); - RowReader<?> rowReader = mock(RowReader.class); + RowReader<?> rowReader = mock(RowReader.class); - JDBCResultIterator it = new JDBCResultIterator(s, rs, rowReader); + try (JDBCResultIterator it = new JDBCResultIterator(s, rs, rowReader);) { - assertFalse(rs.isClosed()); - assertFalse(s.isClosed()); - assertFalse(c.isClosed()); + assertFalse(rs.isClosed()); + assertFalse(s.isClosed()); + assertFalse(c.isClosed()); + } - it.close(); - - assertTrue(rs.isClosed()); - assertTrue(s.isClosed()); - } + assertTrue(rs.isClosed()); + assertTrue(s.isClosed()); + } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/26d8434d/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/SQLTemplateActionIT.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/SQLTemplateActionIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/SQLTemplateActionIT.java index 7b24e4e..2522343 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/SQLTemplateActionIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/SQLTemplateActionIT.java @@ -56,321 +56,289 @@ import static org.junit.Assert.assertTrue; @UseServerRuntime(CayenneProjects.TESTMAP_PROJECT) public class SQLTemplateActionIT extends ServerCase { - @Inject - protected ServerCaseDataSourceFactory dataSourceFactory; + @Inject + protected ServerCaseDataSourceFactory dataSourceFactory; - @Inject - protected DataNode node; + @Inject + protected DataNode node; - @Inject - protected JdbcAdapter adapter; - - @Inject - protected ObjectContext objectContext; - - @Inject - protected DBHelper dbHelper; - - @Inject - protected SQLTemplateCustomizer sqlTemplateCustomizer; - - protected TableHelper tArtist; - - @Before - public void setUp() throws Exception { - tArtist = new TableHelper(dbHelper, "ARTIST"); - tArtist.setColumns("ARTIST_ID", "ARTIST_NAME", "DATE_OF_BIRTH"); - } - - protected void createFourArtists() throws Exception { - - Date date = new Date(System.currentTimeMillis()); - - tArtist.insert(11, "artist2", date); - tArtist.insert(101, "artist3", date); - tArtist.insert(201, "artist4", date); - tArtist.insert(3001, "artist5", date); - } - - @Test - public void testProperties() throws Exception { - SQLTemplate template = new SQLTemplate(Object.class, "AAAAA"); - - SQLTemplateAction action = new SQLTemplateAction(template, node); - assertSame(template, action.getQuery()); - assertSame(node, action.dataNode); - } - - @Test - public void testExecuteSelect() throws Exception { - createFourArtists(); - - String templateString = "SELECT * FROM ARTIST WHERE ARTIST_ID = #bind($id)"; - SQLTemplate template = new SQLTemplate(Object.class, templateString); - sqlTemplateCustomizer.updateSQLTemplate(template); - - Map<String, Object> bindings = new HashMap<String, Object>(); - bindings.put("id", 201l); - template.setParameters(bindings); - - // must ensure the right SQLTemplateAction is created - - SQLAction plan = adapter.getAction(template, node); - assertTrue(plan instanceof SQLTemplateAction); - - MockOperationObserver observer = new MockOperationObserver(); - Connection c = dataSourceFactory.getSharedDataSource().getConnection(); - - try { - plan.performAction(c, observer); - } - finally { - c.close(); - } - - List<DataRow> rows = observer.rowsForQuery(template); - assertNotNull(rows); - assertEquals(1, rows.size()); - DataRow row = rows.get(0); - - // In the absence of ObjEntity most DB's return a Long here, except for Oracle - // that has no BIGINT type and - // returns BigDecimal, so do a Number comparison - Number id = (Number) row.get("ARTIST_ID"); - assertNotNull(id); - assertEquals(((Number) bindings.get("id")).longValue(), id.longValue()); - assertEquals("artist4", row.get("ARTIST_NAME")); - assertTrue(row.containsKey("DATE_OF_BIRTH")); - } - - @Test - public void testSelectUtilDate() throws Exception { - createFourArtists(); - - String templateString = "SELECT #result('DATE_OF_BIRTH' 'java.util.Date' 'DOB') " - + "FROM ARTIST WHERE ARTIST_ID = #bind($id)"; - SQLTemplate template = new SQLTemplate(Object.class, templateString); - sqlTemplateCustomizer.updateSQLTemplate(template); - - Map<String, Object> bindings = new HashMap<String, Object>(); - bindings.put("id", 101); - template.setParameters(bindings); - - SQLAction plan = adapter.getAction(template, node); - - MockOperationObserver observer = new MockOperationObserver(); - Connection c = dataSourceFactory.getSharedDataSource().getConnection(); - - try { - plan.performAction(c, observer); - } - finally { - c.close(); - } - - List<DataRow> rows = observer.rowsForQuery(template); - assertNotNull(rows); - assertEquals(1, rows.size()); - DataRow row = rows.get(0); - - assertNotNull(row.get("DOB")); - assertEquals(java.util.Date.class, row.get("DOB").getClass()); - } - - @Test - public void testSelectSQLDate() throws Exception { - createFourArtists(); - - String templateString = "SELECT #result('DATE_OF_BIRTH' 'java.sql.Date' 'DOB') " - + "FROM ARTIST WHERE ARTIST_ID = #bind($id)"; - SQLTemplate template = new SQLTemplate(Object.class, templateString); - sqlTemplateCustomizer.updateSQLTemplate(template); - - Map<String, Object> bindings = new HashMap<String, Object>(); - bindings.put("id", 101); - template.setParameters(bindings); - - SQLAction plan = adapter.getAction(template, node); - - MockOperationObserver observer = new MockOperationObserver(); - Connection c = dataSourceFactory.getSharedDataSource().getConnection(); - - try { - plan.performAction(c, observer); - } - finally { - c.close(); - } - - List<DataRow> rows = observer.rowsForQuery(template); - assertNotNull(rows); - assertEquals(1, rows.size()); - DataRow row = rows.get(0); - - assertNotNull(row.get("DOB")); - assertEquals(java.sql.Date.class, row.get("DOB").getClass()); - } - - @Test - public void testSelectSQLTimestamp() throws Exception { - createFourArtists(); - - String templateString = "SELECT #result('DATE_OF_BIRTH' 'java.sql.Timestamp' 'DOB') " - + "FROM ARTIST WHERE ARTIST_ID = #bind($id)"; - SQLTemplate template = new SQLTemplate(Object.class, templateString); - sqlTemplateCustomizer.updateSQLTemplate(template); - - Map<String, Object> bindings = new HashMap<String, Object>(); - bindings.put("id", 201); - template.setParameters(bindings); - - SQLAction plan = adapter.getAction(template, node); - - MockOperationObserver observer = new MockOperationObserver(); - Connection c = dataSourceFactory.getSharedDataSource().getConnection(); - - try { - plan.performAction(c, observer); - } - finally { - c.close(); - } - - List<DataRow> rows = observer.rowsForQuery(template); - assertNotNull(rows); - assertEquals(1, rows.size()); - DataRow row = rows.get(0); - - assertNotNull(row.get("DOB")); - // Sybase returns a Timestamp subclass... so can't test equality - assertTrue(java.sql.Timestamp.class.isAssignableFrom(row.get("DOB").getClass())); - } - - @Test - public void testExecuteUpdate() throws Exception { - String templateString = "INSERT INTO ARTIST (ARTIST_ID, ARTIST_NAME, DATE_OF_BIRTH) " - + "VALUES (#bind($id), #bind($name), #bind($dob 'DATE'))"; - SQLTemplate template = new SQLTemplate(Object.class, templateString); - - Map<String, Object> bindings = new HashMap<String, Object>(); - bindings.put("id", new Long(1)); - bindings.put("name", "a1"); - bindings.put("dob", new Date(System.currentTimeMillis())); - template.setParameters(bindings); - - SQLAction action = adapter.getAction(template, node); - - Connection c = dataSourceFactory.getSharedDataSource().getConnection(); - try { - MockOperationObserver observer = new MockOperationObserver(); - action.performAction(c, observer); - - int[] batches = observer.countsForQuery(template); - assertNotNull(batches); - assertEquals(1, batches.length); - assertEquals(1, batches[0]); - } - finally { - c.close(); - } - - assertEquals(1, tArtist.getRowCount()); - assertEquals(1l, tArtist.getLong("ARTIST_ID")); - assertEquals("a1", tArtist.getString("ARTIST_NAME").trim()); - } - - @Test - public void testExecuteUpdateNoParameters() throws Exception { - createFourArtists(); - - SQLTemplate template = new SQLTemplate( - Object.class, - "delete from ARTIST where ARTIST_NAME like 'a%'"); - - SQLAction action = adapter.getAction(template, node); - - Connection c = dataSourceFactory.getSharedDataSource().getConnection(); - try { - MockOperationObserver observer = new MockOperationObserver(); - action.performAction(c, observer); - - int[] batches = observer.countsForQuery(template); - assertNotNull(batches); - assertEquals(1, batches.length); - assertEquals(4, batches[0]); - } - finally { - c.close(); - } - } - - @Test - public void testExecuteUpdateBatch() throws Exception { - String templateString = "INSERT INTO ARTIST (ARTIST_ID, ARTIST_NAME, DATE_OF_BIRTH) " - + "VALUES (#bind($id), #bind($name), #bind($dob 'DATE'))"; - SQLTemplate template = new SQLTemplate(Object.class, templateString); - - Map<String, Object> bindings1 = new HashMap<String, Object>(); - bindings1.put("id", new Long(1)); - bindings1.put("name", "a1"); - bindings1.put("dob", new Date(System.currentTimeMillis())); - - Map<String, Object> bindings2 = new HashMap<String, Object>(); - bindings2.put("id", new Long(33)); - bindings2.put("name", "a$$$$$"); - bindings2.put("dob", new Date(System.currentTimeMillis())); - template.setParameters(new Map[] { - bindings1, bindings2 - }); - - SQLAction genericAction = adapter.getAction(template, node); - assertTrue(genericAction instanceof SQLTemplateAction); - SQLTemplateAction action = (SQLTemplateAction) genericAction; - - assertSame(node, action.dataNode); - assertSame(template, action.getQuery()); - - Connection c = dataSourceFactory.getSharedDataSource().getConnection(); - try { - MockOperationObserver observer = new MockOperationObserver(); - action.performAction(c, observer); - - int[] batches = observer.countsForQuery(template); - assertNotNull(batches); - assertEquals(2, batches.length); - assertEquals(1, batches[0]); - assertEquals(1, batches[1]); - } - finally { - c.close(); - } - - MockOperationObserver observer = new MockOperationObserver(); - SelectQuery query = new SelectQuery(Artist.class); - query.addOrdering("db:ARTIST_ID", SortOrder.ASCENDING); - node.performQueries(Collections.singletonList((Query) query), observer); - - List<DataRow> data = observer.rowsForQuery(query); - assertEquals(2, data.size()); - DataRow row1 = data.get(0); - assertEquals(bindings1.get("id"), row1.get("ARTIST_ID")); - assertEquals(bindings1.get("name"), row1.get("ARTIST_NAME")); - // to compare dates we need to create the binding correctly - // assertEquals(bindings1.get("dob"), row.get("DATE_OF_BIRTH")); - - DataRow row2 = data.get(1); - assertEquals(bindings2.get("id"), row2.get("ARTIST_ID")); - assertEquals(bindings2.get("name"), row2.get("ARTIST_NAME")); - // to compare dates we need to create the binding correctly - // assertEquals(bindings2.get("dob"), row2.get("DATE_OF_BIRTH")); - } - - @Test - public void testExtractTemplateString() throws Exception { - SQLTemplate template = new SQLTemplate(Artist.class, "A\nBC"); - SQLTemplateAction action = new SQLTemplateAction(template, node); - - assertEquals("A BC", action.extractTemplateString()); - } + @Inject + protected JdbcAdapter adapter; + + @Inject + protected ObjectContext objectContext; + + @Inject + protected DBHelper dbHelper; + + @Inject + protected SQLTemplateCustomizer sqlTemplateCustomizer; + + protected TableHelper tArtist; + + @Before + public void setUp() throws Exception { + tArtist = new TableHelper(dbHelper, "ARTIST"); + tArtist.setColumns("ARTIST_ID", "ARTIST_NAME", "DATE_OF_BIRTH"); + } + + protected void createFourArtists() throws Exception { + + Date date = new Date(System.currentTimeMillis()); + + tArtist.insert(11, "artist2", date); + tArtist.insert(101, "artist3", date); + tArtist.insert(201, "artist4", date); + tArtist.insert(3001, "artist5", date); + } + + @Test + public void testProperties() throws Exception { + SQLTemplate template = new SQLTemplate(Object.class, "AAAAA"); + + SQLTemplateAction action = new SQLTemplateAction(template, node); + assertSame(template, action.getQuery()); + assertSame(node, action.dataNode); + } + + @Test + public void testExecuteSelect() throws Exception { + createFourArtists(); + + String templateString = "SELECT * FROM ARTIST WHERE ARTIST_ID = #bind($id)"; + SQLTemplate template = new SQLTemplate(Object.class, templateString); + sqlTemplateCustomizer.updateSQLTemplate(template); + + Map<String, Object> bindings = new HashMap<String, Object>(); + bindings.put("id", 201l); + template.setParameters(bindings); + + // must ensure the right SQLTemplateAction is created + + SQLAction plan = adapter.getAction(template, node); + assertTrue(plan instanceof SQLTemplateAction); + + MockOperationObserver observer = new MockOperationObserver(); + + try (Connection c = dataSourceFactory.getSharedDataSource().getConnection();) { + plan.performAction(c, observer); + } + + List<DataRow> rows = observer.rowsForQuery(template); + assertNotNull(rows); + assertEquals(1, rows.size()); + DataRow row = rows.get(0); + + // In the absence of ObjEntity most DB's return a Long here, except for + // Oracle + // that has no BIGINT type and + // returns BigDecimal, so do a Number comparison + Number id = (Number) row.get("ARTIST_ID"); + assertNotNull(id); + assertEquals(((Number) bindings.get("id")).longValue(), id.longValue()); + assertEquals("artist4", row.get("ARTIST_NAME")); + assertTrue(row.containsKey("DATE_OF_BIRTH")); + } + + @Test + public void testSelectUtilDate() throws Exception { + createFourArtists(); + + String templateString = "SELECT #result('DATE_OF_BIRTH' 'java.util.Date' 'DOB') " + + "FROM ARTIST WHERE ARTIST_ID = #bind($id)"; + SQLTemplate template = new SQLTemplate(Object.class, templateString); + sqlTemplateCustomizer.updateSQLTemplate(template); + + Map<String, Object> bindings = new HashMap<String, Object>(); + bindings.put("id", 101); + template.setParameters(bindings); + + SQLAction plan = adapter.getAction(template, node); + + MockOperationObserver observer = new MockOperationObserver(); + + try (Connection c = dataSourceFactory.getSharedDataSource().getConnection();) { + plan.performAction(c, observer); + } + + List<DataRow> rows = observer.rowsForQuery(template); + assertNotNull(rows); + assertEquals(1, rows.size()); + DataRow row = rows.get(0); + + assertNotNull(row.get("DOB")); + assertEquals(java.util.Date.class, row.get("DOB").getClass()); + } + + @Test + public void testSelectSQLDate() throws Exception { + createFourArtists(); + + String templateString = "SELECT #result('DATE_OF_BIRTH' 'java.sql.Date' 'DOB') " + + "FROM ARTIST WHERE ARTIST_ID = #bind($id)"; + SQLTemplate template = new SQLTemplate(Object.class, templateString); + sqlTemplateCustomizer.updateSQLTemplate(template); + + Map<String, Object> bindings = new HashMap<String, Object>(); + bindings.put("id", 101); + template.setParameters(bindings); + + SQLAction plan = adapter.getAction(template, node); + + MockOperationObserver observer = new MockOperationObserver(); + + try (Connection c = dataSourceFactory.getSharedDataSource().getConnection();) { + plan.performAction(c, observer); + } + + List<DataRow> rows = observer.rowsForQuery(template); + assertNotNull(rows); + assertEquals(1, rows.size()); + DataRow row = rows.get(0); + + assertNotNull(row.get("DOB")); + assertEquals(java.sql.Date.class, row.get("DOB").getClass()); + } + + @Test + public void testSelectSQLTimestamp() throws Exception { + createFourArtists(); + + String templateString = "SELECT #result('DATE_OF_BIRTH' 'java.sql.Timestamp' 'DOB') " + + "FROM ARTIST WHERE ARTIST_ID = #bind($id)"; + SQLTemplate template = new SQLTemplate(Object.class, templateString); + sqlTemplateCustomizer.updateSQLTemplate(template); + + Map<String, Object> bindings = new HashMap<String, Object>(); + bindings.put("id", 201); + template.setParameters(bindings); + + SQLAction plan = adapter.getAction(template, node); + + MockOperationObserver observer = new MockOperationObserver(); + + try (Connection c = dataSourceFactory.getSharedDataSource().getConnection();) { + plan.performAction(c, observer); + } + + List<DataRow> rows = observer.rowsForQuery(template); + assertNotNull(rows); + assertEquals(1, rows.size()); + DataRow row = rows.get(0); + + assertNotNull(row.get("DOB")); + // Sybase returns a Timestamp subclass... so can't test equality + assertTrue(java.sql.Timestamp.class.isAssignableFrom(row.get("DOB").getClass())); + } + + @Test + public void testExecuteUpdate() throws Exception { + String templateString = "INSERT INTO ARTIST (ARTIST_ID, ARTIST_NAME, DATE_OF_BIRTH) " + + "VALUES (#bind($id), #bind($name), #bind($dob 'DATE'))"; + SQLTemplate template = new SQLTemplate(Object.class, templateString); + + Map<String, Object> bindings = new HashMap<String, Object>(); + bindings.put("id", new Long(1)); + bindings.put("name", "a1"); + bindings.put("dob", new Date(System.currentTimeMillis())); + template.setParameters(bindings); + + SQLAction action = adapter.getAction(template, node); + + try (Connection c = dataSourceFactory.getSharedDataSource().getConnection();) { + MockOperationObserver observer = new MockOperationObserver(); + action.performAction(c, observer); + + int[] batches = observer.countsForQuery(template); + assertNotNull(batches); + assertEquals(1, batches.length); + assertEquals(1, batches[0]); + } + assertEquals(1, tArtist.getRowCount()); + assertEquals(1l, tArtist.getLong("ARTIST_ID")); + assertEquals("a1", tArtist.getString("ARTIST_NAME").trim()); + } + + @Test + public void testExecuteUpdateNoParameters() throws Exception { + createFourArtists(); + + SQLTemplate template = new SQLTemplate(Object.class, "delete from ARTIST where ARTIST_NAME like 'a%'"); + + SQLAction action = adapter.getAction(template, node); + + try (Connection c = dataSourceFactory.getSharedDataSource().getConnection();) { + MockOperationObserver observer = new MockOperationObserver(); + action.performAction(c, observer); + + int[] batches = observer.countsForQuery(template); + assertNotNull(batches); + assertEquals(1, batches.length); + assertEquals(4, batches[0]); + } + } + + @Test + public void testExecuteUpdateBatch() throws Exception { + String templateString = "INSERT INTO ARTIST (ARTIST_ID, ARTIST_NAME, DATE_OF_BIRTH) " + + "VALUES (#bind($id), #bind($name), #bind($dob 'DATE'))"; + SQLTemplate template = new SQLTemplate(Object.class, templateString); + + Map<String, Object> bindings1 = new HashMap<String, Object>(); + bindings1.put("id", new Long(1)); + bindings1.put("name", "a1"); + bindings1.put("dob", new Date(System.currentTimeMillis())); + + Map<String, Object> bindings2 = new HashMap<String, Object>(); + bindings2.put("id", new Long(33)); + bindings2.put("name", "a$$$$$"); + bindings2.put("dob", new Date(System.currentTimeMillis())); + template.setParameters(new Map[] { bindings1, bindings2 }); + + SQLAction genericAction = adapter.getAction(template, node); + assertTrue(genericAction instanceof SQLTemplateAction); + SQLTemplateAction action = (SQLTemplateAction) genericAction; + + assertSame(node, action.dataNode); + assertSame(template, action.getQuery()); + + try (Connection c = dataSourceFactory.getSharedDataSource().getConnection();) { + MockOperationObserver observer = new MockOperationObserver(); + action.performAction(c, observer); + + int[] batches = observer.countsForQuery(template); + assertNotNull(batches); + assertEquals(2, batches.length); + assertEquals(1, batches[0]); + assertEquals(1, batches[1]); + } + + MockOperationObserver observer = new MockOperationObserver(); + SelectQuery query = new SelectQuery(Artist.class); + query.addOrdering("db:ARTIST_ID", SortOrder.ASCENDING); + node.performQueries(Collections.singletonList((Query) query), observer); + + List<DataRow> data = observer.rowsForQuery(query); + assertEquals(2, data.size()); + DataRow row1 = data.get(0); + assertEquals(bindings1.get("id"), row1.get("ARTIST_ID")); + assertEquals(bindings1.get("name"), row1.get("ARTIST_NAME")); + // to compare dates we need to create the binding correctly + // assertEquals(bindings1.get("dob"), row.get("DATE_OF_BIRTH")); + + DataRow row2 = data.get(1); + assertEquals(bindings2.get("id"), row2.get("ARTIST_ID")); + assertEquals(bindings2.get("name"), row2.get("ARTIST_NAME")); + // to compare dates we need to create the binding correctly + // assertEquals(bindings2.get("dob"), row2.get("DATE_OF_BIRTH")); + } + + @Test + public void testExtractTemplateString() throws Exception { + SQLTemplate template = new SQLTemplate(Artist.class, "A\nBC"); + SQLTemplateAction action = new SQLTemplateAction(template, node); + + assertEquals("A BC", action.extractTemplateString()); + } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/26d8434d/cayenne-server/src/test/java/org/apache/cayenne/dba/sqlserver/SQLServerSnifferIT.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/dba/sqlserver/SQLServerSnifferIT.java b/cayenne-server/src/test/java/org/apache/cayenne/dba/sqlserver/SQLServerSnifferIT.java index 78b1c31..d5704a9 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/dba/sqlserver/SQLServerSnifferIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/dba/sqlserver/SQLServerSnifferIT.java @@ -19,6 +19,11 @@ package org.apache.cayenne.dba.sqlserver; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import java.sql.Connection; + import org.apache.cayenne.dba.DbAdapter; import org.apache.cayenne.di.AdhocObjectFactory; import org.apache.cayenne.di.Inject; @@ -30,49 +35,33 @@ import org.apache.cayenne.unit.di.server.ServerCaseDataSourceFactory; import org.apache.cayenne.unit.di.server.UseServerRuntime; import org.junit.Test; -import java.sql.Connection; -import java.sql.SQLException; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; - @UseServerRuntime(CayenneProjects.TESTMAP_PROJECT) public class SQLServerSnifferIT extends ServerCase { - @Inject - private ServerCaseDataSourceFactory dataSourceFactory; + @Inject + private ServerCaseDataSourceFactory dataSourceFactory; - @Inject - private UnitDbAdapter accessStackAdapter; - - @Inject - private AdhocObjectFactory objectFactory; + @Inject + private UnitDbAdapter accessStackAdapter; - @Test - public void testCreateAdapter() throws Exception { + @Inject + private AdhocObjectFactory objectFactory; - SQLServerSniffer sniffer = new SQLServerSniffer(objectFactory); + @Test + public void testCreateAdapter() throws Exception { - DbAdapter adapter = null; - Connection c = dataSourceFactory.getSharedDataSource().getConnection(); + SQLServerSniffer sniffer = new SQLServerSniffer(objectFactory); - try { - adapter = sniffer.createAdapter(c.getMetaData()); - } - finally { - try { - c.close(); - } - catch (SQLException e) { + DbAdapter adapter = null; - } - } + try (Connection c = dataSourceFactory.getSharedDataSource().getConnection();) { + adapter = sniffer.createAdapter(c.getMetaData()); + } - if (accessStackAdapter instanceof SQLServerUnitDbAdapter) { - assertNotNull(adapter); - } - else { - assertNull(adapter); - } - } + if (accessStackAdapter instanceof SQLServerUnitDbAdapter) { + assertNotNull(adapter); + } else { + assertNull(adapter); + } + } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/26d8434d/cayenne-server/src/test/java/org/apache/cayenne/merge/MergeCase.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/merge/MergeCase.java b/cayenne-server/src/test/java/org/apache/cayenne/merge/MergeCase.java index 266bb69..2764c3a 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/merge/MergeCase.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/merge/MergeCase.java @@ -103,14 +103,14 @@ public abstract class MergeCase extends ServerCase { return new DbMerger(mergerFactory, valueForNullProvider); } - protected List<MergerToken> createMergeTokens() { - DbLoaderConfiguration loaderConfiguration = new DbLoaderConfiguration(); - loaderConfiguration.setFiltersConfig(FiltersConfig.create(null, null, - TableFilter.include("ARTIST|GALLERY|PAINTING|NEW_TABLE2?"), PatternFilter.INCLUDE_NOTHING)); + protected List<MergerToken> createMergeTokens() { + DbLoaderConfiguration loaderConfiguration = new DbLoaderConfiguration(); + loaderConfiguration.setFiltersConfig(FiltersConfig.create(null, null, + TableFilter.include("ARTIST|GALLERY|PAINTING|NEW_TABLE2?"), PatternFilter.INCLUDE_NOTHING)); - return createMerger(node.getAdapter().mergerFactory()) - .createMergeTokens(node.getDataSource(), node.getAdapter(), map, loaderConfiguration); - } + return createMerger(node.getAdapter().mergerFactory()).createMergeTokens(node.getDataSource(), + node.getAdapter(), map, loaderConfiguration); + } /** * Remote binary pk {@link DbEntity} for {@link DbAdapter} not supporting @@ -158,21 +158,13 @@ public abstract class MergeCase extends ServerCase { } private void executeSql(String sql) throws Exception { - Connection conn = dataSourceFactory.getSharedDataSource().getConnection(); - try { - Statement st = conn.createStatement(); + try (Connection conn = dataSourceFactory.getSharedDataSource().getConnection();) { - try { + try (Statement st = conn.createStatement();) { st.execute(sql); - } finally { - st.close(); } } - - finally { - conn.close(); - } } protected void assertTokens(List<MergerToken> tokens, int expectedToDb, int expectedToModel) { http://git-wip-us.apache.org/repos/asf/cayenne/blob/26d8434d/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_RunIT.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_RunIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_RunIT.java index 40df636..c10056f 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_RunIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_RunIT.java @@ -18,6 +18,14 @@ ****************************************************************/ package org.apache.cayenne.query; +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertThat; + +import java.util.List; + import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.DataRow; import org.apache.cayenne.ResultBatchIterator; @@ -33,14 +41,6 @@ import org.apache.cayenne.unit.di.server.ServerCase; import org.apache.cayenne.unit.di.server.UseServerRuntime; import org.junit.Test; -import java.util.List; - -import static org.hamcrest.CoreMatchers.instanceOf; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertThat; - @UseServerRuntime(CayenneProjects.TESTMAP_PROJECT) public class ObjectSelect_RunIT extends ServerCase { @@ -75,61 +75,53 @@ public class ObjectSelect_RunIT extends ServerCase { assertEquals("artist14", a.getArtistName()); } - @Test - public void test_Iterate() throws Exception { - createArtistsDataSet(); - - final int[] count = new int[1]; - ObjectSelect.query(Artist.class).iterate(context, new ResultIteratorCallback<Artist>() { - - @Override - public void next(Artist object) { - assertNotNull(object.getArtistName()); - count[0]++; - } - }); + @Test + public void test_Iterate() throws Exception { + createArtistsDataSet(); - assertEquals(20, count[0]); - } + final int[] count = new int[1]; + ObjectSelect.query(Artist.class).iterate(context, new ResultIteratorCallback<Artist>() { - @Test - public void test_Iterator() throws Exception { - createArtistsDataSet(); + @Override + public void next(Artist object) { + assertNotNull(object.getArtistName()); + count[0]++; + } + }); - ResultIterator<Artist> it = ObjectSelect.query(Artist.class).iterator(context); + assertEquals(20, count[0]); + } - try { - int count = 0; + @Test + public void test_Iterator() throws Exception { + createArtistsDataSet(); - for (Artist a : it) { - count++; - } + try (ResultIterator<Artist> it = ObjectSelect.query(Artist.class).iterator(context)) { + int count = 0; - assertEquals(20, count); - } finally { - it.close(); - } - } + for (Artist a : it) { + count++; + } - @Test - public void test_BatchIterator() throws Exception { - createArtistsDataSet(); + assertEquals(20, count); + } + } - ResultBatchIterator<Artist> it = ObjectSelect.query(Artist.class).batchIterator(context, 5); + @Test + public void test_BatchIterator() throws Exception { + createArtistsDataSet(); - try { - int count = 0; + try (ResultBatchIterator<Artist> it = ObjectSelect.query(Artist.class).batchIterator(context, 5);) { + int count = 0; - for (List<Artist> artistList : it) { - count++; - assertEquals(5, artistList.size()); - } + for (List<Artist> artistList : it) { + count++; + assertEquals(5, artistList.size()); + } - assertEquals(4, count); - } finally { - it.close(); - } - } + assertEquals(4, count); + } + } @Test public void test_SelectDataRows() throws Exception { @@ -165,7 +157,7 @@ public class ObjectSelect_RunIT extends ServerCase { createArtistsDataSet(); ObjectSelect.query(Artist.class).where(Artist.ARTIST_NAME.like("artist%")).selectOne(context); } - + @Test public void test_SelectFirst() throws Exception { createArtistsDataSet(); @@ -175,15 +167,15 @@ public class ObjectSelect_RunIT extends ServerCase { assertEquals("artist13", a.getArtistName()); } - @Test - public void test_SelectFirstByContext() throws Exception { - createArtistsDataSet(); + @Test + public void test_SelectFirstByContext() throws Exception { + createArtistsDataSet(); - ObjectSelect<Artist> q = ObjectSelect.query(Artist.class).where(Artist.ARTIST_NAME.eq("artist13")); - Artist a = context.selectFirst(q); - assertNotNull(a); - assertEquals("artist13", a.getArtistName()); - } + ObjectSelect<Artist> q = ObjectSelect.query(Artist.class).where(Artist.ARTIST_NAME.eq("artist13")); + Artist a = context.selectFirst(q); + assertNotNull(a); + assertEquals("artist13", a.getArtistName()); + } @Test public void test_SelectFirst_NoMatch() throws Exception { @@ -194,8 +186,9 @@ public class ObjectSelect_RunIT extends ServerCase { @Test public void test_SelectFirst_MoreThanOneMatch() throws Exception { createArtistsDataSet(); - - Artist a = ObjectSelect.query(Artist.class).where(Artist.ARTIST_NAME.like("artist%")).orderBy("db:ARTIST_ID").selectFirst(context); + + Artist a = ObjectSelect.query(Artist.class).where(Artist.ARTIST_NAME.like("artist%")).orderBy("db:ARTIST_ID") + .selectFirst(context); assertNotNull(a); assertEquals("artist1", a.getArtistName()); } http://git-wip-us.apache.org/repos/asf/cayenne/blob/26d8434d/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectIT.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectIT.java index ca51c41..6c4de62 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectIT.java @@ -18,6 +18,16 @@ ****************************************************************/ package org.apache.cayenne.query; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.sql.Types; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import org.apache.cayenne.DataRow; import org.apache.cayenne.ResultBatchIterator; import org.apache.cayenne.ResultIterator; @@ -33,16 +43,6 @@ import org.apache.cayenne.unit.di.server.UseServerRuntime; import org.junit.Before; import org.junit.Test; -import java.sql.Types; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - @UseServerRuntime(CayenneProjects.TESTMAP_PROJECT) public class SQLSelectIT extends ServerCase { @@ -58,15 +58,15 @@ public class SQLSelectIT extends ServerCase { public void before() { tPainting = new TableHelper(dbHelper, "PAINTING") - .setColumns("PAINTING_ID", "PAINTING_TITLE", "ESTIMATED_PRICE") - .setColumnTypes(Types.INTEGER, Types.VARCHAR, Types.DECIMAL); + .setColumns("PAINTING_ID", "PAINTING_TITLE", "ESTIMATED_PRICE").setColumnTypes(Types.INTEGER, + Types.VARCHAR, Types.DECIMAL); } - protected void createPaintingsDataSet() throws Exception { - for (int i = 1; i <= 20; i++) { - tPainting.insert(i, "painting" + i, 10000. * i); - } - } + protected void createPaintingsDataSet() throws Exception { + for (int i = 1; i <= 20; i++) { + tPainting.insert(i, "painting" + i, 10000. * i); + } + } @Test public void test_DataRows_DataMapNameRoot() throws Exception { @@ -99,7 +99,8 @@ public class SQLSelectIT extends ServerCase { createPaintingsDataSet(); - SQLSelect<Painting> q1 = SQLSelect.query(Painting.class, "SELECT * FROM PAINTING").columnNameCaps(CapsStrategy.UPPER); + SQLSelect<Painting> q1 = SQLSelect.query(Painting.class, "SELECT * FROM PAINTING").columnNameCaps( + CapsStrategy.UPPER); assertFalse(q1.isFetchingDataRows()); List<Painting> result = context.select(q1); assertEquals(20, result.size()); @@ -111,11 +112,12 @@ public class SQLSelectIT extends ServerCase { createPaintingsDataSet(); - SQLSelect<Painting> q1 = SQLSelect.query(Painting.class, "SELECT * FROM PAINTING WHERE PAINTING_TITLE = #bind($a)"); + SQLSelect<Painting> q1 = SQLSelect.query(Painting.class, + "SELECT * FROM PAINTING WHERE PAINTING_TITLE = #bind($a)"); q1.params("a", "painting3").columnNameCaps(CapsStrategy.UPPER); assertFalse(q1.isFetchingDataRows()); - Painting a = context.selectOne(q1); + Painting a = context.selectOne(q1); assertEquals("painting3", a.getPaintingTitle()); } @@ -125,7 +127,8 @@ public class SQLSelectIT extends ServerCase { createPaintingsDataSet(); SQLSelect<Painting> q1 = SQLSelect.query(Painting.class, - "SELECT * FROM PAINTING WHERE PAINTING_TITLE = #bind($a) OR PAINTING_TITLE = #bind($b)").columnNameCaps(CapsStrategy.UPPER); + "SELECT * FROM PAINTING WHERE PAINTING_TITLE = #bind($a) OR PAINTING_TITLE = #bind($b)") + .columnNameCaps(CapsStrategy.UPPER); q1.params("a", "painting3").params("b", "painting4"); List<Painting> result = context.select(q1); @@ -174,7 +177,8 @@ public class SQLSelectIT extends ServerCase { createPaintingsDataSet(); SQLSelect<Painting> q1 = SQLSelect.query(Painting.class, "SELECT * FROM PAINTING") - .append(" WHERE PAINTING_TITLE = #bind($a)").params("a", "painting3").columnNameCaps(CapsStrategy.UPPER); + .append(" WHERE PAINTING_TITLE = #bind($a)").params("a", "painting3") + .columnNameCaps(CapsStrategy.UPPER); List<Painting> result = context.select(q1); assertEquals(1, result.size()); @@ -185,7 +189,8 @@ public class SQLSelectIT extends ServerCase { createPaintingsDataSet(); - List<Painting> result = SQLSelect.query(Painting.class, "SELECT * FROM PAINTING WHERE PAINTING_TITLE = #bind($a)") + List<Painting> result = SQLSelect + .query(Painting.class, "SELECT * FROM PAINTING WHERE PAINTING_TITLE = #bind($a)") .params("a", "painting3").columnNameCaps(CapsStrategy.UPPER).select(context); assertEquals(1, result.size()); @@ -196,97 +201,91 @@ public class SQLSelectIT extends ServerCase { createPaintingsDataSet(); - Painting a = SQLSelect.query(Painting.class, "SELECT * FROM PAINTING WHERE PAINTING_TITLE = #bind($a)") + Painting a = SQLSelect.query(Painting.class, "SELECT * FROM PAINTING WHERE PAINTING_TITLE = #bind($a)") .params("a", "painting3").columnNameCaps(CapsStrategy.UPPER).selectOne(context); assertEquals("painting3", a.getPaintingTitle()); } - @Test - public void test_SelectFirst() throws Exception { - createPaintingsDataSet(); - - Painting p = SQLSelect.query(Painting.class, "SELECT * FROM PAINTING ORDER BY PAINTING_TITLE").selectFirst(context); - - assertNotNull(p); - assertEquals("painting1", p.getPaintingTitle()); - } - - @Test - public void test_SelectFirstByContext() throws Exception { - createPaintingsDataSet(); + @Test + public void test_SelectFirst() throws Exception { + createPaintingsDataSet(); - SQLSelect<Painting> q = SQLSelect.query(Painting.class, "SELECT * FROM PAINTING ORDER BY PAINTING_TITLE"); - Painting p = context.selectFirst(q); + Painting p = SQLSelect.query(Painting.class, "SELECT * FROM PAINTING ORDER BY PAINTING_TITLE").selectFirst( + context); - assertNotNull(p); - assertEquals("painting1", p.getPaintingTitle()); - } + assertNotNull(p); + assertEquals("painting1", p.getPaintingTitle()); + } - @Test - public void test_Iterate() throws Exception { - createPaintingsDataSet(); + @Test + public void test_SelectFirstByContext() throws Exception { + createPaintingsDataSet(); - final int[] count = new int[1]; - SQLSelect.query(Painting.class, "SELECT * FROM PAINTING").columnNameCaps(CapsStrategy.UPPER) - .iterate(context, new ResultIteratorCallback<Painting>() { - @Override - public void next(Painting object) { - assertNotNull(object.getPaintingTitle()); - count[0]++; - } - }); + SQLSelect<Painting> q = SQLSelect.query(Painting.class, "SELECT * FROM PAINTING ORDER BY PAINTING_TITLE"); + Painting p = context.selectFirst(q); - assertEquals(20, count[0]); - } + assertNotNull(p); + assertEquals("painting1", p.getPaintingTitle()); + } - @Test - public void test_Iterator() throws Exception { - createPaintingsDataSet(); + @Test + public void test_Iterate() throws Exception { + createPaintingsDataSet(); - ResultIterator<Painting> it = SQLSelect.query(Painting.class, "SELECT * FROM PAINTING") - .columnNameCaps(CapsStrategy.UPPER).iterator(context); + final int[] count = new int[1]; + SQLSelect.query(Painting.class, "SELECT * FROM PAINTING").columnNameCaps(CapsStrategy.UPPER) + .iterate(context, new ResultIteratorCallback<Painting>() { + @Override + public void next(Painting object) { + assertNotNull(object.getPaintingTitle()); + count[0]++; + } + }); + + assertEquals(20, count[0]); + } - try { - int count = 0; + @Test + public void test_Iterator() throws Exception { + createPaintingsDataSet(); - for (Painting p : it) { - count++; - } + try (ResultIterator<Painting> it = SQLSelect.query(Painting.class, "SELECT * FROM PAINTING") + .columnNameCaps(CapsStrategy.UPPER).iterator(context);) { + int count = 0; - assertEquals(20, count); - } finally { - it.close(); - } - } + for (Painting p : it) { + count++; + } - @Test - public void test_BatchIterator() throws Exception { - createPaintingsDataSet(); + assertEquals(20, count); + } + } - ResultBatchIterator<Painting> it = SQLSelect.query(Painting.class, "SELECT * FROM PAINTING") - .columnNameCaps(CapsStrategy.UPPER).batchIterator(context, 5); + @Test + public void test_BatchIterator() throws Exception { + createPaintingsDataSet(); - try { - int count = 0; + try (ResultBatchIterator<Painting> it = SQLSelect.query(Painting.class, "SELECT * FROM PAINTING") + .columnNameCaps(CapsStrategy.UPPER).batchIterator(context, 5);) { + int count = 0; - for (List<Painting> paintingList : it) { - count++; - assertEquals(5, paintingList.size()); - } + for (List<Painting> paintingList : it) { + count++; + assertEquals(5, paintingList.size()); + } - assertEquals(4, count); - } finally { - it.close(); - } - } + assertEquals(4, count); + } + } @Test public void test_SelectLong() throws Exception { createPaintingsDataSet(); - long id = SQLSelect.scalarQuery(Integer.class, "SELECT PAINTING_ID FROM PAINTING WHERE PAINTING_TITLE = #bind($a)") + long id = SQLSelect + .scalarQuery(Integer.class, "SELECT PAINTING_ID FROM PAINTING WHERE PAINTING_TITLE = #bind($a)") .params("a", "painting3").selectOne(context); assertEquals(3l, id); @@ -297,8 +296,8 @@ public class SQLSelectIT extends ServerCase { createPaintingsDataSet(); - List<Integer> ids = SQLSelect.scalarQuery(Integer.class, "SELECT PAINTING_ID FROM PAINTING ORDER BY PAINTING_ID").select( - context); + List<Integer> ids = SQLSelect.scalarQuery(Integer.class, + "SELECT PAINTING_ID FROM PAINTING ORDER BY PAINTING_ID").select(context); assertEquals(20, ids.size()); assertEquals(2l, ids.get(1).intValue()); @@ -309,7 +308,8 @@ public class SQLSelectIT extends ServerCase { createPaintingsDataSet(); - int c = SQLSelect.scalarQuery(Integer.class, "SELECT #result('COUNT(*)' 'int') FROM PAINTING").selectOne(context); + int c = SQLSelect.scalarQuery(Integer.class, "SELECT #result('COUNT(*)' 'int') FROM PAINTING").selectOne( + context); assertEquals(20, c); } @@ -319,7 +319,8 @@ public class SQLSelectIT extends ServerCase { createPaintingsDataSet(); - Integer id = SQLSelect.scalarQuery(Integer.class, "SELECT PAINTING_ID FROM PAINTING WHERE PAINTING_TITLE = #bind($a)") + Integer id = SQLSelect + .scalarQuery(Integer.class, "SELECT PAINTING_ID FROM PAINTING WHERE PAINTING_TITLE = #bind($a)") .paramsArray("painting3").selectOne(context); assertEquals(3l, id.intValue()); @@ -369,11 +370,11 @@ public class SQLSelectIT extends ServerCase { List<Integer> ids = SQLSelect .scalarQuery( - Integer.class, + Integer.class, "SELECT PAINTING_ID FROM PAINTING #chain('OR' 'WHERE') " + "#chunk($a) ESTIMATED_PRICE #bindEqual($a) #end " - + "#chunk($b) PAINTING_TITLE #bindEqual($b) #end #end ORDER BY PAINTING_ID").params(params) - .select(context); + + "#chunk($b) PAINTING_TITLE #bindEqual($b) #end #end ORDER BY PAINTING_ID") + .params(params).select(context); assertEquals(1, ids.size()); assertEquals(1l, ids.get(0).longValue());
