Skip to content

Commit 9bf1d1e

Browse files
committed
Improvement of ResultSet metadata
1 parent 5d545c0 commit 9bf1d1e

File tree

21 files changed

+294
-98
lines changed

21 files changed

+294
-98
lines changed

client/trino-client/src/main/java/io/trino/client/Column.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,33 +18,75 @@
1818
import com.google.errorprone.annotations.Immutable;
1919

2020
import java.util.Objects;
21+
import java.util.Optional;
2122

2223
import static java.util.Objects.requireNonNull;
2324

2425
@Immutable
2526
public class Column
2627
{
28+
private final Optional<String> catalog;
29+
private final Optional<String> schema;
30+
private final Optional<String> table;
2731
private final String name;
32+
private final String label;
2833
private final String type;
2934
private final ClientTypeSignature typeSignature;
3035

36+
public Column(String name, String type, ClientTypeSignature typeSignature)
37+
{
38+
this(Optional.empty(), Optional.empty(), Optional.empty(), name, name, type, typeSignature);
39+
}
40+
3141
@JsonCreator
3242
public Column(
43+
@JsonProperty("catalog") Optional<String> catalog,
44+
@JsonProperty("schema") Optional<String> schema,
45+
@JsonProperty("table") Optional<String> table,
3346
@JsonProperty("name") String name,
47+
@JsonProperty("label") String label,
3448
@JsonProperty("type") String type,
3549
@JsonProperty("typeSignature") ClientTypeSignature typeSignature)
3650
{
51+
this.catalog = requireNonNull(catalog, "catalog is null");
52+
this.schema = requireNonNull(schema, "schema is null");
53+
this.table = requireNonNull(table, "table is null");
3754
this.name = requireNonNull(name, "name is null");
55+
this.label = requireNonNull(label, "label is null");
3856
this.type = requireNonNull(type, "type is null");
3957
this.typeSignature = typeSignature;
4058
}
4159

60+
@JsonProperty
61+
public Optional<String> getCatalog()
62+
{
63+
return catalog;
64+
}
65+
66+
@JsonProperty
67+
public Optional<String> getSchema()
68+
{
69+
return schema;
70+
}
71+
72+
@JsonProperty
73+
public Optional<String> getTable()
74+
{
75+
return table;
76+
}
77+
4278
@JsonProperty
4379
public String getName()
4480
{
4581
return name;
4682
}
4783

84+
@JsonProperty
85+
public String getLabel()
86+
{
87+
return label;
88+
}
89+
4890
@JsonProperty
4991
public String getType()
5092
{

client/trino-client/src/test/java/io/trino/client/TestQueryResults.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,11 @@ public class TestQueryResults
2929
" \"id\" : \"20160128_214710_00012_rk68b\",\n" +
3030
" \"infoUri\" : \"http://localhost:54855/query.html?20160128_214710_00012_rk68b\",\n" +
3131
" \"columns\" : [ {\n" +
32+
" \"catalog\" : \"_cat0\",\n" +
33+
" \"schema\" : \"_sch0\",\n" +
34+
" \"table\" : \"_tab0\",\n" +
3235
" \"name\" : \"_col0\",\n" +
36+
" \"label\" : \"_lab0\",\n" +
3337
" \"type\" : \"bigint\",\n" +
3438
" \"typeSignature\" : {\n" +
3539
" \"rawType\" : \"varchar\",\n" +

client/trino-jdbc/src/main/java/io/trino/jdbc/AbstractTrinoResultSet.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1970,11 +1970,11 @@ private static List<ColumnInfo> getColumnInfo(List<Column> columns)
19701970
ImmutableList.Builder<ColumnInfo> list = ImmutableList.builderWithExpectedSize(columns.size());
19711971
for (Column column : columns) {
19721972
ColumnInfo.Builder builder = new ColumnInfo.Builder()
1973-
.setCatalogName("") // TODO
1974-
.setSchemaName("") // TODO
1975-
.setTableName("") // TODO
1976-
.setColumnLabel(column.getName())
1977-
.setColumnName(column.getName()) // TODO
1973+
.setCatalogName(column.getCatalog().orElse(""))
1974+
.setSchemaName(column.getSchema().orElse(""))
1975+
.setTableName(column.getTable().orElse(""))
1976+
.setColumnLabel(column.getLabel())
1977+
.setColumnName(column.getName())
19781978
.setColumnTypeSignature(column.getTypeSignature())
19791979
.setNullable(Nullable.UNKNOWN)
19801980
.setCurrency(false);

client/trino-jdbc/src/test/java/io/trino/jdbc/TestTrinoDatabaseMetaData.java

Lines changed: 95 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,11 @@ public void testGetCatalogs()
284284

285285
ResultSetMetaData metadata = rs.getMetaData();
286286
assertThat(metadata.getColumnCount()).isEqualTo(1);
287-
assertThat(metadata.getColumnLabel(1)).isEqualTo("TABLE_CAT");
287+
assertThat(metadata.getCatalogName(1)).isEqualTo("system");
288+
assertThat(metadata.getSchemaName(1)).isEqualTo("jdbc");
289+
assertThat(metadata.getTableName(1)).isEqualTo("catalogs");
290+
assertThat(metadata.getColumnName(1)).isEqualTo("TABLE_CAT");
291+
assertThat(metadata.getColumnLabel(1)).isEqualTo("table_cat");
288292
assertThat(metadata.getColumnType(1)).isEqualTo(Types.VARCHAR);
289293
}
290294
}
@@ -408,10 +412,18 @@ private static void assertGetSchemasResult(ResultSet rs, List<List<String>> expe
408412
ResultSetMetaData metadata = rs.getMetaData();
409413
assertThat(metadata.getColumnCount()).isEqualTo(2);
410414

411-
assertThat(metadata.getColumnLabel(1)).isEqualTo("TABLE_SCHEM");
415+
assertThat(metadata.getCatalogName(1)).isEqualTo("system");
416+
assertThat(metadata.getSchemaName(1)).isEqualTo("jdbc");
417+
assertThat(metadata.getTableName(1)).isEqualTo("schemas");
418+
assertThat(metadata.getColumnName(1)).isEqualTo("TABLE_SCHEM");
419+
assertThat(metadata.getColumnLabel(1)).isEqualTo("table_schem");
412420
assertThat(metadata.getColumnType(1)).isEqualTo(Types.VARCHAR);
413421

414-
assertThat(metadata.getColumnLabel(2)).isEqualTo("TABLE_CATALOG");
422+
assertThat(metadata.getCatalogName(2)).isEqualTo("system");
423+
assertThat(metadata.getSchemaName(2)).isEqualTo("jdbc");
424+
assertThat(metadata.getTableName(2)).isEqualTo("schemas");
425+
assertThat(metadata.getColumnName(2)).isEqualTo("TABLE_CATALOG");
426+
assertThat(metadata.getColumnLabel(2)).isEqualTo("table_catalog");
415427
assertThat(metadata.getColumnType(2)).isEqualTo(Types.VARCHAR);
416428
}
417429

@@ -615,34 +627,75 @@ private static void assertTableMetadata(ResultSet rs)
615627
ResultSetMetaData metadata = rs.getMetaData();
616628
assertThat(metadata.getColumnCount()).isEqualTo(10);
617629

618-
assertThat(metadata.getColumnLabel(1)).isEqualTo("TABLE_CAT");
630+
631+
assertThat(metadata.getCatalogName(1)).isEqualTo("system");
632+
assertThat(metadata.getSchemaName(1)).isEqualTo("jdbc");
633+
assertThat(metadata.getTableName(1)).isEqualTo("tables");
634+
assertThat(metadata.getColumnName(1)).isEqualTo("TABLE_CAT");
635+
assertThat(metadata.getColumnLabel(1)).isEqualTo("table_cat");
619636
assertThat(metadata.getColumnType(1)).isEqualTo(Types.VARCHAR);
620637

621-
assertThat(metadata.getColumnLabel(2)).isEqualTo("TABLE_SCHEM");
638+
assertThat(metadata.getCatalogName(2)).isEqualTo("system");
639+
assertThat(metadata.getSchemaName(2)).isEqualTo("jdbc");
640+
assertThat(metadata.getTableName(2)).isEqualTo("tables");
641+
assertThat(metadata.getColumnName(2)).isEqualTo("TABLE_SCHEM");
642+
assertThat(metadata.getColumnLabel(2)).isEqualTo("table_schem");
622643
assertThat(metadata.getColumnType(2)).isEqualTo(Types.VARCHAR);
623644

624-
assertThat(metadata.getColumnLabel(3)).isEqualTo("TABLE_NAME");
645+
assertThat(metadata.getCatalogName(3)).isEqualTo("system");
646+
assertThat(metadata.getSchemaName(3)).isEqualTo("jdbc");
647+
assertThat(metadata.getTableName(3)).isEqualTo("tables");
648+
assertThat(metadata.getColumnName(3)).isEqualTo("TABLE_NAME");
649+
assertThat(metadata.getColumnLabel(3)).isEqualTo("table_name");
625650
assertThat(metadata.getColumnType(3)).isEqualTo(Types.VARCHAR);
626651

627-
assertThat(metadata.getColumnLabel(4)).isEqualTo("TABLE_TYPE");
652+
assertThat(metadata.getCatalogName(4)).isEqualTo("system");
653+
assertThat(metadata.getSchemaName(4)).isEqualTo("jdbc");
654+
assertThat(metadata.getTableName(4)).isEqualTo("tables");
655+
assertThat(metadata.getColumnName(4)).isEqualTo("TABLE_TYPE");
656+
assertThat(metadata.getColumnLabel(4)).isEqualTo("table_type");
628657
assertThat(metadata.getColumnType(4)).isEqualTo(Types.VARCHAR);
629658

630-
assertThat(metadata.getColumnLabel(5)).isEqualTo("REMARKS");
659+
assertThat(metadata.getCatalogName(5)).isEqualTo("system");
660+
assertThat(metadata.getSchemaName(5)).isEqualTo("jdbc");
661+
assertThat(metadata.getTableName(5)).isEqualTo("tables");
662+
assertThat(metadata.getColumnName(5)).isEqualTo("REMARKS");
663+
assertThat(metadata.getColumnLabel(5)).isEqualTo("remarks");
631664
assertThat(metadata.getColumnType(5)).isEqualTo(Types.VARCHAR);
632665

633-
assertThat(metadata.getColumnLabel(6)).isEqualTo("TYPE_CAT");
666+
assertThat(metadata.getCatalogName(6)).isEqualTo("system");
667+
assertThat(metadata.getSchemaName(6)).isEqualTo("jdbc");
668+
assertThat(metadata.getTableName(6)).isEqualTo("tables");
669+
assertThat(metadata.getColumnName(6)).isEqualTo("TYPE_CAT");
670+
assertThat(metadata.getColumnLabel(6)).isEqualTo("type_cat");
634671
assertThat(metadata.getColumnType(6)).isEqualTo(Types.VARCHAR);
635672

636-
assertThat(metadata.getColumnLabel(7)).isEqualTo("TYPE_SCHEM");
673+
assertThat(metadata.getCatalogName(7)).isEqualTo("system");
674+
assertThat(metadata.getSchemaName(7)).isEqualTo("jdbc");
675+
assertThat(metadata.getTableName(7)).isEqualTo("tables");
676+
assertThat(metadata.getColumnName(7)).isEqualTo("TYPE_SCHEM");
677+
assertThat(metadata.getColumnLabel(7)).isEqualTo("type_schem");
637678
assertThat(metadata.getColumnType(7)).isEqualTo(Types.VARCHAR);
638679

639-
assertThat(metadata.getColumnLabel(8)).isEqualTo("TYPE_NAME");
680+
assertThat(metadata.getCatalogName(8)).isEqualTo("system");
681+
assertThat(metadata.getSchemaName(8)).isEqualTo("jdbc");
682+
assertThat(metadata.getTableName(8)).isEqualTo("tables");
683+
assertThat(metadata.getColumnName(8)).isEqualTo("TYPE_NAME");
684+
assertThat(metadata.getColumnLabel(8)).isEqualTo("type_name");
640685
assertThat(metadata.getColumnType(8)).isEqualTo(Types.VARCHAR);
641686

642-
assertThat(metadata.getColumnLabel(9)).isEqualTo("SELF_REFERENCING_COL_NAME");
687+
assertThat(metadata.getCatalogName(9)).isEqualTo("system");
688+
assertThat(metadata.getSchemaName(9)).isEqualTo("jdbc");
689+
assertThat(metadata.getTableName(9)).isEqualTo("tables");
690+
assertThat(metadata.getColumnName(9)).isEqualTo("SELF_REFERENCING_COL_NAME");
691+
assertThat(metadata.getColumnLabel(9)).isEqualTo("self_referencing_col_name");
643692
assertThat(metadata.getColumnType(9)).isEqualTo(Types.VARCHAR);
644693

645-
assertThat(metadata.getColumnLabel(10)).isEqualTo("REF_GENERATION");
694+
assertThat(metadata.getCatalogName(10)).isEqualTo("system");
695+
assertThat(metadata.getSchemaName(10)).isEqualTo("jdbc");
696+
assertThat(metadata.getTableName(10)).isEqualTo("tables");
697+
assertThat(metadata.getColumnName(10)).isEqualTo("REF_GENERATION");
698+
assertThat(metadata.getColumnLabel(10)).isEqualTo("ref_generation");
646699
assertThat(metadata.getColumnType(10)).isEqualTo(Types.VARCHAR);
647700
}
648701

