Skip to content

Commit 16455e9

Browse files
committed
[Compiler plugin] Support addId
1 parent b5073de commit 16455e9

File tree

5 files changed

+44
-0
lines changed

5 files changed

+44
-0
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package org.jetbrains.kotlinx.dataframe.api
33
import org.jetbrains.kotlinx.dataframe.AnyCol
44
import org.jetbrains.kotlinx.dataframe.AnyFrame
55
import org.jetbrains.kotlinx.dataframe.DataFrame
6+
import org.jetbrains.kotlinx.dataframe.annotations.Interpretable
7+
import org.jetbrains.kotlinx.dataframe.annotations.Refine
68
import org.jetbrains.kotlinx.dataframe.columns.ColumnAccessor
79

810
// region DataColumn
@@ -15,6 +17,8 @@ public fun AnyCol.addId(columnName: String = "id"): AnyFrame = toDataFrame().add
1517

1618
public fun <T> DataFrame<T>.addId(column: ColumnAccessor<Int>): DataFrame<T> = insert(column) { index() }.at(0)
1719

20+
@Refine
21+
@Interpretable("AddId")
1822
public fun <T> DataFrame<T>.addId(columnName: String = "id"): DataFrame<T> = insert(columnName) { index() }.at(0)
1923

2024
// endregion
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
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.Present
7+
import org.jetbrains.kotlinx.dataframe.plugin.impl.dataFrame
8+
import org.jetbrains.kotlinx.dataframe.plugin.impl.simpleColumnOf
9+
10+
class AddId : AbstractSchemaModificationInterpreter() {
11+
val Arguments.receiver: PluginDataFrameSchema by dataFrame()
12+
val Arguments.columnName: String by arg(defaultValue = Present("id"))
13+
14+
override fun Arguments.interpret(): PluginDataFrameSchema {
15+
val columns = buildList {
16+
add(simpleColumnOf(columnName, session.builtinTypes.intType.type))
17+
addAll(receiver.columns())
18+
}
19+
return PluginDataFrameSchema(columns)
20+
}
21+
}

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
@@ -67,6 +67,7 @@ import org.jetbrains.kotlin.fir.types.classId
6767
import org.jetbrains.kotlin.fir.types.coneType
6868
import org.jetbrains.kotlin.name.ClassId
6969
import org.jetbrains.kotlin.name.Name
70+
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.AddId
7071
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.All0
7172
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.ColsAtAnyDepth0
7273
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.ColsOf0
@@ -194,6 +195,7 @@ internal inline fun <reified T> String.load(): T {
194195
"UpdateWith0" -> UpdateWith0()
195196
"Flatten0" -> Flatten0()
196197
"FlattenDefault" -> FlattenDefault()
198+
"AddId" -> AddId()
197199
else -> error("$this")
198200
} as T
199201
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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).addId()
8+
val i: DataColumn<Int> = df.id
9+
val i1: DataColumn<Int> = dataFrameOf("a")(1).addId("i").i
10+
return "OK"
11+
}

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
@@ -17,6 +17,12 @@
1717
@TestMetadata("testData/box")
1818
@TestDataPath("$PROJECT_ROOT")
1919
public class DataFrameBlackBoxCodegenTestGenerated extends AbstractDataFrameBlackBoxCodegenTest {
20+
@Test
21+
@TestMetadata("addId.kt")
22+
public void testAddId() {
23+
runTest("testData/box/addId.kt");
24+
}
25+
2026
@Test
2127
public void testAllFilesPresentInBox() {
2228
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("testData/box"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);

0 commit comments

Comments
 (0)