Skip to content

Commit d21dc79

Browse files
committed
converted DuckDb to new preprocessing DbType. Turns out I might need recursive preprocessing
1 parent 210af02 commit d21dc79

File tree

7 files changed

+220
-264
lines changed

7 files changed

+220
-264
lines changed

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

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,15 @@ public typealias AnyDbColumnTypeInformation = DbColumnTypeInformation<*, *, *>
1818
* to a [org.jetbrains.kotlinx.dataframe.DataColumn] of with values of type [P].
1919
*/
2020
public open class DbColumnTypeInformation<J, D, P>(
21-
public open val columnMetadata: TableColumnMetadata,
2221
public open val targetSchema: ColumnSchema,
2322
public open val valuePreprocessor: DbValuePreprocessor<J, D>?,
2423
public open val columnPostprocessor: DbColumnPostprocessor<D, P>?,
2524
) {
26-
public open fun preprocess(value: J): D {
25+
public open fun preprocess(value: J?): D? {
2726
valuePreprocessor?.let { valuePreprocessor ->
2827
return valuePreprocessor.preprocess(value, this)
2928
}
30-
return value as D
29+
return value as D?
3130
}
3231

3332
public open fun postprocess(column: DataColumn<D>): DataColumn<P> {
@@ -41,49 +40,39 @@ public open class DbColumnTypeInformation<J, D, P>(
4140
public fun <J, D, P> DbColumnTypeInformation<*, *, *>.cast(): DbColumnTypeInformation<J, D, P> =
4241
this as DbColumnTypeInformation<J, D, P>
4342

44-
public fun <T> dbColumnTypeInformation(
45-
columnMetadata: TableColumnMetadata,
46-
targetSchema: ColumnSchema,
47-
): DbColumnTypeInformation<T, T, T> =
43+
public fun <T> dbColumnTypeInformation(targetSchema: ColumnSchema): DbColumnTypeInformation<T, T, T> =
4844
DbColumnTypeInformation(
49-
columnMetadata = columnMetadata,
5045
targetSchema = targetSchema,
5146
valuePreprocessor = null,
5247
columnPostprocessor = null,
5348
)
5449

5550
public fun <J, D> dbColumnTypeInformationWithPreprocessing(
56-
columnMetadata: TableColumnMetadata,
5751
targetSchema: ColumnSchema,
5852
valuePreprocessor: DbValuePreprocessor<J, D>?,
5953
): DbColumnTypeInformation<J, D, D> =
6054
DbColumnTypeInformation(
61-
columnMetadata = columnMetadata,
6255
targetSchema = targetSchema,
6356
valuePreprocessor = valuePreprocessor,
6457
columnPostprocessor = null,
6558
)
6659

6760
public fun <J, P> dbColumnTypeInformationWithPostprocessing(
68-
columnMetadata: TableColumnMetadata,
6961
targetSchema: ColumnSchema,
7062
columnPostprocessor: DbColumnPostprocessor<J, P>?,
7163
): DbColumnTypeInformation<J, J, P> =
7264
DbColumnTypeInformation(
73-
columnMetadata = columnMetadata,
7465
targetSchema = targetSchema,
7566
valuePreprocessor = null,
7667
columnPostprocessor = columnPostprocessor,
7768
)
7869

7970
public fun <J, D, P> dbColumnTypeInformation(
80-
columnMetadata: TableColumnMetadata,
8171
targetSchema: ColumnSchema,
8272
valuePreprocessor: DbValuePreprocessor<J, D>?,
8373
columnPostprocessor: DbColumnPostprocessor<D, P>?,
8474
): DbColumnTypeInformation<J, D, P> =
8575
DbColumnTypeInformation(
86-
columnMetadata = columnMetadata,
8776
targetSchema = targetSchema,
8877
valuePreprocessor = valuePreprocessor,
8978
columnPostprocessor = columnPostprocessor,
@@ -108,9 +97,9 @@ public fun interface DbValuePreprocessor<in J, out D> {
10897
* return a [org.jetbrains.kotlinx.dataframe.DataFrame] here.
10998
*/
11099
public fun preprocess(
111-
jdbcValue: J,
100+
jdbcValue: J?,
112101
dbColumnTypeInformation: DbColumnTypeInformation<@UnsafeVariance J, @UnsafeVariance D, *>,
113-
): D
102+
): D?
114103
}
115104

116105
public fun <J, D> DbValuePreprocessor<*, *>.cast(): DbValuePreprocessor<J, D> = this as DbValuePreprocessor<J, D>

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,6 @@ public abstract class DbType(public val dbTypeInJdbcUrl: String) {
183183
}
184184

185185
return dbColumnTypeInformationWithPostprocessing<Any?, Any?>(
186-
columnMetadata = tableColumnMetadata,
187186
targetSchema = ColumnSchema.Value(kType.withNullability(tableColumnMetadata.isNullable)),
188187
columnPostprocessor = postprocessor?.cast(),
189188
)
@@ -211,9 +210,9 @@ public abstract class DbType(public val dbTypeInJdbcUrl: String) {
211210
} as J
212211

213212
public fun <J, D> preprocessValuesFromResultSet(
214-
value: J,
213+
value: J?,
215214
dbColumnTypeInformation: DbColumnTypeInformation<J, D, *>,
216-
): D = dbColumnTypeInformation.preprocess(value)
215+
): D? = dbColumnTypeInformation.preprocess(value)
217216

218217
public open fun <D> buildDataColumn(
219218
name: String,

0 commit comments

Comments
 (0)