Skip to content

Commit 8583dab

Browse files
committed
Improvement of ResultSet metadata
1 parent 8e64aa5 commit 8583dab

File tree

22 files changed

+242
-99
lines changed

22 files changed

+242
-99
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: 42 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,10 @@ 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.getColumnName(1)).isEqualTo("TABLE_SCHEM");
412416
assertThat(metadata.getColumnType(1)).isEqualTo(Types.VARCHAR);
413417

414-
assertThat(metadata.getColumnLabel(2)).isEqualTo("TABLE_CATALOG");
418+
assertThat(metadata.getColumnName(2)).isEqualTo("TABLE_CATALOG");
415419
assertThat(metadata.getColumnType(2)).isEqualTo(Types.VARCHAR);
416420
}
417421

@@ -615,34 +619,34 @@ private static void assertTableMetadata(ResultSet rs)
615619
ResultSetMetaData metadata = rs.getMetaData();
616620
assertThat(metadata.getColumnCount()).isEqualTo(10);
617621

618-
assertThat(metadata.getColumnLabel(1)).isEqualTo("TABLE_CAT");
622+
assertThat(metadata.getColumnName(1)).isEqualTo("TABLE_CAT");
619623
assertThat(metadata.getColumnType(1)).isEqualTo(Types.VARCHAR);
620624

621-
assertThat(metadata.getColumnLabel(2)).isEqualTo("TABLE_SCHEM");
625+
assertThat(metadata.getColumnName(2)).isEqualTo("TABLE_SCHEM");
622626
assertThat(metadata.getColumnType(2)).isEqualTo(Types.VARCHAR);
623627

624-
assertThat(metadata.getColumnLabel(3)).isEqualTo("TABLE_NAME");
628+
assertThat(metadata.getColumnName(3)).isEqualTo("TABLE_NAME");
625629
assertThat(metadata.getColumnType(3)).isEqualTo(Types.VARCHAR);
626630

627-
assertThat(metadata.getColumnLabel(4)).isEqualTo("TABLE_TYPE");
631+
assertThat(metadata.getColumnName(4)).isEqualTo("TABLE_TYPE");
628632
assertThat(metadata.getColumnType(4)).isEqualTo(Types.VARCHAR);
629633

630-
assertThat(metadata.getColumnLabel(5)).isEqualTo("REMARKS");
634+
assertThat(metadata.getColumnName(5)).isEqualTo("REMARKS");
631635
assertThat(metadata.getColumnType(5)).isEqualTo(Types.VARCHAR);
632636

633-
assertThat(metadata.getColumnLabel(6)).isEqualTo("TYPE_CAT");
637+
assertThat(metadata.getColumnName(6)).isEqualTo("TYPE_CAT");
634638
assertThat(metadata.getColumnType(6)).isEqualTo(Types.VARCHAR);
635639

636-
assertThat(metadata.getColumnLabel(7)).isEqualTo("TYPE_SCHEM");
640+
assertThat(metadata.getColumnName(7)).isEqualTo("TYPE_SCHEM");
637641
assertThat(metadata.getColumnType(7)).isEqualTo(Types.VARCHAR);
638642

639-
assertThat(metadata.getColumnLabel(8)).isEqualTo("TYPE_NAME");
643+
assertThat(metadata.getColumnName(8)).isEqualTo("TYPE_NAME");
640644
assertThat(metadata.getColumnType(8)).isEqualTo(Types.VARCHAR);
641645

642-
assertThat(metadata.getColumnLabel(9)).isEqualTo("SELF_REFERENCING_COL_NAME");
646+
assertThat(metadata.getColumnName(9)).isEqualTo("SELF_REFERENCING_COL_NAME");
643647
assertThat(metadata.getColumnType(9)).isEqualTo(Types.VARCHAR);
644648

645-
assertThat(metadata.getColumnLabel(10)).isEqualTo("REF_GENERATION");
649+
assertThat(metadata.getColumnName(10)).isEqualTo("REF_GENERATION");
646650
assertThat(metadata.getColumnType(10)).isEqualTo(Types.VARCHAR);
647651
}
648652

@@ -658,7 +662,7 @@ public void testGetTableTypes()
658662
ResultSetMetaData metadata = tableTypes.getMetaData();
659663
assertThat(metadata.getColumnCount()).isEqualTo(1);
660664

661-
assertThat(metadata.getColumnLabel(1)).isEqualTo("TABLE_TYPE");
665+
assertThat(metadata.getColumnName(1)).isEqualTo("TABLE_TYPE");
662666
assertThat(metadata.getColumnType(1)).isEqualTo(Types.VARCHAR);
663667
}
664668
}
@@ -877,76 +881,76 @@ private static void assertColumnMetadata(ResultSet rs)
877881
ResultSetMetaData metadata = rs.getMetaData();
878882
assertThat(metadata.getColumnCount()).isEqualTo(24);
879883

