Skip to content

Commit d2df67f

Browse files
committed
Enhance ShowColumns
to add three new columns : precision, scale and length
1 parent 5e2870a commit d2df67f

File tree

37 files changed

+355
-280
lines changed

37 files changed

+355
-280
lines changed

presto-base-arrow-flight/src/test/java/com/facebook/plugin/arrow/TestArrowFlightQueries.java

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import java.time.ZonedDateTime;
3838
import java.time.format.DateTimeFormatter;
3939

40+
import static com.facebook.presto.common.type.BigintType.BIGINT;
4041
import static com.facebook.presto.common.type.CharType.createCharType;
4142
import static com.facebook.presto.common.type.DateType.DATE;
4243
import static com.facebook.presto.common.type.IntegerType.INTEGER;
@@ -103,18 +104,18 @@ public void testShowCharColumns()
103104
{
104105
MaterializedResult actual = computeActual("SHOW COLUMNS FROM member");
105106

106-
MaterializedResult expectedUnparametrizedVarchar = resultBuilder(getSession(), VARCHAR, VARCHAR, VARCHAR, VARCHAR)
107-
.row("id", "integer", "", "")
108-
.row("name", "varchar", "", "")
109-
.row("sex", "char", "", "")
110-
.row("state", "char", "", "")
107+
MaterializedResult expectedUnparametrizedVarchar = resultBuilder(getSession(), VARCHAR, VARCHAR, VARCHAR, VARCHAR, BIGINT, BIGINT, BIGINT)
108+
.row("id", "integer", "", "", 10L, null, null)
109+
.row("name", "varchar", "", "", null, null, 2147483647L)
110+
.row("sex", "char", "", "", null, null, 2147483647L)
111+
.row("state", "char", "", "", null, null, 2147483647L)
111112
.build();
112113

113-
MaterializedResult expectedParametrizedVarchar = resultBuilder(getSession(), VARCHAR, VARCHAR, VARCHAR, VARCHAR)
114-
.row("id", "integer", "", "")
115-
.row("name", "varchar(50)", "", "")
116-
.row("sex", "char(1)", "", "")
117-
.row("state", "char(5)", "", "")
114+
MaterializedResult expectedParametrizedVarchar = resultBuilder(getSession(), VARCHAR, VARCHAR, VARCHAR, VARCHAR, BIGINT, BIGINT, BIGINT)
115+
.row("id", "integer", "", "", 10L, null, null)
116+
.row("name", "varchar(50)", "", "", null, null, 50L)
117+
.row("sex", "char(1)", "", "", null, null, 1L)
118+
.row("state", "char(5)", "", "", null, null, 5L)
118119
.build();
119120

120121
assertTrue(actual.equals(expectedParametrizedVarchar) || actual.equals(expectedUnparametrizedVarchar),
@@ -149,9 +150,11 @@ public void testSelectTime()
149150
public void testDescribeUnknownTable()
150151
{
151152
MaterializedResult actualRows = computeActual("DESCRIBE information_schema.enabled_roles");
152-
MaterializedResult expectedRows = resultBuilder(getSession(), VARCHAR, VARCHAR, VARCHAR, VARCHAR)
153-
.row("role_name", "varchar", "", "")
153+
MaterializedResult expectedRows = resultBuilder(getSession(),
154+
VARCHAR, VARCHAR, VARCHAR, VARCHAR, BIGINT, BIGINT, BIGINT)
155+
.row("role_name", "varchar", "", "", null, null, 2147483647L)
154156
.build();
157+
155158
assertEquals(actualRows, expectedRows);
156159
}
157160

presto-cassandra/src/test/java/com/facebook/presto/cassandra/TestCassandraIntegrationSmokeTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -278,8 +278,8 @@ public void testUpperCaseNameUnescapedInCassandra()
278278
assertContainsEventually(() -> execute("SHOW TABLES FROM cassandra.keyspace_1"), resultBuilder(getSession(), createUnboundedVarcharType())
279279
.row("table_1")
280280
.build(), new Duration(1, MINUTES));
281-
assertContains(execute("SHOW COLUMNS FROM cassandra.keyspace_1.table_1"), resultBuilder(getSession(), createUnboundedVarcharType(), createUnboundedVarcharType(), createUnboundedVarcharType(), createUnboundedVarcharType())
282-
.row("column_1", "bigint", "", "")
281+
assertContains(execute("SHOW COLUMNS FROM cassandra.keyspace_1.table_1"), resultBuilder(getSession(), createUnboundedVarcharType(), createUnboundedVarcharType(), createUnboundedVarcharType(), createUnboundedVarcharType(), BIGINT, BIGINT, BIGINT)
282+
.row("column_1", "bigint", "", "", 10L, null, null)
283283
.build());
284284

285285
execute("INSERT INTO keyspace_1.table_1 (column_1) VALUES (1)");
@@ -308,8 +308,8 @@ public void testUppercaseNameEscaped()
308308
assertContainsEventually(() -> execute("SHOW TABLES FROM cassandra.keyspace_2"), resultBuilder(getSession(), createUnboundedVarcharType())
309309
.row("table_2")
310310
.build(), new Duration(1, MINUTES));
311-
assertContains(execute("SHOW COLUMNS FROM cassandra.keyspace_2.table_2"), resultBuilder(getSession(), createUnboundedVarcharType(), createUnboundedVarcharType(), createUnboundedVarcharType(), createUnboundedVarcharType())
312-
.row("column_2", "bigint", "", "")
311+
assertContains(execute("SHOW COLUMNS FROM cassandra.keyspace_2.table_2"), resultBuilder(getSession(), createUnboundedVarcharType(), createUnboundedVarcharType(), createUnboundedVarcharType(), createUnboundedVarcharType(), BIGINT, BIGINT, BIGINT)
312+
.row("column_2", "bigint", "", "", 10L, null, null)
313313
.build());
314314

315315
execute("INSERT INTO \"KEYSPACE_2\".\"TABLE_2\" (\"COLUMN_2\") VALUES (1)");

presto-hive/src/test/java/com/facebook/presto/hive/TestHiveIntegrationSmokeTest.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1905,7 +1905,7 @@ public void testShowColumnsFromPartitions()
19051905
assertQuery(
19061906
getSession(),
19071907
"SHOW COLUMNS FROM \"" + tableName + "$partitions\"",
1908-
"VALUES ('part1', 'bigint', '', ''), ('part2', 'varchar', '', '')");
1908+
"VALUES ('part1', 'bigint', '', '', 10L, null, null), ('part2', 'varchar', '', '', null, null, 2147483647L)");
19091909

19101910
assertQueryFails(
19111911
getSession(),
@@ -2120,15 +2120,15 @@ public void testShowColumnsPartitionKey()
21202120

21212121
MaterializedResult actual = computeActual("SHOW COLUMNS FROM test_show_columns_partition_key");
21222122
Type unboundedVarchar = canonicalizeType(VARCHAR);
2123-
MaterializedResult expected = resultBuilder(getSession(), unboundedVarchar, unboundedVarchar, unboundedVarchar, unboundedVarchar)
2124-
.row("grape", canonicalizeTypeName("bigint"), "", "")
2125-
.row("orange", canonicalizeTypeName("bigint"), "", "")
2126-
.row("pear", canonicalizeTypeName("varchar(65535)"), "", "")
2127-
.row("mango", canonicalizeTypeName("integer"), "", "")
2128-
.row("lychee", canonicalizeTypeName("smallint"), "", "")
2129-
.row("kiwi", canonicalizeTypeName("tinyint"), "", "")
2130-
.row("apple", canonicalizeTypeName("varchar"), "partition key", "")
2131-
.row("pineapple", canonicalizeTypeName("varchar(65535)"), "partition key", "")
2123+
MaterializedResult expected = resultBuilder(getSession(), unboundedVarchar, unboundedVarchar, unboundedVarchar, unboundedVarchar, BIGINT, BIGINT, BIGINT)
2124+
.row("grape", canonicalizeTypeName("bigint"), "", "", 10L, null, null)
2125+
.row("orange", canonicalizeTypeName("bigint"), "", "", 10L, null, null)
2126+
.row("pear", canonicalizeTypeName("varchar(65535)"), "", "", null, null, 65535L)
2127+
.row("mango", canonicalizeTypeName("integer"), "", "", 10L, null, null)
2128+
.row("lychee", canonicalizeTypeName("smallint"), "", "", 10L, null, null)
2129+
.row("kiwi", canonicalizeTypeName("tinyint"), "", "", 10L, null, null)
2130+
.row("apple", canonicalizeTypeName("varchar"), "partition key", "", null, null, 2147483647L)
2131+
.row("pineapple", canonicalizeTypeName("varchar(65535)"), "partition key", "", null, null, 65535L)
21322132
.build();
21332133
assertEquals(actual, expected);
21342134
}
@@ -3218,7 +3218,7 @@ public void testAddColumn()
32183218
assertUpdate("ALTER TABLE test_add_column ADD COLUMN b bigint COMMENT 'test comment BBB'");
32193219
assertQueryFails("ALTER TABLE test_add_column ADD COLUMN a varchar", ".* Column 'a' already exists");
32203220
assertQueryFails("ALTER TABLE test_add_column ADD COLUMN c bad_type", ".* Unknown type 'bad_type' for column 'c'");
3221-
assertQuery("SHOW COLUMNS FROM test_add_column", "VALUES ('a', 'bigint', '', 'test comment AAA'), ('b', 'bigint', '', 'test comment BBB')");
3221+
assertQuery("SHOW COLUMNS FROM test_add_column", "VALUES ('a', 'bigint', '', 'test comment AAA', 10, NULL, NULL), ('b', 'bigint', '', 'test comment BBB', 10, NULL, NULL)");
32223222
assertUpdate("DROP TABLE test_add_column");
32233223
}
32243224

presto-hive/src/test/java/com/facebook/presto/hive/hudi/TestHudiIntegration.java

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import static com.facebook.presto.hive.hudi.HudiTestingDataGenerator.HUDI_META_COLUMNS;
3535
import static com.facebook.presto.hive.hudi.HudiTestingDataGenerator.PARTITION_COLUMNS;
3636
import static java.lang.String.format;
37+
import static java.util.Locale.ENGLISH;
3738

3839
public class TestHudiIntegration
3940
extends AbstractTestQueryFramework
@@ -151,10 +152,36 @@ public void testQueryOnUnavailablePartition()
151152
private static String generateDescribeIdenticalQuery(TypeManager typeManager, List<Column> metaColumns, List<Column> dataColumns, List<Column> partitionColumns)
152153
{
153154
Stream<String> regularRows = Streams.concat(metaColumns.stream(), dataColumns.stream())
154-
.map(column -> format("('%s', '%s', '', '')", column.getName(), column.getType().getType(typeManager).getDisplayName()));
155+
.map(column -> {
156+
return format("('%s', '%s', '', '', %s, NULL, %s)", column.getName(), column.getType().getType(typeManager).getDisplayName(),
157+
getColumnSize(column.getType().getType(typeManager).getDisplayName()),
158+
(column.getType().getType(typeManager).getDisplayName()).toLowerCase(ENGLISH).equals("varchar") ? "2147483647" : "NULL");
159+
});
160+
155161
Stream<String> partitionRows = partitionColumns.stream()
156-
.map(column -> format("('%s', '%s', 'partition key', '')", column.getName(), column.getType().getType(typeManager).getDisplayName()));
157-
String rows = Streams.concat(regularRows, partitionRows).collect(Collectors.joining(","));
162+
.map(column -> {
163+
return format("('%s', '%s', 'partition key', '', %s, NULL, %s)", column.getName(),
164+
column.getType().getType(typeManager).getDisplayName(),
165+
getColumnSize(column.getType().getType(typeManager).getDisplayName()),
166+
(column.getType().getType(typeManager).getDisplayName()).toLowerCase(ENGLISH).equals("varchar") ? "2147483647" : "NULL");
167+
});
168+
169+
String rows = Streams.concat(regularRows, partitionRows)
170+
.collect(Collectors.joining(", "));
171+
158172
return "SELECT * FROM VALUES " + rows;
159173
}
174+
175+
private static String getColumnSize(String type)
176+
{
177+
switch (type.toLowerCase(ENGLISH)) {
178+
case "bigint":
179+
case "integer":
180+
return "10";
181+
case "double":
182+
return "2";
183+
default:
184+
return "NULL";
185+
}
186+
}
160187
}

presto-iceberg/src/test/java/com/facebook/presto/iceberg/IcebergDistributedSmokeTestBase.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
import java.util.function.BiConsumer;
5353

5454
import static com.facebook.presto.SystemSessionProperties.LEGACY_TIMESTAMP;
55+
import static com.facebook.presto.common.type.BigintType.BIGINT;
5556
import static com.facebook.presto.common.type.TimeZoneKey.UTC_KEY;
5657
import static com.facebook.presto.common.type.VarcharType.VARCHAR;
5758
import static com.facebook.presto.iceberg.CatalogType.HADOOP;
@@ -133,16 +134,16 @@ public void testTime()
133134
@Override
134135
public void testDescribeTable()
135136
{
136-
MaterializedResult expectedColumns = resultBuilder(getQueryRunner().getDefaultSession(), VARCHAR, VARCHAR, VARCHAR, VARCHAR)
137-
.row("orderkey", "bigint", "", "")
138-
.row("custkey", "bigint", "", "")
139-
.row("orderstatus", "varchar", "", "")
140-
.row("totalprice", "double", "", "")
141-
.row("orderdate", "date", "", "")
142-
.row("orderpriority", "varchar", "", "")
143-
.row("clerk", "varchar", "", "")
144-
.row("shippriority", "integer", "", "")
145-
.row("comment", "varchar", "", "")
137+
MaterializedResult expectedColumns = resultBuilder(getQueryRunner().getDefaultSession(), VARCHAR, VARCHAR, VARCHAR, VARCHAR, BIGINT, BIGINT, BIGINT)
138+
.row("orderkey", "bigint", "", "", 10L, null, null)
139+
.row("custkey", "bigint", "", "", 10L, null, null)
140+
.row("orderstatus", "varchar", "", "", null, null, 2147483647L)
141+
.row("totalprice", "double", "", "", 2L, null, null)
142+
.row("orderdate", "date", "", "", null, null, null)
143+
.row("orderpriority", "varchar", "", "", null, null, 2147483647L)
144+
.row("clerk", "varchar", "", "", null, null, 2147483647L)
145+
.row("shippriority", "integer", "", "", 10L, null, null)
146+
.row("comment", "varchar", "", "", null, null, 2147483647L)
146147
.build();
147148
MaterializedResult actualColumns = computeActual("DESCRIBE orders");
148149
Assert.assertEquals(actualColumns, expectedColumns);
@@ -668,12 +669,12 @@ public void testColumnComments()
668669
assertUpdate(session, "CREATE TABLE test_column_comments (_bigint BIGINT COMMENT 'test column comment')");
669670

670671
assertQuery(session, "SHOW COLUMNS FROM test_column_comments",
671-
"VALUES ('_bigint', 'bigint', '', 'test column comment')");
672+
"VALUES ('_bigint', 'bigint', '', 'test column comment', 10L, null, null)");
672673

673674
assertUpdate("ALTER TABLE test_column_comments ADD COLUMN _varchar VARCHAR COMMENT 'test new column comment'");
674675
assertQuery(
675676
"SHOW COLUMNS FROM test_column_comments",
676-
"VALUES ('_bigint', 'bigint', '', 'test column comment'), ('_varchar', 'varchar', '', 'test new column comment')");
677+
"VALUES ('_bigint', 'bigint', '', 'test column comment', 10L, null, null), ('_varchar', 'varchar', '', 'test new column comment', null, null, 2147483647L)");
677678

