Skip to content

Adds tableTypes to DbType #1283

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions dataframe-jdbc/api/dataframe-jdbc.api
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ public abstract class org/jetbrains/kotlinx/dataframe/io/db/DbType {
public abstract fun convertSqlTypeToKType (Lorg/jetbrains/kotlinx/dataframe/io/TableColumnMetadata;)Lkotlin/reflect/KType;
public final fun getDbTypeInJdbcUrl ()Ljava/lang/String;
public abstract fun getDriverClassName ()Ljava/lang/String;
public fun getTableTypes ()Ljava/util/List;
public abstract fun isSystemTable (Lorg/jetbrains/kotlinx/dataframe/io/TableMetadata;)Z
public fun sqlQueryLimit (Ljava/lang/String;I)Ljava/lang/String;
public static synthetic fun sqlQueryLimit$default (Lorg/jetbrains/kotlinx/dataframe/io/db/DbType;Ljava/lang/String;IILjava/lang/Object;)Ljava/lang/String;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@ package org.jetbrains.kotlinx.dataframe.io.db

import org.jetbrains.kotlinx.dataframe.io.TableColumnMetadata
import org.jetbrains.kotlinx.dataframe.io.TableMetadata
import org.jetbrains.kotlinx.dataframe.io.getSchemaForAllSqlTables
import org.jetbrains.kotlinx.dataframe.io.readAllSqlTables
import org.jetbrains.kotlinx.dataframe.schema.ColumnSchema
import java.sql.DatabaseMetaData
import java.sql.ResultSet
import kotlin.reflect.KType

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

/**
* The table type(s) (`TABLE_TYPE`) of ordinary tables in the SQL database, used by
* [getSchemaForAllSqlTables], and [readAllSqlTables] as a filter when querying the database
* for all the tables it has using [DatabaseMetaData.getTables].
*
* This is usually "TABLE" or "BASE TABLE", which is what [tableTypes] is set to by default,
* but it can be overridden to any custom list of table types, or `null` to let the JDBC integration
* return all types of tables.
*
* See [DatabaseMetaData.getTableTypes] for all supported table types of your specific database.
*/
public open val tableTypes: List<String>? = listOf("TABLE", "BASE TABLE")

/**
* Returns a [ColumnSchema] produced from [tableColumnMetadata].
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -642,8 +642,9 @@ public fun DataFrame.Companion.readAllSqlTables(
val metaData = connection.metaData
val determinedDbType = dbType ?: extractDBTypeFromConnection(connection)

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

val dataFrames = mutableMapOf<String, AnyFrame>()

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

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

val dataFrameSchemas = mutableMapOf<String, DataFrameSchema>()
Expand Down