880-
assertThat(metadata.getColumnLabel(1)).isEqualTo("TABLE_CAT");
884+
assertThat(metadata.getColumnName(1)).isEqualTo("TABLE_CAT");
881885
assertThat(metadata.getColumnType(1)).isEqualTo(Types.VARCHAR);
882886

883-
assertThat(metadata.getColumnLabel(2)).isEqualTo("TABLE_SCHEM");
887+
assertThat(metadata.getColumnName(2)).isEqualTo("TABLE_SCHEM");
884888
assertThat(metadata.getColumnType(2)).isEqualTo(Types.VARCHAR);
885889

886-
assertThat(metadata.getColumnLabel(3)).isEqualTo("TABLE_NAME");
890+
assertThat(metadata.getColumnName(3)).isEqualTo("TABLE_NAME");
887891
assertThat(metadata.getColumnType(3)).isEqualTo(Types.VARCHAR);
888892

889-
assertThat(metadata.getColumnLabel(4)).isEqualTo("COLUMN_NAME");
893+
assertThat(metadata.getColumnName(4)).isEqualTo("COLUMN_NAME");
890894
assertThat(metadata.getColumnType(4)).isEqualTo(Types.VARCHAR);
891895

892-
assertThat(metadata.getColumnLabel(5)).isEqualTo("DATA_TYPE");
896+
assertThat(metadata.getColumnName(5)).isEqualTo("DATA_TYPE");
893897
assertThat(metadata.getColumnType(5)).isEqualTo(Types.BIGINT);
894898

895-
assertThat(metadata.getColumnLabel(6)).isEqualTo("TYPE_NAME");
899+
assertThat(metadata.getColumnName(6)).isEqualTo("TYPE_NAME");
896900
assertThat(metadata.getColumnType(6)).isEqualTo(Types.VARCHAR);
897901

898-
assertThat(metadata.getColumnLabel(7)).isEqualTo("COLUMN_SIZE");
902+
assertThat(metadata.getColumnName(7)).isEqualTo("COLUMN_SIZE");
899903
assertThat(metadata.getColumnType(7)).isEqualTo(Types.BIGINT);
900904

901-
assertThat(metadata.getColumnLabel(8)).isEqualTo("BUFFER_LENGTH");
905+
assertThat(metadata.getColumnName(8)).isEqualTo("BUFFER_LENGTH");
902906
assertThat(metadata.getColumnType(8)).isEqualTo(Types.BIGINT);
903907

904-
assertThat(metadata.getColumnLabel(9)).isEqualTo("DECIMAL_DIGITS");
908+
assertThat(metadata.getColumnName(9)).isEqualTo("DECIMAL_DIGITS");
905909
assertThat(metadata.getColumnType(9)).isEqualTo(Types.BIGINT);
906910

907-
assertThat(metadata.getColumnLabel(10)).isEqualTo("NUM_PREC_RADIX");
911+
assertThat(metadata.getColumnName(10)).isEqualTo("NUM_PREC_RADIX");
908912
assertThat(metadata.getColumnType(10)).isEqualTo(Types.BIGINT);
909913

910-
assertThat(metadata.getColumnLabel(11)).isEqualTo("NULLABLE");
914+
assertThat(metadata.getColumnName(11)).isEqualTo("NULLABLE");
911915
assertThat(metadata.getColumnType(11)).isEqualTo(Types.BIGINT);
912916

913-
assertThat(metadata.getColumnLabel(12)).isEqualTo("REMARKS");
917+
assertThat(metadata.getColumnName(12)).isEqualTo("REMARKS");
914918
assertThat(metadata.getColumnType(12)).isEqualTo(Types.VARCHAR);
915919

916-
assertThat(metadata.getColumnLabel(13)).isEqualTo("COLUMN_DEF");
920+
assertThat(metadata.getColumnName(13)).isEqualTo("COLUMN_DEF");
917921
assertThat(metadata.getColumnType(13)).isEqualTo(Types.VARCHAR);
918922

919-
assertThat(metadata.getColumnLabel(14)).isEqualTo("SQL_DATA_TYPE");
923+
assertThat(metadata.getColumnName(14)).isEqualTo("SQL_DATA_TYPE");
920924
assertThat(metadata.getColumnType(14)).isEqualTo(Types.BIGINT);
921925

922-
assertThat(metadata.getColumnLabel(15)).isEqualTo("SQL_DATETIME_SUB");
926+
assertThat(metadata.getColumnName(15)).isEqualTo("SQL_DATETIME_SUB");
923927
assertThat(metadata.getColumnType(15)).isEqualTo(Types.BIGINT);
924928