@@ -658,7 +711,11 @@ public void testGetTableTypes()
658711
ResultSetMetaData metadata = tableTypes.getMetaData();
659712
assertThat(metadata.getColumnCount()).isEqualTo(1);
660713

661-
assertThat(metadata.getColumnLabel(1)).isEqualTo("TABLE_TYPE");
714+
assertThat(metadata.getCatalogName(1)).isEqualTo("system");
715+
assertThat(metadata.getSchemaName(1)).isEqualTo("jdbc");
716+
assertThat(metadata.getTableName(1)).isEqualTo("tabletypes");
717+
assertThat(metadata.getColumnName(1)).isEqualTo("TABLE_TYPE");
718+
assertThat(metadata.getColumnLabel(1)).isEqualTo("table_type");
662719
assertThat(metadata.getColumnType(1)).isEqualTo(Types.VARCHAR);
663720
}
664721
}
@@ -877,76 +934,76 @@ private static void assertColumnMetadata(ResultSet rs)
877934
ResultSetMetaData metadata = rs.getMetaData();
878935
assertThat(metadata.getColumnCount()).isEqualTo(24);
879936

880-
assertThat(metadata.getColumnLabel(1)).isEqualTo("TABLE_CAT");
937+
assertThat(metadata.getColumnName(1)).isEqualTo("TABLE_CAT");
881938
assertThat(metadata.getColumnType(1)).isEqualTo(Types.VARCHAR);
882939

