Skip to content

Commit c43fe4b

Browse files
committed
Restore invoke operator for ColumnReference in ColumnSelectionDsl. Add tests
1 parent cd4efcb commit c43fe4b

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/ColumnsSelectionDsl.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import org.jetbrains.kotlinx.dataframe.columns.ColumnPath
1212
import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
1313
import org.jetbrains.kotlinx.dataframe.columns.ColumnSet
1414
import org.jetbrains.kotlinx.dataframe.columns.ColumnWithPath
15+
import org.jetbrains.kotlinx.dataframe.columns.FrameColumn
1516
import org.jetbrains.kotlinx.dataframe.columns.SingleColumn
1617
import org.jetbrains.kotlinx.dataframe.columns.UnresolvedColumnsPolicy
1718
import org.jetbrains.kotlinx.dataframe.columns.renamedReference
@@ -35,6 +36,12 @@ import kotlin.reflect.typeOf
3536

3637
public interface ColumnSelectionDsl<out T> : ColumnsContainer<T> {
3738

39+
public operator fun <C> ColumnReference<C>.invoke(): DataColumn<C> = get(this)
40+
41+
public operator fun <T> ColumnReference<DataRow<T>>.invoke(): ColumnGroup<T> = get(this)
42+
43+
public operator fun <T> ColumnReference<DataFrame<T>>.invoke(): FrameColumn<T> = get(this)
44+
3845
public operator fun <C> ColumnPath.invoke(): DataColumn<C> = getColumn(this).cast()
3946

4047
public operator fun <C> String.invoke(): DataColumn<C> = getColumn(this).cast()

tests/src/test/kotlin/org/jetbrains/kotlinx/dataframe/testSets/person/DataFrameTreeTests.kt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import org.jetbrains.kotlinx.dataframe.api.duplicate
3737
import org.jetbrains.kotlinx.dataframe.api.duplicateRows
3838
import org.jetbrains.kotlinx.dataframe.api.emptyDataFrame
3939
import org.jetbrains.kotlinx.dataframe.api.explode
40+
import org.jetbrains.kotlinx.dataframe.api.expr
4041
import org.jetbrains.kotlinx.dataframe.api.filter
4142
import org.jetbrains.kotlinx.dataframe.api.forEach
4243
import org.jetbrains.kotlinx.dataframe.api.forEachRow
@@ -61,6 +62,8 @@ import org.jetbrains.kotlinx.dataframe.api.join
6162
import org.jetbrains.kotlinx.dataframe.api.last
6263
import org.jetbrains.kotlinx.dataframe.api.map
6364
import org.jetbrains.kotlinx.dataframe.api.max
65+
import org.jetbrains.kotlinx.dataframe.api.maxBy
66+
import org.jetbrains.kotlinx.dataframe.api.median
6467
import org.jetbrains.kotlinx.dataframe.api.minus
6568
import org.jetbrains.kotlinx.dataframe.api.move
6669
import org.jetbrains.kotlinx.dataframe.api.moveTo
@@ -73,6 +76,7 @@ import org.jetbrains.kotlinx.dataframe.api.remove
7376
import org.jetbrains.kotlinx.dataframe.api.rename
7477
import org.jetbrains.kotlinx.dataframe.api.rows
7578
import org.jetbrains.kotlinx.dataframe.api.select
79+
import org.jetbrains.kotlinx.dataframe.api.single
7680
import org.jetbrains.kotlinx.dataframe.api.sortBy
7781
import org.jetbrains.kotlinx.dataframe.api.split
7882
import org.jetbrains.kotlinx.dataframe.api.sumOf
@@ -704,4 +708,22 @@ class DataFrameTreeTests : BaseTest() {
704708
it.concat(it).sortBy("id").remove("id")
705709
}
706710
}
711+
712+
@Test
713+
fun `select column group`() {
714+
typed2.aggregate {
715+
nameAndCity()[2..3].name.distinct().single() into "name"
716+
}["name"] shouldBe "Charlie"
717+
}
718+
719+
@Test
720+
fun `select frame column`() {
721+
val group by frameColumn<GroupedPerson>()
722+
723+
typed2
724+
.groupBy { expr { age > 30 } into "isOld" }.into(group)
725+
.aggregate {
726+
group().maxBy { rowsCount() }.weight.median() into "m"
727+
}["m"] shouldBe 61
728+
}
707729
}

0 commit comments

Comments
 (0)