use of io.cdap.cdap.proto.ColumnDesc in project cdap by caskdata.
the class ExploreQueryExecutorHttpHandler method getQueryResultsSchema.
@GET
@Path("data/explore/queries/{id}/schema")
public void getQueryResultsSchema(HttpRequest request, HttpResponder responder, @PathParam("id") String id) throws ExploreException {
try {
final QueryHandle handle = QueryHandle.fromId(id);
List<ColumnDesc> schema;
if (!handle.equals(QueryHandle.NO_OP)) {
schema = doAs(handle, new Callable<List<ColumnDesc>>() {
@Override
public List<ColumnDesc> call() throws Exception {
return exploreService.getResultSchema(handle);
}
});
} else {
schema = Lists.newArrayList();
}
responder.sendJson(HttpResponseStatus.OK, GSON.toJson(schema));
} catch (IllegalArgumentException e) {
LOG.debug("Got exception:", e);
responder.sendString(HttpResponseStatus.BAD_REQUEST, e.getMessage());
} catch (SQLException e) {
LOG.debug("Got exception:", e);
responder.sendString(HttpResponseStatus.BAD_REQUEST, String.format("[SQLState %s] %s", e.getSQLState(), e.getMessage()));
} catch (HandleNotFoundException e) {
responder.sendStatus(HttpResponseStatus.NOT_FOUND);
}
}
use of io.cdap.cdap.proto.ColumnDesc in project cdap by caskdata.
the class QueryResultsBodyProducer method getCSVHeaders.
private String getCSVHeaders(List<ColumnDesc> schema) throws HandleNotFoundException, SQLException, ExploreException {
StringBuilder sb = new StringBuilder();
boolean first = true;
for (ColumnDesc columnDesc : schema) {
if (first) {
first = false;
} else {
sb.append(',');
}
sb.append(columnDesc.getName());
}
return sb.toString();
}
use of io.cdap.cdap.proto.ColumnDesc in project cdap by caskdata.
the class ExplorePreparedStatementTest method executeTest.
@Test
public void executeTest() throws Exception {
ExploreClient exploreClient = new MockExploreClient(ImmutableMap.of("SELECT * FROM table WHERE id=100, name='foo'", (List<ColumnDesc>) Lists.newArrayList(new ColumnDesc("column1", "STRING", 1, ""), new ColumnDesc("column2", "int", 2, ""))), ImmutableMap.of("SELECT * FROM table WHERE id=100, name='foo'", (List<QueryResult>) Lists.<QueryResult>newArrayList()));
String ns = "ns1";
ExplorePreparedStatement statement = new ExplorePreparedStatement(null, exploreClient, "SELECT * FROM table WHERE id=?, name=?", ns);
statement.setInt(1, 100);
try {
statement.execute();
Assert.fail();
} catch (SQLException e) {
// Parameter 2 has not been set
}
statement.setString(2, "foo");
Assert.assertEquals("SELECT * FROM table WHERE id=100, name='foo'", statement.updateSql());
Assert.assertTrue(statement.execute());
ResultSet rs = statement.getResultSet();
Assert.assertNotNull(rs);
Assert.assertFalse(rs.isClosed());
Assert.assertFalse(rs.next());
statement = new ExplorePreparedStatement(null, exploreClient, "SELECT * FROM table WHERE name='?'", ns);
Assert.assertEquals("SELECT * FROM table WHERE name='?'", statement.updateSql());
statement = new ExplorePreparedStatement(null, exploreClient, "SELECT * FROM table WHERE name='?', id=?", ns);
statement.setInt(1, 100);
Assert.assertEquals("SELECT * FROM table WHERE name='?', id=100", statement.updateSql());
statement = new ExplorePreparedStatement(null, exploreClient, "SELECT * FROM table WHERE name=\"?\", id=?", ns);
statement.setInt(1, 100);
Assert.assertEquals("SELECT * FROM table WHERE name=\"?\", id=100", statement.updateSql());
statement = new ExplorePreparedStatement(null, exploreClient, "SELECT * FROM table WHERE name=\"'?'\", id=?", ns);
statement.setInt(1, 100);
Assert.assertEquals("SELECT * FROM table WHERE name=\"'?'\", id=100", statement.updateSql());
statement = new ExplorePreparedStatement(null, exploreClient, "SELECT * FROM table WHERE name=\"'?\", id=?", ns);
statement.setInt(1, 100);
Assert.assertEquals("SELECT * FROM table WHERE name=\"'?\", id=100", statement.updateSql());
statement = new ExplorePreparedStatement(null, exploreClient, "SELECT * FROM table WHERE name=\"\\\"?\\\"\", id=?", ns);
statement.setInt(1, 100);
Assert.assertEquals("SELECT * FROM table WHERE name=\"\\\"?\\\"\", id=100", statement.updateSql());
}
use of io.cdap.cdap.proto.ColumnDesc in project cdap by caskdata.
the class StaticEmptyExploreResultSet method getMetaData.
@Override
public ResultSetMetaData getMetaData() throws SQLException {
if (isClosed()) {
throw new SQLException("Resultset is closed");
}
ImmutableList.Builder<ColumnDesc> builder = ImmutableList.builder();
for (int i = 0; i < schema.size(); i++) {
ImmutablePair<String, String> pair = schema.get(i);
builder.add(new ColumnDesc(pair.getFirst(), pair.getSecond(), i + 1, ""));
}
return new ExploreResultSetMetaData(builder.build());
}
use of io.cdap.cdap.proto.ColumnDesc in project cdap by caskdata.
the class ExploreResultSetTest method testResultSet.
@Test
public void testResultSet() throws Exception {
ExploreClient exploreClient = new MockExploreClient(ImmutableMap.of("mock_query", (List<ColumnDesc>) Lists.newArrayList(new ColumnDesc("column1", "STRING", 1, ""), new ColumnDesc("column2", "int", 2, ""), new ColumnDesc("column3", "char", 3, ""), new ColumnDesc("column4", "float", 4, ""), new ColumnDesc("column5", "double", 5, ""), new ColumnDesc("column6", "boolean", 6, ""), new ColumnDesc("column7", "tinyint", 7, ""), new ColumnDesc("column8", "smallint", 8, ""), new ColumnDesc("column9", "bigint", 9, ""), new ColumnDesc("column10", "date", 10, ""), new ColumnDesc("column11", "timestamp", 11, ""), new ColumnDesc("column12", "decimal", 12, ""), new ColumnDesc("column14", "map<string,string>", 13, ""), new ColumnDesc("column15", "array<string>", 14, ""), new ColumnDesc("column16", "struct<name:string,attr:string>", 15, ""))), ImmutableMap.of("mock_query", (List<QueryResult>) Lists.newArrayList(new QueryResult(ImmutableList.<Object>of("value1", 1, "c", 0.1f, 0.2d, true, 0x1, (short) 2, (long) 10, "2014-06-20", "2014-06-20 07:37:00", "1000000000", "\"{\"key1\":\"value1\"}", "[\"a\",\"b\",\"c\"]", "{\"name\":\"first\",\"attr\":\"second\"}")))));
ResultSet resultSet = new ExploreResultSet(exploreClient.submit(new NamespaceId(ns), "mock_query").get(), new ExploreStatement(null, exploreClient, ns), 0);
Assert.assertTrue(resultSet.next());
Assert.assertEquals(resultSet.getObject(1), resultSet.getObject("column1"));
Assert.assertEquals("value1", resultSet.getString(1));
Assert.assertEquals(1, resultSet.getInt(2));
Assert.assertEquals("c", resultSet.getString(3));
Assert.assertEquals(0.1f, resultSet.getFloat(4), 0.01);
Assert.assertEquals(0.2d, resultSet.getDouble(5), 0.01);
Assert.assertEquals(true, resultSet.getBoolean(6));
Assert.assertEquals(0x1, resultSet.getByte(7));
Assert.assertEquals(2, resultSet.getShort(8));
Assert.assertEquals(10, resultSet.getLong(9));
Assert.assertEquals(Date.valueOf("2014-06-20"), resultSet.getDate(10));
Assert.assertEquals(Timestamp.valueOf("2014-06-20 07:37:00"), resultSet.getTimestamp(11));
Assert.assertEquals(new BigDecimal("1000000000"), resultSet.getBigDecimal(12));
Assert.assertEquals("\"{\"key1\":\"value1\"}", resultSet.getString(13));
Assert.assertEquals("[\"a\",\"b\",\"c\"]", resultSet.getString(14));
Assert.assertEquals("{\"name\":\"first\",\"attr\":\"second\"}", resultSet.getString(15));
Assert.assertFalse(resultSet.next());
Assert.assertFalse(resultSet.next());
try {
resultSet.getObject(1);
} catch (SQLException e) {
// Expected: no more rows
}
}
Aggregations