@Override public RowReader getReader(Map<String, ?> parameters) { // TODO: fetching DataRows and then converting them to Object[] is kind // of expensive... maybe we can create Object[] bypassing DR, ideally by // iterating a JDBC ResultSet SQLSelect<DataRow> select = SQLSelect.dataRowQuery(sqlTemplate); select.params(parameters); switch (capsStrategy) { case LOWER: select.lowerColumnNames(); break; case UPPER: select.upperColumnNames(); break; case DEFAULT: select.upperColumnNames(); break; } return new JdbcRowReader(attributes, context.iterator(select)); } }
@Test public void testRelate_ToMany_New() { insert("e2", "id, name", "24, 'xxx'"); Response response = target("/e2/24/e3s") .request() .post(Entity.json("{\"name\":\"zzz\"}")); assertEquals(Status.OK.getStatusCode(), response.getStatus()); assertEquals("{\"data\":[{REPLACED_ID,\"name\":\"zzz\",\"phoneNumber\":null}],\"total\":1}", response.readEntity(String.class).replaceFirst("\"id\":[\\d]+", "REPLACED_ID")); assertEquals(1, intForQuery("SELECT count(1) FROM utest.e3")); DataRow row = SQLSelect.dataRowQuery("SELECT e2_id, name FROM utest.e3").lowerColumnNames() .selectOne(newContext()); assertEquals("zzz", row.get("name")); assertEquals(24, row.get("e2_id")); }
@Test public void testRelate_ToMany_New_CompoundId() { insert("e17", "id1, id2, name", "1, 1, 'aaa'"); Response response = target("/e17/e18s") .matrixParam("parentId1", 1) .matrixParam("parentId2", 1) .request() .post(Entity.json("{\"name\":\"xxx\"}")); assertEquals(Status.OK.getStatusCode(), response.getStatus()); assertEquals("{\"data\":[{REPLACED_ID,\"name\":\"xxx\"}],\"total\":1}", response.readEntity(String.class).replaceFirst("\"id\":[\\d]+", "REPLACED_ID")); assertEquals(1, intForQuery("SELECT count(1) FROM utest.e18")); DataRow row = SQLSelect.dataRowQuery("SELECT e17_id1, e17_id2, name FROM utest.e18").lowerColumnNames() .selectOne(newContext()); assertEquals("xxx", row.get("name")); assertEquals(1, row.get("e17_id1")); assertEquals(1, row.get("e17_id2")); }