@Test public void testMetadataWithFloatAndDoubleCol() { SchemaTableName schemaTableName = new SchemaTableName("exa_ple", "table_with_float_col"); JdbcTableHandle table = jdbcClient.getTableHandle(schemaTableName); assertNotNull(table, "table is null"); assertEquals(jdbcClient.getColumns(session, table), ImmutableList.of( new JdbcColumnHandle(CONNECTOR_ID, "COL1", JDBC_BIGINT, BIGINT), new JdbcColumnHandle(CONNECTOR_ID, "COL2", JDBC_DOUBLE, DOUBLE), new JdbcColumnHandle(CONNECTOR_ID, "COL3", JDBC_DOUBLE, DOUBLE), new JdbcColumnHandle(CONNECTOR_ID, "COL4", JDBC_REAL, REAL))); } }
@Override public ColumnMetadata getColumnMetadata(ConnectorSession session, ConnectorTableHandle tableHandle, ColumnHandle columnHandle) { return ((JdbcColumnHandle) columnHandle).getColumnMetadata(); }
private List<String> toConjuncts(List<JdbcColumnHandle> columns, TupleDomain<ColumnHandle> tupleDomain, List<TypeAndValue> accumulator) { ImmutableList.Builder<String> builder = ImmutableList.builder(); for (JdbcColumnHandle column : columns) { Type type = column.getColumnType(); if (isAcceptedType(type)) { Domain domain = tupleDomain.getDomains().get().get(column); if (domain != null) { builder.add(toPredicate(column.getColumnName(), domain, type, accumulator)); } } } return builder.build(); }
@Override public Type getType(int field) { return columnHandles[field].getColumnType(); }
Joiner.on(", ").appendTo(sql, transform(columns, column -> quote(column.getColumnName()))); if (columns.isEmpty()) { sql.append("null");
ReadMapping readMapping = jdbcClient.toPrestoType(session, columnHandles.get(i).getJdbcTypeHandle()) .orElseThrow(() -> new VerifyException("Unsupported column type")); Class<?> javaType = readMapping.getType().getJavaType();
public JdbcRecordSet(JdbcClient jdbcClient, ConnectorSession session, JdbcSplit split, List<JdbcColumnHandle> columnHandles) { this.jdbcClient = requireNonNull(jdbcClient, "jdbcClient is null"); this.split = requireNonNull(split, "split is null"); requireNonNull(split, "split is null"); this.columnHandles = requireNonNull(columnHandles, "column handles is null"); ImmutableList.Builder<Type> types = ImmutableList.builder(); for (JdbcColumnHandle column : columnHandles) { types.add(column.getColumnType()); } this.columnTypes = types.build(); this.session = requireNonNull(session, "session is null"); }
@Test public void testEquivalence() { EquivalenceTester.equivalenceTester() .addEquivalentGroup( new JdbcColumnHandle("connectorId", "columnName", JDBC_VARCHAR, VARCHAR), new JdbcColumnHandle("connectorId", "columnName", JDBC_VARCHAR, VARCHAR), new JdbcColumnHandle("connectorId", "columnName", JDBC_BIGINT, BIGINT), new JdbcColumnHandle("connectorId", "columnName", JDBC_VARCHAR, VARCHAR)) .addEquivalentGroup( new JdbcColumnHandle("connectorIdX", "columnName", JDBC_VARCHAR, VARCHAR), new JdbcColumnHandle("connectorIdX", "columnName", JDBC_VARCHAR, VARCHAR), new JdbcColumnHandle("connectorIdX", "columnName", JDBC_BIGINT, BIGINT), new JdbcColumnHandle("connectorIdX", "columnName", JDBC_VARCHAR, VARCHAR)) .addEquivalentGroup( new JdbcColumnHandle("connectorId", "columnNameX", JDBC_VARCHAR, VARCHAR), new JdbcColumnHandle("connectorId", "columnNameX", JDBC_VARCHAR, VARCHAR), new JdbcColumnHandle("connectorId", "columnNameX", JDBC_BIGINT, BIGINT), new JdbcColumnHandle("connectorId", "columnNameX", JDBC_VARCHAR, VARCHAR)) .check(); } }
@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(); }
private List<String> toConjuncts(List<JdbcColumnHandle> columns, TupleDomain<ColumnHandle> tupleDomain, List<TypeAndValue> accumulator) { ImmutableList.Builder<String> builder = ImmutableList.builder(); for (JdbcColumnHandle column : columns) { Type type = column.getColumnType(); if (isAcceptedType(type)) { Domain domain = tupleDomain.getDomains().get().get(column); if (domain != null) { builder.add(toPredicate(column.getColumnName(), domain, type, accumulator)); } } } return builder.build(); }
@Override public Type getType(int field) { return columnHandles.get(field).getColumnType(); }
@Test public void testJsonRoundTrip() { assertJsonRoundTrip(COLUMN_CODEC, new JdbcColumnHandle("connectorId", "columnName", JDBC_VARCHAR, VARCHAR)); }
@Override public ConnectorTableMetadata getTableMetadata(ConnectorSession session, ConnectorTableHandle table) { JdbcTableHandle handle = (JdbcTableHandle) table; ImmutableList.Builder<ColumnMetadata> columnMetadata = ImmutableList.builder(); for (JdbcColumnHandle column : jdbcClient.getColumns(session, handle)) { columnMetadata.add(column.getColumnMetadata()); } return new ConnectorTableMetadata(handle.getSchemaTableName(), columnMetadata.build()); }
public JdbcRecordSet(JdbcClient jdbcClient, JdbcSplit split, List<JdbcColumnHandle> columnHandles) { this.jdbcClient = requireNonNull(jdbcClient, "jdbcClient is null"); this.split = requireNonNull(split, "split is null"); requireNonNull(split, "split is null"); this.columnHandles = requireNonNull(columnHandles, "column handles is null"); ImmutableList.Builder<Type> types = ImmutableList.builder(); for (JdbcColumnHandle column : columnHandles) { types.add(column.getColumnType()); } this.columnTypes = types.build(); }
@Override public List<JdbcColumnHandle> getColumns(ConnectorSession session, JdbcTableHandle tableHandle) { try (Connection connection = connectionFactory.openConnection()) { try (ResultSet resultSet = getColumns(tableHandle, connection.getMetaData())) { List<JdbcColumnHandle> columns = new ArrayList<>(); while (resultSet.next()) { JdbcTypeHandle typeHandle = new JdbcTypeHandle( resultSet.getInt("DATA_TYPE"), resultSet.getInt("COLUMN_SIZE"), resultSet.getInt("DECIMAL_DIGITS")); Optional<ReadMapping> columnMapping = toPrestoType(session, typeHandle); // skip unsupported column types if (columnMapping.isPresent()) { String columnName = resultSet.getString("COLUMN_NAME"); columns.add(new JdbcColumnHandle(connectorId, columnName, typeHandle, columnMapping.get().getType())); } } if (columns.isEmpty()) { // In rare cases (e.g. PostgreSQL) a table might have no columns. throw new TableNotFoundException(tableHandle.getSchemaTableName()); } return ImmutableList.copyOf(columns); } } catch (SQLException e) { throw new PrestoException(JDBC_ERROR, e); } }
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(); } }
@Test public void testGetColumnTypes() { RecordSet recordSet = new JdbcRecordSet(jdbcClient, session, split, ImmutableList.of( new JdbcColumnHandle("test", "text", JDBC_VARCHAR, VARCHAR), new JdbcColumnHandle("test", "text_short", JDBC_VARCHAR, createVarcharType(32)), new JdbcColumnHandle("test", "value", JDBC_BIGINT, BIGINT))); assertEquals(recordSet.getColumnTypes(), ImmutableList.of(VARCHAR, createVarcharType(32), BIGINT)); recordSet = new JdbcRecordSet(jdbcClient, session, split, ImmutableList.of( new JdbcColumnHandle("test", "value", JDBC_BIGINT, BIGINT), new JdbcColumnHandle("test", "text", JDBC_VARCHAR, VARCHAR))); assertEquals(recordSet.getColumnTypes(), ImmutableList.of(BIGINT, VARCHAR)); recordSet = new JdbcRecordSet(jdbcClient, session, split, ImmutableList.of( new JdbcColumnHandle("test", "value", JDBC_BIGINT, BIGINT), new JdbcColumnHandle("test", "value", JDBC_BIGINT, BIGINT), new JdbcColumnHandle("test", "text", JDBC_VARCHAR, VARCHAR))); assertEquals(recordSet.getColumnTypes(), ImmutableList.of(BIGINT, BIGINT, VARCHAR)); recordSet = new JdbcRecordSet(jdbcClient, session, split, ImmutableList.of()); assertEquals(recordSet.getColumnTypes(), ImmutableList.of()); }
@Override public Map<String, ColumnHandle> getColumnHandles(ConnectorSession session, ConnectorTableHandle tableHandle) { JdbcTableHandle jdbcTableHandle = checkType(tableHandle, JdbcTableHandle.class, "tableHandle"); ImmutableMap.Builder<String, ColumnHandle> columnHandles = ImmutableMap.builder(); for (JdbcColumnHandle column : jdbcClient.getColumns(jdbcTableHandle)) { columnHandles.put(column.getColumnMetadata().getName(), column); } return columnHandles.build(); }
@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))); }
@Override public ColumnMetadata getColumnMetadata(ConnectorSession session, ConnectorTableHandle tableHandle, ColumnHandle columnHandle) { checkType(tableHandle, JdbcTableHandle.class, "tableHandle"); return checkType(columnHandle, JdbcColumnHandle.class, "columnHandle").getColumnMetadata(); }