@Override public void setSchema(String schema) throws SQLException { checkOpen(); try { client.runQuery(UserBitShared.QueryType.SQL, String.format("use %s", schema)); } catch (RpcException e) { throw new SQLException("Error when setting schema", e); } }
private Version getServerVersion() throws SQLException { DrillConnectionImpl connection = (DrillConnectionImpl) getConnection(); return connection.getClient().getServerVersion(); }
private String getServerName() throws SQLException { DrillConnectionImpl connection = (DrillConnectionImpl) getConnection(); return connection.getClient().getServerName(); }
@BeforeClass public static void openMyClient() throws Exception { parent_client = client; client = new DrillClient(config, serviceSet.getCoordinator()); client.setSupportComplexTypes(false); client.connect(); }
this.client = new DrillClient(dConfig, set.getCoordinator()); } else if(config.isDirect()) { final DrillConfig dConfig = DrillConfig.forClient(); this.allocator = RootAllocatorFactory.newRoot(dConfig); this.client = new DrillClient(dConfig, true); // Get a direct connection connect = config.getZookeeperConnectionString(); } else { this.client = new DrillClient(); connect = config.getZookeeperConnectionString(); this.client.setClientName("Apache Drill JDBC Driver"); this.client.connect(connect, info); } catch (OutOfMemoryException e) { throw new SQLNonTransientConnectionException("Failure creating root allocator", e); } catch (InvalidConnectionInfoException e) { throw new SQLNonTransientConnectionException("Invalid parameter in connection string: " + e.getMessage(), e); } catch (RpcException e) {
/** * * @param statement * @param signature * @throws SQLException */ DrillCursor(DrillConnectionImpl connection, AvaticaStatement statement, Signature signature) throws SQLException { this.connection = connection; this.statement = statement; this.signature = signature; DrillClient client = connection.getClient(); final int batchQueueThrottlingThreshold = client.getConfig().getInt( ExecConstants.JDBC_BATCH_QUEUE_THROTTLING_THRESHOLD ); resultsListener = new ResultsListener(this, batchQueueThrottlingThreshold); currentBatchHolder = new RecordBatchLoader(client.getAllocator()); setTimeout(this.statement.getQueryTimeout()); }
@AfterClass public static void closeMyClient() throws IOException { if (client != null) { client.close(); } client = parent_client; }
private boolean getServerMetaSupported() throws SQLException { DrillConnectionImpl connection = (DrillConnectionImpl) getConnection(); return !connection.getConfig().isServerMetadataDisabled() && connection.getClient().getSupportedMethods().contains(ServerMethod.GET_SERVER_META); }
@Test public void testStringColumnsMetadata() throws Exception { String query = "select varchar_field, char_field, string_field from hive.readtest"; Map<String, Integer> expectedResult = new HashMap<>(); expectedResult.put("varchar_field", 50); expectedResult.put("char_field", 10); expectedResult.put("string_field", HiveVarchar.MAX_VARCHAR_LENGTH); verifyColumnsMetadata(client.createPreparedStatement(query).get() .getPreparedStatement().getColumnsList(), expectedResult); try { test("alter session set `%s` = true", ExecConstants.EARLY_LIMIT0_OPT_KEY); verifyColumnsMetadata(client.createPreparedStatement(String.format("select * from (%s) t limit 0", query)).get() .getPreparedStatement().getColumnsList(), expectedResult); } finally { test("alter session reset `%s`", ExecConstants.EARLY_LIMIT0_OPT_KEY); } }
private MetaResultSet serverGetCatalogs() { return new MetadataAdapter<MetaImpl.MetaCatalog, GetCatalogsResp, CatalogMetadata>(MetaImpl.MetaCatalog.class) { @Override protected RequestStatus getStatus(GetCatalogsResp response) { return response.getStatus(); } @Override protected List<CatalogMetadata> getResult(GetCatalogsResp response) { return response.getCatalogsList(); } @Override protected DrillPBError getError(GetCatalogsResp response) { return response.getError(); } @Override protected MetaImpl.MetaCatalog adapt(CatalogMetadata protoValue) { return new MetaImpl.MetaCatalog(protoValue.getCatalogName()); } }.getMeta(connection.getClient().getCatalogs(null)); }
synchronized void cleanup() { if (resultsListener.getQueryId() != null && ! resultsListener.completed) { connection.getClient().cancelQuery(resultsListener.getQueryId()); } resultsListener.close(); currentBatchHolder.clear(); }
private MetaResultSet serverGetSchemas(String catalog, Pat schemaPattern) { final LikeFilter catalogNameFilter = newLikeFilter(quote(catalog)); final LikeFilter schemaNameFilter = newLikeFilter(schemaPattern); return new MetadataAdapter<MetaImpl.MetaSchema, GetSchemasResp, SchemaMetadata>(MetaImpl.MetaSchema.class) { @Override protected RequestStatus getStatus(GetSchemasResp response) { return response.getStatus(); } @Override protected List<SchemaMetadata> getResult(GetSchemasResp response) { return response.getSchemasList(); } @Override protected DrillPBError getError(GetSchemasResp response) { return response.getError(); } @Override protected MetaSchema adapt(SchemaMetadata value) { return new MetaImpl.MetaSchema(value.getCatalogName(), value.getSchemaName()); } }.getMeta(connection.getClient().getSchemas(catalogNameFilter, schemaNameFilter)); }
@Override public String getSchema() throws SQLException { checkOpen(); try { UserProtos.GetServerMetaResp response = client.getServerMeta().get(); if (response.getStatus() != UserProtos.RequestStatus.OK) { UserBitShared.DrillPBError drillError = response.getError(); throw new SQLException("Error when getting server meta: " + drillError.getMessage()); } UserProtos.ServerMeta serverMeta = response.getServerMeta(); String currentSchema = serverMeta.hasCurrentSchema() ? serverMeta.getCurrentSchema() : null; return StringUtils.isEmpty(currentSchema) ? null : currentSchema; } catch (InterruptedException | ExecutionException e) { throw new SQLException("Error when getting server meta", e); } }
private MetaResultSet serverGetTables(String catalog, final Pat schemaPattern, final Pat tableNamePattern, final List<String> typeList) { // Catalog is not a pattern final LikeFilter catalogNameFilter = newLikeFilter(quote(catalog)); final LikeFilter schemaNameFilter = newLikeFilter(schemaPattern); final LikeFilter tableNameFilter = newLikeFilter(tableNamePattern); return new MetadataAdapter<MetaImpl.MetaTable, GetTablesResp, TableMetadata>(MetaTable.class) { @Override protected RequestStatus getStatus(GetTablesResp response) { return response.getStatus(); }; @Override protected DrillPBError getError(GetTablesResp response) { return response.getError(); }; @Override protected List<TableMetadata> getResult(GetTablesResp response) { return response.getTablesList(); } @Override protected MetaImpl.MetaTable adapt(TableMetadata protoValue) { return new MetaImpl.MetaTable(protoValue.getCatalogName(), protoValue.getSchemaName(), protoValue.getTableName(), protoValue.getType()); }; }.getMeta(connection.getClient().getTables(catalogNameFilter, schemaNameFilter, tableNameFilter, typeList)); }
getIsNullable(value)); }.getMeta(connection.getClient().getColumns(catalogNameFilter, schemaNameFilter, tableNameFilter, columnNameFilter));
/** * Implements {@link DatabaseMetaData#getColumns}. */ @Override public MetaResultSet getColumns(ConnectionHandle ch, String catalog, Pat schemaPattern, Pat tableNamePattern, Pat columnNamePattern) { if (connection.getConfig().isServerMetadataDisabled() || ! connection.getClient().getSupportedMethods().contains(ServerMethod.GET_COLUMNS)) { return clientGetColumns(catalog, schemaPattern, tableNamePattern, columnNamePattern); } return serverGetColumns(catalog, schemaPattern, tableNamePattern, columnNamePattern); }
/** * Implements {@link DatabaseMetaData#getCatalogs}. */ @Override public MetaResultSet getCatalogs(ConnectionHandle ch) { if (connection.getConfig().isServerMetadataDisabled() || ! connection.getClient().getSupportedMethods().contains(ServerMethod.GET_CATALOGS)) { return clientGetCatalogs(); } return serverGetCatalogs(); }
/** * Implements {@link DatabaseMetaData#getSchemas}. */ @Override public MetaResultSet getSchemas(ConnectionHandle ch, String catalog, Pat schemaPattern) { if (connection.getConfig().isServerMetadataDisabled() || ! connection.getClient().getSupportedMethods().contains(ServerMethod.GET_SCHEMAS)) { return clientGetSchemas(catalog, schemaPattern); } return serverGetSchemas(catalog, schemaPattern); }
/** * Implements {@link DatabaseMetaData#getTables}. */ @Override public MetaResultSet getTables(ConnectionHandle ch, String catalog, Pat schemaPattern, Pat tableNamePattern, List<String> typeList) { if (connection.getConfig().isServerMetadataDisabled() || ! connection.getClient().getSupportedMethods().contains(ServerMethod.GET_TABLES)) { return clientGetTables(catalog, schemaPattern, tableNamePattern, typeList); } return serverGetTables(catalog, schemaPattern, tableNamePattern, typeList); }
@Override public DrillJdbc41PreparedStatement newPreparedStatement(AvaticaConnection connection, StatementHandle h, Meta.Signature signature, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException { DrillConnectionImpl drillConnection = (DrillConnectionImpl) connection; DrillClient client = drillConnection.getClient(); if (drillConnection.getConfig().isServerPreparedStatementDisabled() || !client.getSupportedMethods().contains(ServerMethod.PREPARED_STATEMENT)) { // fallback to client side prepared statement return new DrillJdbc41PreparedStatement(drillConnection, h, signature, null, resultSetType, resultSetConcurrency, resultSetHoldability); } return newServerPreparedStatement(drillConnection, h, signature, resultSetType, resultSetConcurrency, resultSetHoldability); }