Skip to content

Commit 8b3e0c1

Browse files
insert after plugin support
1 parent eca9f8a commit 8b3e0c1

File tree

7 files changed

+72
-0
lines changed

7 files changed

+72
-0
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ public fun <T> InsertClause<T>.under(column: String): DataFrame<T> = under(pathO
7979

8080
// region after
8181

82+
@Refine
83+
@Interpretable("InsertAfter0")
8284
public fun <T> InsertClause<T>.after(column: ColumnSelector<T, *>): DataFrame<T> = after(df.getColumnPath(column))
8385

8486
public fun <T> InsertClause<T>.after(column: String): DataFrame<T> = df.add(this.column).move(this.column).after(column)

plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/api/insert.kt

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

33
import org.jetbrains.kotlinx.dataframe.DataFrame
44
import org.jetbrains.kotlinx.dataframe.api.Infer
5+
import org.jetbrains.kotlinx.dataframe.api.after
56
import org.jetbrains.kotlinx.dataframe.api.insert
67
import org.jetbrains.kotlinx.dataframe.api.pathOf
78
import org.jetbrains.kotlinx.dataframe.api.under
@@ -122,3 +123,14 @@ internal class Under4 : AbstractInterpreter<PluginDataFrameSchema>() {
122123
.toPluginDataFrameSchema()
123124
}
124125
}
126+
127+
internal class InsertAfter0 : AbstractInterpreter<PluginDataFrameSchema>() {
128+
val Arguments.column: SingleColumnApproximation by arg()
129+
val Arguments.receiver: InsertClauseApproximation by arg()
130+
131+
override fun Arguments.interpret(): PluginDataFrameSchema {
132+
return receiver.df.asDataFrame()
133+
.insert(receiver.column.asDataColumn()).after(column.col.path)
134+
.toPluginDataFrameSchema()
135+
}
136+
}

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
@@ -128,6 +128,7 @@ import org.jetbrains.kotlinx.dataframe.plugin.impl.api.GroupByReduceExpression
128128
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.GroupByReduceInto
129129
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.GroupByReducePredicate
130130
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.GroupByXs
131+
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.InsertAfter0
131132
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.Last0
132133
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.Last1
133134
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.Last2
@@ -286,6 +287,7 @@ internal inline fun <reified T> String.load(): T {
286287
"Under2" -> Under2()
287288
"Under3" -> Under3()
288289
"Under4" -> Under4()
290+
"InsertAfter0" -> InsertAfter0()
289291
"Join0" -> Join0()
290292
"Match0" -> Match0()
291293
"Rename" -> Rename()
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import org.jetbrains.kotlinx.dataframe.*
2+
import org.jetbrains.kotlinx.dataframe.api.*
3+
4+
fun box(): String {
5+
val df = dataFrameOf("a", "b", "c")(1, 2, 3, 4, 5, 6)
6+
7+
val dfWithD = df.insert("d") { b * c }.after { a }
8+
9+
val dCol: DataColumn<Int> = dfWithD.d
10+
11+
return "OK"
12+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import org.jetbrains.kotlinx.dataframe.*
2+
import org.jetbrains.kotlinx.dataframe.api.*
3+
4+
fun box(): String {
5+
val df = dataFrameOf("a", "b", "c")(1, 2, 3, 4, 5, 6)
6+
val grouped = df.group { a and b and c }.into("g")
7+
8+
val dfWithD = grouped.insert("d") { g.b * g.c }.after { g.b }
9+
10+
val dCol: DataColumn<Int> = dfWithD.g.d
11+
12+
return "OK"
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import org.jetbrains.kotlinx.dataframe.*
2+
import org.jetbrains.kotlinx.dataframe.api.*
3+
4+
fun box(): String {
5+
val df = dataFrameOf("a", "b", "c")(1, 2, 3, 4, 5, 6)
6+
val grouped = df.group { a and b }.into("g")
7+
grouped.move { g.a }.after { g.b }
8+
9+
val dfMovedAfterNested = grouped.move { c }.after { g.a }
10+
val cNested: DataColumn<Int> = dfMovedAfterNested.g.c
11+
12+
return "OK"
13+
}

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,18 @@ public void testInsert() {
286286
runTest("testData/box/insert.kt");
287287
}
288288

289+
@Test
290+
@TestMetadata("insertAfter.kt")
291+
public void testInsertAfter() {
292+
runTest("testData/box/insertAfter.kt");
293+
}
294+
295+
@Test
296+
@TestMetadata("insertAfterNested.kt")
297+
public void testInsertAfterNested() {
298+
runTest("testData/box/insertAfterNested.kt");
299+
}
300+
289301
@Test
290302
@TestMetadata("inventNamesForLocalClasses.kt")
291303
public void testInventNamesForLocalClasses() {
@@ -346,6 +358,12 @@ public void testMoveAfter() {
346358
runTest("testData/box/moveAfter.kt");
347359
}
348360

361+
@Test
362+
@TestMetadata("moveAfterNested.kt")
363+
public void testMoveAfterNested() {
364+
runTest("testData/box/moveAfterNested.kt");
365+
}
366+
349367
@Test
350368
@TestMetadata("moveInto.kt")
351369
public void testMoveInto() {

0 commit comments

Comments
 (0)