925-
assertThat(metadata.getColumnLabel(16)).isEqualTo("CHAR_OCTET_LENGTH");
929+
assertThat(metadata.getColumnName(16)).isEqualTo("CHAR_OCTET_LENGTH");
926930
assertThat(metadata.getColumnType(16)).isEqualTo(Types.BIGINT);
927931

928-
assertThat(metadata.getColumnLabel(17)).isEqualTo("ORDINAL_POSITION");
932+
assertThat(metadata.getColumnName(17)).isEqualTo("ORDINAL_POSITION");
929933
assertThat(metadata.getColumnType(17)).isEqualTo(Types.BIGINT);
930934

931-
assertThat(metadata.getColumnLabel(18)).isEqualTo("IS_NULLABLE");
935+
assertThat(metadata.getColumnName(18)).isEqualTo("IS_NULLABLE");
932936
assertThat(metadata.getColumnType(18)).isEqualTo(Types.VARCHAR);
933937

934-
assertThat(metadata.getColumnLabel(19)).isEqualTo("SCOPE_CATALOG");
938+
assertThat(metadata.getColumnName(19)).isEqualTo("SCOPE_CATALOG");
935939
assertThat(metadata.getColumnType(19)).isEqualTo(Types.VARCHAR);
936940

937-
assertThat(metadata.getColumnLabel(20)).isEqualTo("SCOPE_SCHEMA");
941+
assertThat(metadata.getColumnName(20)).isEqualTo("SCOPE_SCHEMA");
938942
assertThat(metadata.getColumnType(20)).isEqualTo(Types.VARCHAR);
939943

940-
assertThat(metadata.getColumnLabel(21)).isEqualTo("SCOPE_TABLE");
944+
assertThat(metadata.getColumnName(21)).isEqualTo("SCOPE_TABLE");
941945
assertThat(metadata.getColumnType(21)).isEqualTo(Types.VARCHAR);
942946

943-
assertThat(metadata.getColumnLabel(22)).isEqualTo("SOURCE_DATA_TYPE");
947+
assertThat(metadata.getColumnName(22)).isEqualTo("SOURCE_DATA_TYPE");
944948
assertThat(metadata.getColumnType(22)).isEqualTo(Types.BIGINT);
945949

946-
assertThat(metadata.getColumnLabel(23)).isEqualTo("IS_AUTOINCREMENT");
950+
assertThat(metadata.getColumnName(23)).isEqualTo("IS_AUTOINCREMENT");
947951
assertThat(metadata.getColumnType(23)).isEqualTo(Types.VARCHAR);
948952

949-
assertThat(metadata.getColumnLabel(24)).isEqualTo("IS_GENERATEDCOLUMN");
953+
assertThat(metadata.getColumnName(24)).isEqualTo("IS_GENERATEDCOLUMN");
950954
assertThat(metadata.getColumnType(24)).isEqualTo(Types.VARCHAR);
951955
}
952956

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+
}

core/trino-main/src/main/java/io/trino/execution/QueryExecution.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,22 +99,27 @@ interface QueryExecutionFactory<T extends QueryExecution>
9999
*/
100100
class QueryOutputInfo
101101
{
102-
private final List<String> columnNames;
102+
private final List<ColumnInfo> columnInfos;
103103
private final List<Type> columnTypes;
104104
private final Queue<ExchangeInput> inputsQueue;
105105
private final boolean noMoreInputs;
106106

107-
public QueryOutputInfo(List<String> columnNames, List<Type> columnTypes, Queue<ExchangeInput> inputsQueue, boolean noMoreInputs)
107+
public QueryOutputInfo(List<ColumnInfo> columnInfos, List<Type> columnTypes, Queue<ExchangeInput> inputsQueue, boolean noMoreInputs)
108108
{
109-
this.columnNames = ImmutableList.copyOf(requireNonNull(columnNames, "columnNames is null"));
109+
this.columnInfos = ImmutableList.copyOf(requireNonNull(columnInfos, "columnInfos is null"));
110110
this.columnTypes = ImmutableList.copyOf(requireNonNull(columnTypes, "columnTypes is null"));
111111
this.inputsQueue = requireNonNull(inputsQueue, "inputsQueue is null");
112112
this.noMoreInputs = noMoreInputs;
113113
}
114114

115+
public List<ColumnInfo> getColumnInfos()
116+
{
117+
return columnInfos;
118+
}
119+
115120
public List<String> getColumnNames()
116121
{
117-
return columnNames;
122+
return columnInfos.stream().map(ColumnInfo::name).toList();
118123
}
119124

120125
public List<Type> getColumnTypes()

0 commit comments

Comments
 (0)