883-
assertThat(metadata.getColumnLabel(2)).isEqualTo("TABLE_SCHEM");
940+
assertThat(metadata.getColumnName(2)).isEqualTo("TABLE_SCHEM");
884941
assertThat(metadata.getColumnType(2)).isEqualTo(Types.VARCHAR);
885942

886-
assertThat(metadata.getColumnLabel(3)).isEqualTo("TABLE_NAME");
943+
assertThat(metadata.getColumnName(3)).isEqualTo("TABLE_NAME");
887944
assertThat(metadata.getColumnType(3)).isEqualTo(Types.VARCHAR);
888945

889-
assertThat(metadata.getColumnLabel(4)).isEqualTo("COLUMN_NAME");
946+
assertThat(metadata.getColumnName(4)).isEqualTo("COLUMN_NAME");
890947
assertThat(metadata.getColumnType(4)).isEqualTo(Types.VARCHAR);
891948

892-
assertThat(metadata.getColumnLabel(5)).isEqualTo("DATA_TYPE");
949+
assertThat(metadata.getColumnName(5)).isEqualTo("DATA_TYPE");
893950
assertThat(metadata.getColumnType(5)).isEqualTo(Types.BIGINT);
894951

895-
assertThat(metadata.getColumnLabel(6)).isEqualTo("TYPE_NAME");
952+
assertThat(metadata.getColumnName(6)).isEqualTo("TYPE_NAME");
896953
assertThat(metadata.getColumnType(6)).isEqualTo(Types.VARCHAR);
897954