678679
dropTable(session, "test_column_comments");
679680
}

presto-iceberg/src/test/java/com/facebook/presto/iceberg/IcebergDistributedTestBase.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -535,10 +535,10 @@ public void testShowColumnsForPartitionedTable()
535535

536536
MaterializedResult actual = computeActual("SHOW COLUMNS FROM show_columns_only_identity_partition");
537537

538-
MaterializedResult expectedParametrizedVarchar = resultBuilder(getSession(), VARCHAR, VARCHAR, VARCHAR, VARCHAR)
539-
.row("id", "integer", "", "")
540-
.row("name", "varchar", "", "")
541-
.row("team", "varchar", "partition key", "")
538+
MaterializedResult expectedParametrizedVarchar = resultBuilder(getSession(), VARCHAR, VARCHAR, VARCHAR, VARCHAR, BIGINT, BIGINT, BIGINT)
539+
.row("id", "integer", "", "", 10L, null, null)
540+
.row("name", "varchar", "", "", null, null, 2147483647L)
541+
.row("team", "varchar", "partition key", "", null, null, 2147483647L)
542542
.build();
543543

544544
assertEquals(actual, expectedParametrizedVarchar);
@@ -551,10 +551,10 @@ public void testShowColumnsForPartitionedTable()
551551

552552
actual = computeActual("SHOW COLUMNS FROM show_columns_with_non_identity_partition");
553553

