Skip to content

Commit 4d6179a

Browse files
authored
Merge pull request #1145 from Kotlin/cs-dsl-select
[Compiler plugin] Support SingleColumn.select
2 parents 6bc80af + 046b465 commit 4d6179a

File tree

5 files changed

+33
-1
lines changed

5 files changed

+33
-1
lines changed

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

+1
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ public interface SelectColumnsSelectionDsl {
178178
*
179179
* `df.`[select][DataFrame.select]` { myColGroup `[`{`][SingleColumn.select]` colA `[and][ColumnsSelectionDsl.and]` colB `[`}`][SingleColumn.select]` }`
180180
*/
181+
@Interpretable("NestedSelect")
181182
public fun <C, R> SingleColumn<DataRow<C>>.select(selector: ColumnsSelector<C, R>): ColumnSet<R> =
182183
selectInternal(selector)
183184

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

+9-1
Original file line numberDiff line numberDiff line change
@@ -693,7 +693,6 @@ internal class ValueCols2 : AbstractInterpreter<ColumnsResolver>() {
693693
}
694694
}
695695

696-
697696
internal class Named0 : AbstractInterpreter<ColumnsResolver>() {
698697
val Arguments.receiver: SingleColumnApproximation by arg()
699698
val Arguments.newName: String by arg()
@@ -702,3 +701,12 @@ internal class Named0 : AbstractInterpreter<ColumnsResolver>() {
702701
return columnsResolver { receiver named newName }
703702
}
704703
}
704+
705+
internal class NestedSelect : AbstractInterpreter<ColumnsResolver>() {
706+
val Arguments.receiver: SingleColumnApproximation by arg()
707+
val Arguments.selector: ColumnsResolver by arg()
708+
709+
override fun Arguments.interpret(): ColumnsResolver {
710+
return columnsResolver { receiver.asColumnGroup().select { selector } }
711+
}
712+
}

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

+2
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ import org.jetbrains.kotlinx.dataframe.plugin.impl.api.NameStartsWith0
174174
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.NameStartsWith1
175175
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.NameStartsWith2
176176
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.Named0
177+
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.NestedSelect
177178
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.PairConstructor
178179
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.PairToConstructor
179180
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.PerRowCol
@@ -316,6 +317,7 @@ internal inline fun <reified T> String.load(): T {
316317
"RenameMapping" -> RenameMapping()
317318
"Select0" -> Select0()
318319
"Distinct0" -> Select0()
320+
"NestedSelect" -> NestedSelect()
319321
"Expr0" -> Expr0()
320322
"And0" -> And0()
321323
"Remove0" -> Remove0()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
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(
8+
"a" to listOf(1),
9+
"b" to listOf(1),
10+
).group { a and b }.into("gr")
11+
val res = df.select { gr.select { a and b } }
12+
res.a
13+
res.b
14+
return "OK"
15+
}

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

+6
Original file line numberDiff line numberDiff line change
@@ -845,6 +845,12 @@ public void testRename() {
845845
runTest("testData/box/csDsl/rename.kt");
846846
}
847847

848+
@Test
849+
@TestMetadata("select.kt")
850+
public void testSelect() {
851+
runTest("testData/box/csDsl/select.kt");
852+
}
853+
848854
@Test
849855
@TestMetadata("single.kt")
850856
public void testSingle() {

0 commit comments

Comments
 (0)