Skip to content

Commit d08c27e

Browse files
Fix duplicate TABLE_TYPE listing for view from system.jdbc.tables
1 parent ddb5bae commit d08c27e

File tree

2 files changed

+47
-6
lines changed

2 files changed

+47
-6
lines changed

presto-jdbc/src/test/java/com/facebook/presto/jdbc/TestJdbcConnection.java

+35
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,41 @@ public void testResetAutoCommit()
187187
}
188188
}
189189

190+
@Test
191+
public void testTableType()
192+
throws SQLException
193+
{
194+
try (Connection connection = createConnection()) {
195+
assertThat(connection.getCatalog()).isEqualTo("hive");
196+
assertThat(connection.getSchema()).isEqualTo("default");
197+
198+
try (Statement statement = connection.createStatement()) {
199+
statement.execute("CREATE TABLE test_table_type (x bigint)");
200+
statement.execute("CREATE VIEW table_type_view AS SELECT * FROM test_table_type");
201+
ResultSet rs = statement.executeQuery("SELECT TABLE_NAME, TABLE_TYPE FROM system.jdbc.tables WHERE TABLE_SCHEM = 'default' AND TABLE_NAME = 'table_type_view'");
202+
int rowCount = 0;
203+
while (rs.next()) {
204+
assertEquals(rs.getString("TABLE_NAME"), "table_type_view");
205+
assertEquals(rs.getString("TABLE_TYPE"), "VIEW");
206+
rowCount++;
207+
}
208+
assertEquals(rowCount, 1);
209+
210+
rowCount = 0;
211+
rs = statement.executeQuery("SELECT TABLE_NAME, TABLE_TYPE FROM system.jdbc.tables WHERE TABLE_SCHEM = 'default' AND TABLE_NAME = 'test_table_type'");
212+
while (rs.next()) {
213+
assertEquals(rs.getString("TABLE_NAME"), "test_table_type");
214+
assertEquals(rs.getString("TABLE_TYPE"), "TABLE");
215+
rowCount++;
216+
}
217+
assertEquals(rowCount, 1);
218+
219+
statement.execute("DROP TABLE test_table_type");
220+
statement.execute("DROP VIEW table_type_view");
221+
}
222+
}
223+
}
224+
190225
@Test
191226
public void testRollback()
192227
throws SQLException

presto-main/src/main/java/com/facebook/presto/connector/system/jdbc/TableJdbcTable.java

+12-6
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,12 @@
2525
import com.facebook.presto.spi.SchemaTableName;
2626
import com.facebook.presto.spi.connector.ConnectorTransactionHandle;
2727
import com.facebook.presto.spi.security.AccessControl;
28+
import com.google.common.collect.ImmutableSet;
2829

2930
import javax.inject.Inject;
3031

3132
import java.util.Optional;
33+
import java.util.Set;
3234

3335
import static com.facebook.presto.common.type.VarcharType.createUnboundedVarcharType;
3436
import static com.facebook.presto.connector.system.SystemConnectorSessionUtil.toSession;
@@ -88,15 +90,19 @@ public RecordCursor cursor(ConnectorTransactionHandle transactionHandle, Connect
8890
for (String catalog : filter(listCatalogs(session, metadata, accessControl).keySet(), catalogFilter)) {
8991
QualifiedTablePrefix prefix = tablePrefix(catalog, schemaFilter, tableFilter);
9092

91-
if (FilterUtil.emptyOrEquals(typeFilter, "TABLE")) {
92-
for (SchemaTableName name : listTables(session, metadata, accessControl, prefix)) {
93-
table.addRow(tableRow(catalog, name, "TABLE"));
93+
Set<SchemaTableName> views = ImmutableSet.of();
94+
if (FilterUtil.emptyOrEquals(typeFilter, "VIEW")) {
95+
views = ImmutableSet.copyOf(listViews(session, metadata, accessControl, prefix));
96+
for (SchemaTableName name : views) {
97+
table.addRow(tableRow(catalog, name, "VIEW"));
9498
}
9599
}
96100

97-
if (FilterUtil.emptyOrEquals(typeFilter, "VIEW")) {
98-
for (SchemaTableName name : listViews(session, metadata, accessControl, prefix)) {
99-
table.addRow(tableRow(catalog, name, "VIEW"));
101+
if (FilterUtil.emptyOrEquals(typeFilter, "TABLE")) {
102+
for (SchemaTableName name : listTables(session, metadata, accessControl, prefix)) {
103+
if (!views.contains(name)) {
104+
table.addRow(tableRow(catalog, name, "TABLE"));
105+
}
100106
}
101107
}
102108
}

0 commit comments

Comments
 (0)