Skip to content

Commit e3a115b

Browse files
committed
3rd attempt, now with different return-type, similar to the first dfs-rename branch.
1 parent 2d08793 commit e3a115b

File tree

32 files changed

+328
-570
lines changed

32 files changed

+328
-570
lines changed

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/ColumnsSelectionDsl.kt

Lines changed: 51 additions & 76 deletions
Large diffs are not rendered by default.

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/join.kt

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,13 +108,6 @@ public class ColumnMatch<C>(public val left: ColumnReference<C>, public val righ
108108
override fun resolve(context: ColumnResolutionContext): List<ColumnWithPath<C>> {
109109
throw UnsupportedOperationException()
110110
}
111-
112-
override fun resolveAfterTransform(
113-
context: ColumnResolutionContext,
114-
transformer: ColumnSetTransformer,
115-
): List<ColumnWithPath<C>> {
116-
throw UnsupportedOperationException()
117-
}
118111
}
119112

120113
public typealias JoinColumnsSelector<A, B> = JoinDsl<A, B>.(ColumnsContainer<A>) -> ColumnSet<*>

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/columns/ColumnSet.kt

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,31 @@ public interface ColumnSet<out C> {
1919
* the current [ColumnSet] result.
2020
*/
2121
public fun resolve(context: ColumnResolutionContext): List<ColumnWithPath<C>>
22+
}
2223

