Skip to content

Commit 80dcb02

Browse files
committed
[Compiler plugin] Support mapToFrame
1 parent 2c6be35 commit 80dcb02

File tree

5 files changed

+49
-0
lines changed

5 files changed

+49
-0
lines changed

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/map.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import org.jetbrains.kotlinx.dataframe.DataFrame
77
import org.jetbrains.kotlinx.dataframe.DataRow
88
import org.jetbrains.kotlinx.dataframe.RowExpression
99
import org.jetbrains.kotlinx.dataframe.Selector
10+
import org.jetbrains.kotlinx.dataframe.annotations.Interpretable
11+
import org.jetbrains.kotlinx.dataframe.annotations.Refine
1012
import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
1113
import org.jetbrains.kotlinx.dataframe.columns.FrameColumn
1214
import org.jetbrains.kotlinx.dataframe.impl.columnName
@@ -102,6 +104,8 @@ public fun <T, R> ColumnsContainer<T>.mapToColumn(
102104
body: AddExpression<T, R>,
103105
): DataColumn<R> = mapToColumn(column.columnName, type, infer, body)
104106

107+
@Refine
108+
@Interpretable("MapToFrame")
105109
public fun <T> DataFrame<T>.mapToFrame(body: AddDsl<T>.() -> Unit): AnyFrame {
106110
val dsl = AddDsl(this)
107111
body(dsl)
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.jetbrains.kotlinx.dataframe.plugin.impl.api
2+
3+
import org.jetbrains.kotlinx.dataframe.plugin.impl.AbstractSchemaModificationInterpreter
4+
import org.jetbrains.kotlinx.dataframe.plugin.impl.Arguments
5+
import org.jetbrains.kotlinx.dataframe.plugin.impl.PluginDataFrameSchema
6+
import org.jetbrains.kotlinx.dataframe.plugin.impl.dataFrame
7+
import org.jetbrains.kotlinx.dataframe.plugin.impl.dsl
8+
9+
class MapToFrame : AbstractSchemaModificationInterpreter() {
10+
val Arguments.receiver: PluginDataFrameSchema by dataFrame()
11+
val Arguments.body by dsl()
12+
13+
override fun Arguments.interpret(): PluginDataFrameSchema {
14+
val addDsl = AddDslApproximation(mutableListOf())
15+
body(addDsl, emptyMap())
16+
return PluginDataFrameSchema(addDsl.columns)
17+
}
18+
}

plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/loadInterpreter.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ import org.jetbrains.kotlinx.dataframe.plugin.impl.api.FillNulls0
7979
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.Flatten0
8080
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.FlattenDefault
8181
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.FrameCols0
82+
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.MapToFrame
8283
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.ReadExcel
8384
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.ToDataFrame
8485
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.ToDataFrameColumn
@@ -198,6 +199,7 @@ internal inline fun <reified T> String.load(): T {
198199
"FlattenDefault" -> FlattenDefault()
199200
"AddId" -> AddId()
200201
"AddDslStringInvoke" -> AddDslStringInvoke()
202+
"MapToFrame" -> MapToFrame()
201203
else -> error("$this")
202204
} as T
203205
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import org.jetbrains.kotlinx.dataframe.*
2+
import org.jetbrains.kotlinx.dataframe.annotations.*
3+
import org.jetbrains.kotlinx.dataframe.api.*
4+
import org.jetbrains.kotlinx.dataframe.io.*
5+
6+
fun box(): String {
7+
val df = dataFrameOf("a")(1).mapToFrame {
8+
"id" from { it }
9+
"group" {
10+
"a" from { it }
11+
}
12+
}
13+
14+
df.id
15+
df.group.a
16+
17+
df.compareSchemas(strict = true)
18+
return "OK"
19+
}

plugins/kotlin-dataframe/tests-gen/org/jetbrains/kotlin/fir/dataframe/DataFrameBlackBoxCodegenTestGenerated.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,12 @@ public void testMain() {
244244
runTest("testData/box/main.kt");
245245
}
246246

247+
@Test
248+
@TestMetadata("mapToFrame.kt")
249+
public void testMapToFrame() {
250+
runTest("testData/box/mapToFrame.kt");
251+
}
252+
247253
@Test
248254
@TestMetadata("nestedDataSchemaCodegen.kt")
249255
public void testNestedDataSchemaCodegen() {

0 commit comments

Comments
 (0)