898-
assertThat(metadata.getColumnLabel(7)).isEqualTo("COLUMN_SIZE");
955+
assertThat(metadata.getColumnName(7)).isEqualTo("COLUMN_SIZE");
899956
assertThat(metadata.getColumnType(7)).isEqualTo(Types.BIGINT);
900957

901-
assertThat(metadata.getColumnLabel(8)).isEqualTo("BUFFER_LENGTH");
958+
assertThat(metadata.getColumnName(8)).isEqualTo("BUFFER_LENGTH");
902959
assertThat(metadata.getColumnType(8)).isEqualTo(Types.BIGINT);
903960

904-
assertThat(metadata.getColumnLabel(9)).isEqualTo("DECIMAL_DIGITS");
961+
assertThat(metadata.getColumnName(9)).isEqualTo("DECIMAL_DIGITS");
905962
assertThat(metadata.getColumnType(9)).isEqualTo(Types.BIGINT);
906963

907-
assertThat(metadata.getColumnLabel(10)).isEqualTo("NUM_PREC_RADIX");
964+
assertThat(metadata.getColumnName(10)).isEqualTo("NUM_PREC_RADIX");
908965
assertThat(metadata.getColumnType(10)).isEqualTo(Types.BIGINT);
909966

910-
assertThat(metadata.getColumnLabel(11)).isEqualTo("NULLABLE");
967+
assertThat(metadata.getColumnName(11)).isEqualTo("NULLABLE");
911968
assertThat(metadata.getColumnType(11)).isEqualTo(Types.BIGINT);
912969