554-
expectedParametrizedVarchar = resultBuilder(getSession(), VARCHAR, VARCHAR, VARCHAR, VARCHAR)
555-
.row("id", "integer", "", "")
556-
.row("name", "varchar", "", "")
557-
.row("team", "varchar", "partition by truncate[1], identity", "")
554+
expectedParametrizedVarchar = resultBuilder(getSession(), VARCHAR, VARCHAR, VARCHAR, VARCHAR, BIGINT, BIGINT, BIGINT)
555+
.row("id", "integer", "", "", 10L, null, null)
556+
.row("name", "varchar", "", "", null, null, 2147483647L)
557+
.row("team", "varchar", "partition by truncate[1], identity", "", null, null, 2147483647L)
558558
.build();
559559

560560
assertEquals(actual, expectedParametrizedVarchar);

presto-iceberg/src/test/java/com/facebook/presto/iceberg/TestIcebergMetadataListing.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ public void testTableColumnListing()
119119
@Test
120120
public void testTableDescribing()
121121
{
122-
assertQuery("DESCRIBE iceberg.test_schema.iceberg_table1", "VALUES ('_string', 'varchar', '', ''), ('_integer', 'integer', '', '')");
122+
assertQuery("DESCRIBE iceberg.test_schema.iceberg_table1", "VALUES ('_string', 'varchar', '', '', null, null, 2147483647L), ('_integer', 'integer', '', '', 10l, null, null)");
123123
}
124124

125125
/*

0 commit comments

Comments
 (0)