Skip to content

Commit bbf31c3

Browse files
authored
Merge pull request #1283 from Kotlin/readAllSqlTables-duckdb-fix2
Adds `tableTypes` to `DbType`
2 parents f9f98b4 + 4f1ce74 commit bbf31c3

File tree

3 files changed

+22
-4
lines changed

3 files changed

+22
-4
lines changed

dataframe-jdbc/api/dataframe-jdbc.api

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ public abstract class org/jetbrains/kotlinx/dataframe/io/db/DbType {
122122
public abstract fun convertSqlTypeToKType (Lorg/jetbrains/kotlinx/dataframe/io/TableColumnMetadata;)Lkotlin/reflect/KType;
123123
public final fun getDbTypeInJdbcUrl ()Ljava/lang/String;
124124
public abstract fun getDriverClassName ()Ljava/lang/String;
125+
public fun getTableTypes ()Ljava/util/List;
125126
public abstract fun isSystemTable (Lorg/jetbrains/kotlinx/dataframe/io/TableMetadata;)Z
126127
public fun sqlQueryLimit (Ljava/lang/String;I)Ljava/lang/String;
127128
public static synthetic fun sqlQueryLimit$default (Lorg/jetbrains/kotlinx/dataframe/io/db/DbType;Ljava/lang/String;IILjava/lang/Object;)Ljava/lang/String;

dataframe-jdbc/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/db/DbType.kt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ package org.jetbrains.kotlinx.dataframe.io.db
22

33
import org.jetbrains.kotlinx.dataframe.io.TableColumnMetadata
44
import org.jetbrains.kotlinx.dataframe.io.TableMetadata
5+
import org.jetbrains.kotlinx.dataframe.io.getSchemaForAllSqlTables
6+
import org.jetbrains.kotlinx.dataframe.io.readAllSqlTables
57
import org.jetbrains.kotlinx.dataframe.schema.ColumnSchema
8+
import java.sql.DatabaseMetaData
69
import java.sql.ResultSet
710
import kotlin.reflect.KType
811

@@ -21,6 +24,19 @@ public abstract class DbType(public val dbTypeInJdbcUrl: String) {
2124
*/
2225
public abstract val driverClassName: String
2326

27+
/**
28+
* The table type(s) (`TABLE_TYPE`) of ordinary tables in the SQL database, used by
29+
* [getSchemaForAllSqlTables], and [readAllSqlTables] as a filter when querying the database
30+
* for all the tables it has using [DatabaseMetaData.getTables].
31+
*
32+
* This is usually "TABLE" or "BASE TABLE", which is what [tableTypes] is set to by default,
33+
* but it can be overridden to any custom list of table types, or `null` to let the JDBC integration
34+
* return all types of tables.
35+
*
36+
* See [DatabaseMetaData.getTableTypes] for all supported table types of your specific database.
37+
*/
38+
public open val tableTypes: List<String>? = listOf("TABLE", "BASE TABLE")
39+
2440
/**
2541
* Returns a [ColumnSchema] produced from [tableColumnMetadata].
2642
*/

dataframe-jdbc/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/readJdbc.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -808,8 +808,9 @@ public fun DataFrame.Companion.readAllSqlTables(
808808
val metaData = connection.metaData
809809
val determinedDbType = dbType ?: extractDBTypeFromConnection(connection)
810810

811-
// exclude a system and other tables without data, but it looks like it is supported badly for many databases
812-
val tables = metaData.getTables(catalogue, null, null, arrayOf("TABLE"))
811+
// exclude system- and other tables without data (it looks like it is supported badly for many databases)
812+
val tableTypes = determinedDbType.tableTypes?.toTypedArray()
813+
val tables = metaData.getTables(catalogue, null, null, tableTypes)
813814

814815
val dataFrames = mutableMapOf<String, AnyFrame>()
815816

@@ -1060,8 +1061,8 @@ public fun DataFrame.Companion.getSchemaForAllSqlTables(
10601061
val metaData = connection.metaData
10611062
val determinedDbType = dbType ?: extractDBTypeFromConnection(connection)
10621063

1063-
val tableTypes = arrayOf("TABLE")
1064-
// exclude a system and other tables without data
1064+
// exclude system- and other tables without data
1065+
val tableTypes = determinedDbType.tableTypes?.toTypedArray()
10651066
val tables = metaData.getTables(null, null, null, tableTypes)
10661067

10671068
val dataFrameSchemas = mutableMapOf<String, DataFrameSchema>()

0 commit comments

Comments
 (0)