913-
assertThat(metadata.getColumnLabel(12)).isEqualTo("REMARKS");
970+
assertThat(metadata.getColumnName(12)).isEqualTo("REMARKS");
914971
assertThat(metadata.getColumnType(12)).isEqualTo(Types.VARCHAR);
915972

916-
assertThat(metadata.getColumnLabel(13)).isEqualTo("COLUMN_DEF");
973+
assertThat(metadata.getColumnName(13)).isEqualTo("COLUMN_DEF");
917974
assertThat(metadata.getColumnType(13)).isEqualTo(Types.VARCHAR);
918975

919-
assertThat(metadata.getColumnLabel(14)).isEqualTo("SQL_DATA_TYPE");
976+
assertThat(metadata.getColumnName(14)).isEqualTo("SQL_DATA_TYPE");
920977
assertThat(metadata.getColumnType(14)).isEqualTo(Types.BIGINT);
921978

922-
assertThat(metadata.getColumnLabel(15)).isEqualTo("SQL_DATETIME_SUB");
979+
assertThat(metadata.getColumnName(15)).isEqualTo("SQL_DATETIME_SUB");
923980
assertThat(metadata.getColumnType(15)).isEqualTo(Types.BIGINT);
924981

925-
assertThat(metadata.getColumnLabel(16)).isEqualTo("CHAR_OCTET_LENGTH");
982+
assertThat(metadata.getColumnName(16)).isEqualTo("CHAR_OCTET_LENGTH");
926983
assertThat(metadata.getColumnType(16)).isEqualTo(Types.BIGINT);
927984