23-
/**
24-
* Resolves this [ColumnSet] as a [List]<[ColumnWithPath]<[C]>> after applying [transformer] to the parent
25-
* [ColumnSet]. This essentially injects a call right before the current in the [ColumnSet.resolve] chain.
26-
*/
27-
public fun resolveAfterTransform(
24+
public interface ColumnSetWithRecursively<out C> : ColumnSet<C> {
25+
26+
public fun resolveRecursively(
2827
context: ColumnResolutionContext,
29-
transformer: ColumnSetTransformer,
28+
includeGroups: Boolean = true,
29+
includeTopLevel: Boolean = true,
3030
): List<ColumnWithPath<C>>
3131
}
3232

33+
internal fun <C> ColumnSetWithRecursively<C>.recursivelyImpl(
34+
includeGroups: Boolean = true,
35+
includeTopLevel: Boolean = true,
36+
): ColumnSet<C> = object : ColumnSet<C> {
37+
38+
override fun resolve(context: ColumnResolutionContext): List<ColumnWithPath<C>> =
39+
this@recursivelyImpl.resolveRecursively(
40+
context = context,
41+
includeGroups = includeGroups,
42+
includeTopLevel = includeTopLevel,
43+
)
44+
}
45+
46+
3347
public fun interface ColumnSetTransformer {
3448

3549
public fun transform(columnSet: ColumnSet<*>): ColumnSet<*>

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/columns/SingleColumn.kt

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,31 @@ public interface SingleColumn<out C> : ColumnSet<C> {
1616
context: ColumnResolutionContext,
1717
): List<ColumnWithPath<C>> = resolveSingle(context)?.let { listOf(it) } ?: emptyList()
1818

19-
/** By default, we transform the current SingleColumn using the transformer and then resolve it */
20-
override fun resolveAfterTransform(
21-
context: ColumnResolutionContext,
22-
transformer: ColumnSetTransformer,
23-
): List<ColumnWithPath<C>> =
24-
transformer(this).resolve(context) as List<ColumnWithPath<C>>
25-
2619
public fun resolveSingle(context: ColumnResolutionContext): ColumnWithPath<C>?
2720
}
2821

22+
internal fun <C> SingleColumnWithRecursively<C>.recursivelyImpl(
23+
includeGroups: Boolean = true,
24+
includeTopLevel: Boolean = true,
25+
): SingleColumn<C> = object : SingleColumn<C> {
26+
27+
override fun resolveSingle(context: ColumnResolutionContext): ColumnWithPath<C>? =
28+
this@recursivelyImpl.resolveSingleRecursively(
29+
context = context,
30+
includeGroups = includeGroups,
31+
includeTopLevel = includeTopLevel,
32+
)
33+
}
34+
35+
public interface SingleColumnWithRecursively<out C> : SingleColumn<C> {
36+
37+
public fun resolveSingleRecursively(
38+
context: ColumnResolutionContext,
39+
includeGroups: Boolean = true,
40+
includeTopLevel: Boolean = true,
41+
): ColumnWithPath<C>?
42+
}
43+
2944

3045
@OptIn(ExperimentalContracts::class)
3146
public fun ColumnSet<*>.isSingleColumn(): Boolean {

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/aggregation/ConfiguredAggregateColumn.kt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,6 @@ internal class ConfiguredAggregateColumn<C> private constructor(
2929
override fun resolve(context: ColumnResolutionContext): List<ColumnWithPath<C>> =
3030
resolve(context, columns)
3131

32-
override fun resolveAfterTransform(
33-
context: ColumnResolutionContext,
34-
transformer: ColumnSetTransformer,
35-
): List<ColumnWithPath<C>> =
36-
resolve(context, transformer.transform(columns).cast<C>())
37-
3832
companion object {
3933

4034
fun <C> withDefault(src: ColumnSet<C>, default: C?): ColumnSet<C> = when (src) {

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/api/join.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@ internal fun <A, B> DataFrame<A>.joinImpl(
7474
val leftCol = leftJoinColumns[i]
7575
val rightCol = rightJoinColumns[i]
7676
if (leftCol.isColumnGroup() && rightCol.isColumnGroup()) {
77-
val leftColumns = getColumnsWithPaths { leftCol.recursively(includeGroups = false) }
78-
val rightColumns = other.getColumnsWithPaths { rightCol.recursively(includeGroups = false) }
77+
val leftColumns = getColumnsWithPaths { leftCol.all().recursively(includeGroups = false) }
78+
val rightColumns = other.getColumnsWithPaths { rightCol.all().recursively(includeGroups = false) }
7979

8080
val leftPrefixLength = leftCol.path.size
8181
val rightPrefixLength = rightCol.path.size

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/api/pivot.kt

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,6 @@ internal class PivotChainColumnSet<C>(val first: ColumnSet<C>, val second: Colum
4747
}
4848
return result
4949
}
50-
51-
override fun resolveAfterTransform(
52-
context: ColumnResolutionContext,
53-
transformer: ColumnSetTransformer,
54-
): List<ColumnWithPath<C>> {
55-
throw UnsupportedOperationException("Not implemented")
56-
}
5750
}
5851

5952
internal fun <T, C> DataFrame<T>.getPivotSequences(

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/api/sort.kt

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -106,14 +106,6 @@ internal fun <C> ColumnWithPath<C>.addFlag(flag: SortFlag): ColumnWithPath<C> {
106106
internal class ColumnsWithSortFlag<C>(val column: ColumnSet<C>, val flag: SortFlag) : ColumnSet<C> {
107107
override fun resolve(context: ColumnResolutionContext) =
108108
column.resolve(context).map { it.addFlag(flag) }
109-
110-
override fun resolveAfterTransform(
111-
context: ColumnResolutionContext,
112-
transformer: ColumnSetTransformer,
113-
): List<ColumnWithPath<C>> = column
114-
.let { transformer.transform(it) as ColumnSet<C> }
115-
.resolve(context)
116-
.map { it.addFlag(flag) }
117109
}
118110

119111
internal class SortColumnDescriptor<C>(

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/columns/ColumnsList.kt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,4 @@ internal class ColumnsList<C>(val columns: List<ColumnSet<C>>) : ColumnSet<C> {
1010

1111
override fun resolve(context: ColumnResolutionContext) =
1212
columns.flatMap { it.resolve(context) }
13-
14-
override fun resolveAfterTransform(
15-
context: ColumnResolutionContext,
16-
transformer: ColumnSetTransformer,
17-
): List<ColumnWithPath<C>> =
18-
columns.flatMap { it.resolveAfterTransform(context, transformer) }
1913
}

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/columns/DistinctColumnSet.kt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,4 @@ import org.jetbrains.kotlinx.dataframe.columns.ColumnWithPath
88
internal class DistinctColumnSet<T>(val src: ColumnSet<T>) : ColumnSet<T> {
99
override fun resolve(context: ColumnResolutionContext): List<ColumnWithPath<T>> =
1010
src.resolve(context).distinctBy { it.path }
11-
12-
override fun resolveAfterTransform(
13-
context: ColumnResolutionContext,
14-
transformer: ColumnSetTransformer,
15-
): List<ColumnWithPath<T>> = src.resolveAfterTransform(context, transformer).distinctBy { it.path }
1611
}

0 commit comments

Comments
 (0)