Skip to content

Commit e9dfab9

Browse files
committed
poc implemented, needs more tests
1 parent 8b0b8a3 commit e9dfab9

File tree

42 files changed

+742
-342
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+742
-342
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,11 @@ public interface DataColumn<out T> : BaseColumn<T> {
107107

108108
override fun resolveSingle(context: ColumnResolutionContext): ColumnWithPath<T>? = this.addPath()
109109

110-
override fun resolveSingleAfter(
110+
override fun resolveSingleAfterTransform(
111111
context: ColumnResolutionContext,
112-
transform: (ColumnSet<*>) -> ColumnSet<*>,
112+
transformer: ColumnSetTransformer,
113113
): ColumnWithPath<T>? =
114-
transform(this).cast<T>()
114+
transformer.transformRemainingSingle(this).cast<T>()
115115
.let { it as DataColumn<T> }
116116
.addPath()
117117

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

Lines changed: 139 additions & 52 deletions
Large diffs are not rendered by default.

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ public class ColumnMatch<C>(public val left: ColumnReference<C>, public val righ
111111

112112
override fun resolveAfterTransform(
113113
context: ColumnResolutionContext,
114-
transform: (ColumnSet<*>) -> ColumnSet<*>,
114+
transformer: ColumnSetTransformer,
115115
): List<ColumnWithPath<C>> {
116116
throw UnsupportedOperationException()
117117
}

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import org.jetbrains.kotlinx.dataframe.impl.columnName
99
import org.jetbrains.kotlinx.dataframe.impl.columns.RenamedColumnReference
1010
import org.jetbrains.kotlinx.dataframe.impl.columns.addPath
1111
import org.jetbrains.kotlinx.dataframe.impl.columns.getColumn
12-
import org.jetbrains.kotlinx.dataframe.impl.columns.transform
1312
import kotlin.reflect.KProperty
1413

1514
/**
@@ -38,11 +37,11 @@ public interface ColumnReference<out C> : SingleColumn<C> {
3837
.getColumn<C>(path(), context.unresolvedColumnsPolicy)
3938
?.addPath(path())
4039

41-
override fun resolveSingleAfter(
40+
override fun resolveSingleAfterTransform(
4241
context: ColumnResolutionContext,
43-
transform: (ColumnSet<*>) -> ColumnSet<*>,
42+
transformer: ColumnSetTransformer,
4443
): ColumnWithPath<C>? =
45-
transform(context.df.asColumnGroup()).cast<C>()
44+
transformer.transformRemainingSingle(context.df.asColumnGroup()).cast<C>()
4645
.resolve(context)
4746
.toDataFrame()
4847
.getColumn<C>(path(), context.unresolvedColumnsPolicy)

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,22 @@ public interface ColumnSet<out C> {
2121
public fun resolve(context: ColumnResolutionContext): List<ColumnWithPath<C>>
2222

2323
/**
24-
* Resolves this [ColumnSet] as a [List]<[ColumnWithPath]<[C]>> after applying [transform] to the parent
24+
* Resolves this [ColumnSet] as a [List]<[ColumnWithPath]<[C]>> after applying [transformer] to the parent
2525
* [ColumnSet]. This essentially injects a call right before the current in the [ColumnSet.resolve] chain.
2626
*/
2727
public fun resolveAfterTransform(
2828
context: ColumnResolutionContext,
29-
transform: (ColumnSet<*>) -> ColumnSet<*>,
29+
transformer: ColumnSetTransformer,
3030
): List<ColumnWithPath<C>>
3131
}
3232

33+
public interface ColumnSetTransformer {
34+
35+
public fun transformRemainingSingle(singleColumn: SingleColumn<*>): SingleColumn<*>
36+
37+
public fun transform(columnSet: ColumnSet<*>): ColumnSet<*>
38+
}
39+
3340
public class ColumnResolutionContext internal constructor(
3441
internal val df: DataFrame<*>,
3542
internal val unresolvedColumnsPolicy: UnresolvedColumnsPolicy,

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

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,22 @@ public interface ColumnWithPath<out T> : DataColumn<T> {
1515
public val name: String get() = name()
1616
public val parentName: String? get() = path.parentName
1717
public fun depth(): Int = path.depth()
18-
public fun <C> getChild(accessor: ColumnReference<C>): ColumnWithPath<C>? = asColumnGroup().getColumnOrNull(accessor)?.addPath(path + accessor.path())
19-
public fun getChild(name: String): ColumnWithPath<Any?>? = asColumnGroup().getColumnOrNull(name)?.addParentPath(path)
20-
public fun getChild(index: Int): ColumnWithPath<Any?>? = asColumnGroup().getColumnOrNull(index)?.addParentPath(path)
21-
public fun <C> getChild(accessor: KProperty<C>): ColumnWithPath<C>? = asColumnGroup().getColumnOrNull(accessor)?.addParentPath(path)
18+
public fun <C> getChild(accessor: ColumnReference<C>): ColumnWithPath<C>? =
19+
asColumnGroup().getColumnOrNull(accessor)?.addPath(path + accessor.path())
2220

23-
public fun children(): List<ColumnWithPath<Any?>> = if (isColumnGroup()) data.asColumnGroup().columns().map { it.addParentPath(path) } else emptyList()
21+
public fun getChild(name: String): ColumnWithPath<Any?>? =
22+
asColumnGroup().getColumnOrNull(name)?.addParentPath(path)
23+
24+
public fun getChild(index: Int): ColumnWithPath<Any?>? =
25+
asColumnGroup().getColumnOrNull(index)?.addParentPath(path)
26+
public fun <C> getChild(accessor: KProperty<C>): ColumnWithPath<C>? =
27+
asColumnGroup().getColumnOrNull(accessor)?.addParentPath(path)
28+
29+
public fun children(): List<ColumnWithPath<Any?>> =
30+
if (isColumnGroup())
31+
data.asColumnGroup().columns().map { it.addParentPath(path) }
32+
else
33+
emptyList()
2434

2535
override fun path(): ColumnPath = path
2636

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ public interface SingleColumn<out C> : ColumnSet<C> {
1515

1616
override fun resolveAfterTransform(
1717
context: ColumnResolutionContext,
18-
transform: (ColumnSet<*>) -> ColumnSet<*>,
19-
): List<ColumnWithPath<C>> = resolveSingleAfter(context, transform)?.let { listOf(it) } ?: emptyList()
18+
transformer: ColumnSetTransformer,
19+
): List<ColumnWithPath<C>> = resolveSingleAfterTransform(context, transformer)?.let { listOf(it) } ?: emptyList()
2020

2121
public fun resolveSingle(context: ColumnResolutionContext): ColumnWithPath<C>?
2222

23-
public fun resolveSingleAfter(
23+
public fun resolveSingleAfterTransform(
2424
context: ColumnResolutionContext,
25-
transform: (ColumnSet<*>) -> ColumnSet<*>,
25+
transformer: ColumnSetTransformer,
2626
): ColumnWithPath<C>?
2727
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,14 @@ internal open class DataFrameReceiver<T>(
5555
override fun resolveSingle(context: ColumnResolutionContext): ColumnWithPath<DataRow<T>>? =
5656
DataColumn.createColumnGroup("", df).addPath(emptyPath())
5757

58-
override fun resolveSingleAfter(
58+
override fun resolveSingleAfterTransform(
5959
context: ColumnResolutionContext,
60-
transform: (ColumnSet<*>) -> ColumnSet<*>,
60+
transformer: ColumnSetTransformer,
6161
): ColumnWithPath<DataRow<T>>? =
6262
DataColumn.createColumnGroup(
6363
name = "",
6464
df = createColumnSet { df.columns().map { it.addPath() } }
65-
.let(transform).cast<T>()
65+
.let(transformer::transform).cast<T>()
6666
.resolve(context)
6767
.toDataFrame() as DataFrame<T>,
6868
).addPath(emptyPath())

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package org.jetbrains.kotlinx.dataframe.impl.aggregation
22

33
import org.jetbrains.kotlinx.dataframe.api.cast
44
import org.jetbrains.kotlinx.dataframe.columns.*
5-
import org.jetbrains.kotlinx.dataframe.impl.columns.transform
65

76
internal class ConfiguredAggregateColumn<C> private constructor(
87
val columns: ColumnSet<C>,
@@ -32,9 +31,9 @@ internal class ConfiguredAggregateColumn<C> private constructor(
3231

3332
override fun resolveAfterTransform(
3433
context: ColumnResolutionContext,
35-
transform: (ColumnSet<*>) -> ColumnSet<*>,
34+
transformer: ColumnSetTransformer,
3635
): List<ColumnWithPath<C>> =
37-
resolve(context, transform(columns).cast<C>())
36+
resolve(context, transformer.transform(columns).cast<C>())
3837

3938
companion object {
4039

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,9 @@ import org.jetbrains.kotlinx.dataframe.api.PivotColumnsSelector
88
import org.jetbrains.kotlinx.dataframe.api.forEach
99
import org.jetbrains.kotlinx.dataframe.api.groupBy
1010
import org.jetbrains.kotlinx.dataframe.api.toPath
11-
import org.jetbrains.kotlinx.dataframe.columns.ColumnPath
12-
import org.jetbrains.kotlinx.dataframe.columns.ColumnResolutionContext
13-
import org.jetbrains.kotlinx.dataframe.columns.ColumnSet
14-
import org.jetbrains.kotlinx.dataframe.columns.ColumnWithPath
11+
import org.jetbrains.kotlinx.dataframe.columns.*
12+
import org.jetbrains.kotlinx.dataframe.columns.ColumnSetTransformer
1513
import org.jetbrains.kotlinx.dataframe.columns.UnresolvedColumnsPolicy
16-
import org.jetbrains.kotlinx.dataframe.columns.toColumnSet
1714
import org.jetbrains.kotlinx.dataframe.impl.aggregation.GroupByReceiverImpl
1815
import org.jetbrains.kotlinx.dataframe.impl.aggregation.receivers.AggregateInternalDsl
1916
import org.jetbrains.kotlinx.dataframe.impl.aggregation.receivers.AggregatePivotDslImpl
@@ -53,7 +50,7 @@ internal class PivotChainColumnSet<C>(val first: ColumnSet<C>, val second: Colum
5350

5451
override fun resolveAfterTransform(
5552
context: ColumnResolutionContext,
56-
transform: (ColumnSet<*>) -> ColumnSet<*>,
53+
transformer: ColumnSetTransformer,
5754
): List<ColumnWithPath<C>> {
5855
throw UnsupportedOperationException("Not implemented")
5956
}

0 commit comments

Comments
 (0)