928-
assertThat(metadata.getColumnLabel(17)).isEqualTo("ORDINAL_POSITION");
985+
assertThat(metadata.getColumnName(17)).isEqualTo("ORDINAL_POSITION");
929986
assertThat(metadata.getColumnType(17)).isEqualTo(Types.BIGINT);
930987

931-
assertThat(metadata.getColumnLabel(18)).isEqualTo("IS_NULLABLE");
988+
assertThat(metadata.getColumnName(18)).isEqualTo("IS_NULLABLE");
932989
assertThat(metadata.getColumnType(18)).isEqualTo(Types.VARCHAR);
933990

934-
assertThat(metadata.getColumnLabel(19)).isEqualTo("SCOPE_CATALOG");
991+
assertThat(metadata.getColumnName(19)).isEqualTo("SCOPE_CATALOG");
935992
assertThat(metadata.getColumnType(19)).isEqualTo(Types.VARCHAR);
936993

937-
assertThat(metadata.getColumnLabel(20)).isEqualTo("SCOPE_SCHEMA");
994+
assertThat(metadata.getColumnName(20)).isEqualTo("SCOPE_SCHEMA");
938995
assertThat(metadata.getColumnType(20)).isEqualTo(Types.VARCHAR);
939996

940-
assertThat(metadata.getColumnLabel(21)).isEqualTo("SCOPE_TABLE");
997+
assertThat(metadata.getColumnName(21)).isEqualTo("SCOPE_TABLE");
941998
assertThat(metadata.getColumnType(21)).isEqualTo(Types.VARCHAR);
942999

943-
assertThat(metadata.getColumnLabel(22)).isEqualTo("SOURCE_DATA_TYPE");
1000+
assertThat(metadata.getColumnName(22)).isEqualTo("SOURCE_DATA_TYPE");
9441001
assertThat(metadata.getColumnType(22)).isEqualTo(Types.BIGINT);
9451002

946-
assertThat(metadata.getColumnLabel(23)).isEqualTo("IS_AUTOINCREMENT");
1003+
assertThat(metadata.getColumnName(23)).isEqualTo("IS_AUTOINCREMENT");
9471004
assertThat(metadata.getColumnType(23)).isEqualTo(Types.VARCHAR);
9481005

949-
assertThat(metadata.getColumnLabel(24)).isEqualTo("IS_GENERATEDCOLUMN");
1006+
assertThat(metadata.getColumnName(24)).isEqualTo("IS_GENERATEDCOLUMN");
9501007
assertThat(metadata.getColumnType(24)).isEqualTo(Types.VARCHAR);
9511008
}
9521009

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* Licensed under the Apache License, Version 2.0 (the "License");
3+
* you may not use this file except in compliance with the License.
4+
* You may obtain a copy of the License at
5+
*
6+
* http://www.apache.org/licenses/LICENSE-2.0
7+
*
8+
* Unless required by applicable law or agreed to in writing, software
9+
* distributed under the License is distributed on an "AS IS" BASIS,
10+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
* See the License for the specific language governing permissions and
12+
* limitations under the License.
13+
*/
14+
package io.trino.execution;
15+
16+
import java.util.Optional;
17+
18+
public record ColumnInfo(Optional<String> catalog, Optional<String> schema, Optional<String> table, String name, String label)
19+
{
20+
public ColumnInfo(String name)
21+
{
22+
this(Optional.empty(), Optional.empty(), Optional.empty(), name, name);
23+
}
24+
25+
public ColumnInfo(String name, String label)
26+
{
27+
this(Optional.empty(), Optional.empty(), Optional.empty(), name, label);
28+
}
29+
30+
public ColumnInfo(String catalog, String schema, String table, String name)
31+
{
32+
this(Optional.of(catalog), Optional.of(schema), Optional.of(table), name, name);
33+
}
34+
35+
public ColumnInfo(String catalog, String schema, String table, String name, String label)
36+
{
37+
this(Optional.of(catalog), Optional.of(schema), Optional.of(table), name, label);
38+
}
39+
}

0 commit comments

Comments
 (0)