Skip to content

Commit e49c0ac

Browse files
committed
[Compiler plugin] DataFrame.reorderColumnsByName
1 parent 63edccd commit e49c0ac

File tree

6 files changed

+971
-0
lines changed

6 files changed

+971
-0
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import org.jetbrains.kotlinx.dataframe.ColumnsSelector
66
import org.jetbrains.kotlinx.dataframe.DataFrame
77
import org.jetbrains.kotlinx.dataframe.Selector
88
import org.jetbrains.kotlinx.dataframe.annotations.AccessApiOverload
9+
import org.jetbrains.kotlinx.dataframe.annotations.Interpretable
10+
import org.jetbrains.kotlinx.dataframe.annotations.Refine
911
import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
1012
import org.jetbrains.kotlinx.dataframe.columns.toColumnSet
1113
import org.jetbrains.kotlinx.dataframe.impl.api.reorderImpl
@@ -52,6 +54,8 @@ public fun <T, V : Comparable<V>> DataFrame<T>.reorderColumnsBy(
5254
inFrameColumns = atAnyDepth,
5355
).reorderImpl(desc, expression)
5456

57+
@Refine
58+
@Interpretable("ReorderColumnsByName")
5559
public fun <T> DataFrame<T>.reorderColumnsByName(atAnyDepth: Boolean = true, desc: Boolean = false): DataFrame<T> =
5660
reorderColumnsBy(atAnyDepth, desc) { name() }
5761

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.jetbrains.kotlinx.dataframe.plugin.impl.api
2+
3+
import org.jetbrains.kotlinx.dataframe.api.reorderColumnsByName
4+
import org.jetbrains.kotlinx.dataframe.plugin.impl.AbstractSchemaModificationInterpreter
5+
import org.jetbrains.kotlinx.dataframe.plugin.impl.Arguments
6+
import org.jetbrains.kotlinx.dataframe.plugin.impl.PluginDataFrameSchema
7+
import org.jetbrains.kotlinx.dataframe.plugin.impl.Present
8+
import org.jetbrains.kotlinx.dataframe.plugin.impl.asDataFrame
9+
import org.jetbrains.kotlinx.dataframe.plugin.impl.dataFrame
10+
import org.jetbrains.kotlinx.dataframe.plugin.impl.toPluginDataFrameSchema
11+
12+
class ReorderColumnsByName : AbstractSchemaModificationInterpreter() {
13+
val Arguments.receiver by dataFrame()
14+
val Arguments.atAnyDepth: Boolean by arg(defaultValue = Present(true))
15+
val Arguments.desc: Boolean by arg(defaultValue = Present(false))
16+
17+
override fun Arguments.interpret(): PluginDataFrameSchema {
18+
return receiver.asDataFrame().reorderColumnsByName(atAnyDepth, desc).toPluginDataFrameSchema()
19+
}
20+
}

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
@@ -123,6 +123,7 @@ import org.jetbrains.kotlinx.dataframe.plugin.impl.api.UpdateWith0
123123
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.ValueCounts
124124
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.RenameToCamelCase
125125
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.RenameToCamelCaseClause
126+
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.ReorderColumnsByName
126127
import org.jetbrains.kotlinx.dataframe.plugin.utils.Names
127128

128129
internal fun FirFunctionCall.loadInterpreter(session: FirSession): Interpreter<*>? {
@@ -293,6 +294,7 @@ internal inline fun <reified T> String.load(): T {
293294
"MergeId" -> MergeId()
294295
"MergeBy0" -> MergeBy0()
295296
"MergeBy1" -> MergeBy1()
297+
"ReorderColumnsByName" -> ReorderColumnsByName()
296298
else -> error("$this")
297299
} as T
298300
}

0 commit comments

Comments
 (0)