@Override public Map<String, ColumnHandle> getColumnHandles(ConnectorSession session, ConnectorTableHandle tableHandle) { JdbcTableHandle jdbcTableHandle = (JdbcTableHandle) tableHandle; ImmutableMap.Builder<String, ColumnHandle> columnHandles = ImmutableMap.builder(); for (JdbcColumnHandle column : jdbcClient.getColumns(session, jdbcTableHandle)) { columnHandles.put(column.getColumnMetadata().getName(), column); } return columnHandles.build(); }
@Override public List<String> listSchemaNames(ConnectorSession session) { return ImmutableList.copyOf(jdbcClient.getSchemaNames()); }
@Override public ConnectorSplitSource getSplits(ConnectorTransactionHandle transactionHandle, ConnectorSession session, ConnectorTableLayoutHandle layout, SplitSchedulingStrategy splitSchedulingStrategy) { JdbcTableLayoutHandle layoutHandle = (JdbcTableLayoutHandle) layout; return jdbcClient.getSplits(layoutHandle); } }
@Override public ConnectorOutputTableHandle beginCreateTable(ConnectorSession session, ConnectorTableMetadata tableMetadata, Optional<ConnectorNewTableLayout> layout) { JdbcOutputTableHandle handle = jdbcClient.beginCreateTable(tableMetadata); setRollback(() -> jdbcClient.rollbackCreateTable(handle)); return handle; }
public JdbcPageSink(JdbcOutputTableHandle handle, JdbcClient jdbcClient) { try { connection = jdbcClient.getConnection(handle); } catch (SQLException e) { throw new PrestoException(JDBC_ERROR, e); } try { connection.setAutoCommit(false); statement = connection.prepareStatement(jdbcClient.buildInsertSql(handle)); } catch (SQLException e) { closeWithSuppression(connection, e); throw new PrestoException(JDBC_ERROR, e); } columnTypes = handle.getColumnTypes(); }
ReadMapping readMapping = jdbcClient.toPrestoType(session, columnHandles.get(i).getJdbcTypeHandle()) .orElseThrow(() -> new VerifyException("Unsupported column type")); Class<?> javaType = readMapping.getType().getJavaType(); connection = jdbcClient.getConnection(split); statement = jdbcClient.buildSql(connection, split, columnHandles); log.debug("Executing: %s", statement.toString()); resultSet = statement.executeQuery();
@Test public void testMetadata() { assertTrue(jdbcClient.getSchemaNames().containsAll(ImmutableSet.of("example", "tpch"))); assertEquals(jdbcClient.getTableNames("example"), ImmutableList.of( new SchemaTableName("example", "numbers"), new SchemaTableName("example", "view_source"), new SchemaTableName("example", "view"))); assertEquals(jdbcClient.getTableNames("tpch"), ImmutableList.of( new SchemaTableName("tpch", "lineitem"), new SchemaTableName("tpch", "orders"))); SchemaTableName schemaTableName = new SchemaTableName("example", "numbers"); JdbcTableHandle table = jdbcClient.getTableHandle(schemaTableName); assertNotNull(table, "table is null"); assertEquals(table.getCatalogName(), catalogName.toUpperCase(ENGLISH)); assertEquals(table.getSchemaName(), "EXAMPLE"); assertEquals(table.getTableName(), "NUMBERS"); assertEquals(table.getSchemaTableName(), schemaTableName); assertEquals(jdbcClient.getColumns(session, table), ImmutableList.of( new JdbcColumnHandle(CONNECTOR_ID, "TEXT", JDBC_VARCHAR, VARCHAR), new JdbcColumnHandle(CONNECTOR_ID, "TEXT_SHORT", JDBC_VARCHAR, createVarcharType(32)), new JdbcColumnHandle(CONNECTOR_ID, "VALUE", JDBC_BIGINT, BIGINT))); }
@Test public void testMetadataWithSchemaPattern() { SchemaTableName schemaTableName = new SchemaTableName("exa_ple", "num_ers"); JdbcTableHandle table = jdbcClient.getTableHandle(schemaTableName); assertNotNull(table, "table is null"); assertEquals(jdbcClient.getColumns(session, table), ImmutableList.of( new JdbcColumnHandle(CONNECTOR_ID, "TE_T", JDBC_VARCHAR, VARCHAR), new JdbcColumnHandle(CONNECTOR_ID, "VA%UE", JDBC_BIGINT, BIGINT))); }
public JdbcSplit getSplit(String schemaName, String tableName) { JdbcTableHandle jdbcTableHandle = jdbcClient.getTableHandle(new SchemaTableName(schemaName, tableName)); JdbcTableLayoutHandle jdbcLayoutHandle = new JdbcTableLayoutHandle(jdbcTableHandle, TupleDomain.all()); ConnectorSplitSource splits = jdbcClient.getSplits(jdbcLayoutHandle); return (JdbcSplit) getOnlyElement(getFutureValue(splits.getNextBatch(NOT_PARTITIONED, 1000)).getSplits()); }
@Override public JdbcTableHandle getTableHandle(ConnectorSession session, SchemaTableName tableName) { return jdbcClient.getTableHandle(tableName); }
@Override public List<SchemaTableName> listTables(ConnectorSession session, String schemaNameOrNull) { return jdbcClient.getTableNames(schemaNameOrNull); }
public JdbcRecordCursor(JdbcClient jdbcClient, JdbcSplit split, List<JdbcColumnHandle> columnHandles) { this.columnHandles = ImmutableList.copyOf(requireNonNull(columnHandles, "columnHandles is null")); try { connection = jdbcClient.getConnection(split); statement = jdbcClient.buildSql(split, columnHandles); log.debug("Executing: %s", statement.toString()); resultSet = statement.executeQuery(); } catch (SQLException e) { throw handleSqlException(e); } }
@Override public Optional<ConnectorOutputMetadata> finishCreateTable(ConnectorSession session, ConnectorOutputTableHandle tableHandle, Collection<Slice> fragments, Collection<ComputedStatistics> computedStatistics) { JdbcOutputTableHandle handle = (JdbcOutputTableHandle) tableHandle; jdbcClient.commitCreateTable(handle); clearRollback(); return Optional.empty(); }
@Override public void dropTable(ConnectorSession session, ConnectorTableHandle tableHandle) { if (!allowDropTable) { throw new PrestoException(PERMISSION_DENIED, "DROP TABLE is disabled in this catalog"); } JdbcTableHandle handle = (JdbcTableHandle) tableHandle; jdbcClient.dropTable(handle); }
@Override public ConnectorOutputTableHandle beginCreateTable(ConnectorSession session, ConnectorTableMetadata tableMetadata) { return jdbcClient.beginCreateTable(tableMetadata); }
@Test public void testMetadata() { assertTrue(jdbcClient.getSchemaNames().containsAll(ImmutableSet.of("example", "tpch"))); assertEquals(jdbcClient.getTableNames("example"), ImmutableList.of( new SchemaTableName("example", "numbers"), new SchemaTableName("example", "view_source"), new SchemaTableName("example", "view"))); assertEquals(jdbcClient.getTableNames("tpch"), ImmutableList.of( new SchemaTableName("tpch", "lineitem"), new SchemaTableName("tpch", "orders"))); SchemaTableName schemaTableName = new SchemaTableName("example", "numbers"); JdbcTableHandle table = jdbcClient.getTableHandle(schemaTableName); assertNotNull(table, "table is null"); assertEquals(table.getCatalogName(), catalogName.toUpperCase(ENGLISH)); assertEquals(table.getSchemaName(), "EXAMPLE"); assertEquals(table.getTableName(), "NUMBERS"); assertEquals(table.getSchemaTableName(), schemaTableName); assertEquals(jdbcClient.getColumns(session, table), ImmutableList.of( new JdbcColumnHandle(CONNECTOR_ID, "TEXT", JDBC_VARCHAR, VARCHAR), new JdbcColumnHandle(CONNECTOR_ID, "TEXT_SHORT", JDBC_VARCHAR, createVarcharType(32)), new JdbcColumnHandle(CONNECTOR_ID, "VALUE", JDBC_BIGINT, BIGINT))); }
public Map<String, JdbcColumnHandle> getColumnHandles(String schemaName, String tableName) { JdbcTableHandle tableHandle = jdbcClient.getTableHandle(new SchemaTableName(schemaName, tableName)); List<JdbcColumnHandle> columns = jdbcClient.getColumns(session, tableHandle); checkArgument(columns != null, "table not found: %s.%s", schemaName, tableName); ImmutableMap.Builder<String, JdbcColumnHandle> columnHandles = ImmutableMap.builder(); for (JdbcColumnHandle column : columns) { columnHandles.put(column.getColumnMetadata().getName(), column); } return columnHandles.build(); } }
public JdbcSplit getSplit(String schemaName, String tableName) { JdbcTableHandle jdbcTableHandle = jdbcClient.getTableHandle(new SchemaTableName(schemaName, tableName)); JdbcTableLayoutHandle jdbcLayoutHandle = new JdbcTableLayoutHandle(jdbcTableHandle, TupleDomain.all()); ConnectorSplitSource splits = jdbcClient.getSplits(jdbcLayoutHandle); return (JdbcSplit) getOnlyElement(getFutureValue(splits.getNextBatch(NOT_PARTITIONED, 1000)).getSplits()); }
@Override public Map<SchemaTableName, List<ColumnMetadata>> listTableColumns(ConnectorSession session, SchemaTablePrefix prefix) { ImmutableMap.Builder<SchemaTableName, List<ColumnMetadata>> columns = ImmutableMap.builder(); List<SchemaTableName> tables; if (prefix.getTableName() != null) { tables = ImmutableList.of(new SchemaTableName(prefix.getSchemaName(), prefix.getTableName())); } else { tables = listTables(session, prefix.getSchemaName()); } for (SchemaTableName tableName : tables) { try { JdbcTableHandle tableHandle = jdbcClient.getTableHandle(tableName); if (tableHandle == null) { continue; } columns.put(tableName, getTableMetadata(session, tableHandle).getColumns()); } catch (TableNotFoundException e) { // table disappeared during listing operation } } return columns.build(); }
public JdbcRecordSink(JdbcOutputTableHandle handle, JdbcClient jdbcClient) { try { connection = jdbcClient.getConnection(handle); connection.setAutoCommit(false); } catch (SQLException e) { throw new PrestoException(JDBC_ERROR, e); } try { statement = connection.prepareStatement(jdbcClient.buildInsertSql(handle)); } catch (SQLException e) { throw new PrestoException(JDBC_ERROR, e); } fieldCount = handle.getColumnNames().size(); columnTypes = handle.getColumnTypes(); }