Skip to content

Commit aca4306

Browse files
committed
adjusted getSchemaForAllSqlTables too
1 parent bd567ff commit aca4306

File tree

2 files changed

+34
-8
lines changed

2 files changed

+34
-8
lines changed

dataframe-jdbc/api/dataframe-jdbc.api

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@ public final class org/jetbrains/kotlinx/dataframe/io/ReadJdbcKt {
3737
public static final fun getDataFrameSchema (Lorg/jetbrains/kotlinx/dataframe/io/DbConnectionConfig;Ljava/lang/String;Lorg/jetbrains/kotlinx/dataframe/io/db/DbType;)Lorg/jetbrains/kotlinx/dataframe/schema/DataFrameSchema;
3838
public static synthetic fun getDataFrameSchema$default (Ljava/sql/Connection;Ljava/lang/String;Lorg/jetbrains/kotlinx/dataframe/io/db/DbType;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/schema/DataFrameSchema;
3939
public static synthetic fun getDataFrameSchema$default (Lorg/jetbrains/kotlinx/dataframe/io/DbConnectionConfig;Ljava/lang/String;Lorg/jetbrains/kotlinx/dataframe/io/db/DbType;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/schema/DataFrameSchema;
40-
public static final fun getSchemaForAllSqlTables (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Ljava/sql/Connection;Lorg/jetbrains/kotlinx/dataframe/io/db/DbType;)Ljava/util/Map;
41-
public static final fun getSchemaForAllSqlTables (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Lorg/jetbrains/kotlinx/dataframe/io/DbConnectionConfig;Lorg/jetbrains/kotlinx/dataframe/io/db/DbType;)Ljava/util/Map;
42-
public static synthetic fun getSchemaForAllSqlTables$default (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Ljava/sql/Connection;Lorg/jetbrains/kotlinx/dataframe/io/db/DbType;ILjava/lang/Object;)Ljava/util/Map;
43-
public static synthetic fun getSchemaForAllSqlTables$default (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Lorg/jetbrains/kotlinx/dataframe/io/DbConnectionConfig;Lorg/jetbrains/kotlinx/dataframe/io/db/DbType;ILjava/lang/Object;)Ljava/util/Map;
40+
public static final fun getSchemaForAllSqlTables (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Ljava/sql/Connection;Lorg/jetbrains/kotlinx/dataframe/io/db/DbType;Ljava/util/List;)Ljava/util/Map;
41+
public static final fun getSchemaForAllSqlTables (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Lorg/jetbrains/kotlinx/dataframe/io/DbConnectionConfig;Lorg/jetbrains/kotlinx/dataframe/io/db/DbType;Ljava/util/List;)Ljava/util/Map;
42+
public static synthetic fun getSchemaForAllSqlTables$default (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Ljava/sql/Connection;Lorg/jetbrains/kotlinx/dataframe/io/db/DbType;Ljava/util/List;ILjava/lang/Object;)Ljava/util/Map;
43+
public static synthetic fun getSchemaForAllSqlTables$default (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Lorg/jetbrains/kotlinx/dataframe/io/DbConnectionConfig;Lorg/jetbrains/kotlinx/dataframe/io/db/DbType;Ljava/util/List;ILjava/lang/Object;)Ljava/util/Map;
4444
public static final fun getSchemaForResultSet (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Ljava/sql/ResultSet;Lorg/jetbrains/kotlinx/dataframe/io/db/DbType;)Lorg/jetbrains/kotlinx/dataframe/schema/DataFrameSchema;
4545
public static final fun getSchemaForSqlQuery (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Ljava/sql/Connection;Ljava/lang/String;Lorg/jetbrains/kotlinx/dataframe/io/db/DbType;)Lorg/jetbrains/kotlinx/dataframe/schema/DataFrameSchema;
4646
public static final fun getSchemaForSqlQuery (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Lorg/jetbrains/kotlinx/dataframe/io/DbConnectionConfig;Ljava/lang/String;Lorg/jetbrains/kotlinx/dataframe/io/db/DbType;)Lorg/jetbrains/kotlinx/dataframe/schema/DataFrameSchema;

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

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -862,14 +862,17 @@ public fun ResultSet.getDataFrameSchema(dbType: DbType): DataFrameSchema = DataF
862862
* @param [dbConfig] the database configuration to connect to the database, including URL, user, and password.
863863
* @param [dbType] the type of database, could be a custom object, provided by user, optional, default is `null`,
864864
* in that case the [dbType] will be recognized from the [dbConfig].
865+
* @param [tableTypes] an optional list of table types, which must be from the list of table types
866+
* returned from [DatabaseMetaData.getTableTypes]; `null` returns all types. By default, it's `["TABLE", "BASE TABLE"]`.
865867
* @return a map of [String, DataFrameSchema] objects representing the table name and its schema for each non-system table.
866868
*/
867869
public fun DataFrame.Companion.getSchemaForAllSqlTables(
868870
dbConfig: DbConnectionConfig,
869871
dbType: DbType? = null,
872+
tableTypes: List<String>? = listOf("TABLE", "BASE TABLE"),
870873
): Map<String, DataFrameSchema> {
871874
DriverManager.getConnection(dbConfig.url, dbConfig.user, dbConfig.password).use { connection ->
872-
return getSchemaForAllSqlTables(connection, dbType)
875+
return getSchemaForAllSqlTables(connection, dbType, tableTypes)
873876
}
874877
}
875878

@@ -879,18 +882,20 @@ public fun DataFrame.Companion.getSchemaForAllSqlTables(
879882
* @param [connection] the database connection.
880883
* @param [dbType] the type of database, could be a custom object, provided by user, optional, default is `null`,
881884
* in that case the [dbType] will be recognized from the [connection].
885+
* @param [tableTypes] an optional list of table types, which must be from the list of table types
886+
* returned from [DatabaseMetaData.getTableTypes]; `null` returns all types. By default, it's `["TABLE", "BASE TABLE"]`.
882887
* @return a map of [String, DataFrameSchema] objects representing the table name and its schema for each non-system table.
883888
*/
884889
public fun DataFrame.Companion.getSchemaForAllSqlTables(
885890
connection: Connection,
886891
dbType: DbType? = null,
892+
tableTypes: List<String>? = listOf("TABLE", "BASE TABLE"),
887893
): Map<String, DataFrameSchema> {
888894
val metaData = connection.metaData
889895
val determinedDbType = dbType ?: extractDBTypeFromConnection(connection)
890896

891-
val tableTypes = arrayOf("TABLE")
892-
// exclude a system and other tables without data
893-
val tables = metaData.getTables(null, null, null, tableTypes)
897+
// exclude system- and other tables without data
898+
val tables = metaData.getTables(null, null, null, tableTypes?.toTypedArray())
894899

895900
val dataFrameSchemas = mutableMapOf<String, DataFrameSchema>()
896901

@@ -904,6 +909,27 @@ public fun DataFrame.Companion.getSchemaForAllSqlTables(
904909
}
905910
}
906911

912+
// We may have no tables or filtered for the wrong table type, let's give a helpful error message
913+
if (dataFrameSchemas.isEmpty()) {
914+
val supportedTableTypes = metaData.tableTypes.let {
915+
buildList { while (it.next()) add(it.getString("TABLE_TYPE")) }
916+
}
917+
if (tableTypes?.any { it !in supportedTableTypes } == true) {
918+
val unsupportedTypes = tableTypes.filter { it !in supportedTableTypes }
919+
throw IllegalArgumentException(
920+
buildString {
921+
appendLine("Found no tables with type(s) $tableTypes.")
922+
if (unsupportedTypes.isNotEmpty()) {
923+
appendLine(
924+
"Table type(s) $unsupportedTypes are unsupported for ${determinedDbType::class.simpleName}.",
925+
)
926+
}
927+
appendLine("If this is unexpected, try adjusting `tableTypes=` to any of $supportedTableTypes.")
928+
},
929+
)
930+
}
931+
}
932+
907933
return dataFrameSchemas
908934
}
909935

0 commit comments

Comments
 (0)