Skip to content

Commit 69ac5c1

Browse files
committed
Alternative fix for #1282 which adds tableTypes to DbType
1 parent 62b4894 commit 69ac5c1

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
@@ -120,6 +120,7 @@ public abstract class org/jetbrains/kotlinx/dataframe/io/db/DbType {
120120
public abstract fun convertSqlTypeToKType (Lorg/jetbrains/kotlinx/dataframe/io/TableColumnMetadata;)Lkotlin/reflect/KType;
121121
public final fun getDbTypeInJdbcUrl ()Ljava/lang/String;
122122
public abstract fun getDriverClassName ()Ljava/lang/String;
123+
public fun getTableTypes ()Ljava/util/List;
123124
public abstract fun isSystemTable (Lorg/jetbrains/kotlinx/dataframe/io/TableMetadata;)Z
124125
public fun sqlQueryLimit (Ljava/lang/String;I)Ljava/lang/String;
125126
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
@@ -642,8 +642,9 @@ public fun DataFrame.Companion.readAllSqlTables(
642642
val metaData = connection.metaData
643643
val determinedDbType = dbType ?: extractDBTypeFromConnection(connection)
644644

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

648649
val dataFrames = mutableMapOf<String, AnyFrame>()
649650

@@ -861,8 +862,8 @@ public fun DataFrame.Companion.getSchemaForAllSqlTables(
861862
val metaData = connection.metaData
862863
val determinedDbType = dbType ?: extractDBTypeFromConnection(connection)
863864

864-
val tableTypes = arrayOf("TABLE")
865-
// exclude a system and other tables without data
865+
// exclude system- and other tables without data
866+
val tableTypes = determinedDbType.tableTypes?.toTypedArray()
866867
val tables = metaData.getTables(null, null, null, tableTypes)
867868

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

0 commit comments

Comments
 (0)