Skip to content

Commit 9e462a6

Browse files
Automated commit of generated code
1 parent 6532ce6 commit 9e462a6

File tree

7 files changed

+83
-34
lines changed

7 files changed

+83
-34
lines changed

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/and.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
99
import org.jetbrains.kotlinx.dataframe.columns.ColumnSet
1010
import org.jetbrains.kotlinx.dataframe.columns.ColumnsResolver
1111
import org.jetbrains.kotlinx.dataframe.columns.SingleColumn
12-
import org.jetbrains.kotlinx.dataframe.impl.columns.ColumnsList
12+
import org.jetbrains.kotlinx.dataframe.impl.columns.ColumnListImpl
1313
import kotlin.reflect.KProperty
1414

1515
// region ColumnsSelectionDsl
@@ -211,7 +211,7 @@ public interface AndColumnsSelectionDsl {
211211
* and right side of the [and][org.jetbrains.kotlinx.dataframe.api.AndColumnsSelectionDsl.and] operator.
212212
*/
213213
@Interpretable("And0")
214-
public infix fun <C> ColumnsResolver<C>.and(other: ColumnsResolver<C>): ColumnSet<C> = ColumnsList(this, other)
214+
public infix fun <C> ColumnsResolver<C>.and(other: ColumnsResolver<C>): ColumnSet<C> = ColumnListImpl(this, other)
215215

216216
/** ## And Operator
217217
* The [and][org.jetbrains.kotlinx.dataframe.api.AndColumnsSelectionDsl.and] operator allows you to combine selections of columns or simply select multiple columns at once.

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/join.kt

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,12 @@ import org.jetbrains.kotlinx.dataframe.columns.ColumnResolutionContext
1010
import org.jetbrains.kotlinx.dataframe.columns.ColumnSet
1111
import org.jetbrains.kotlinx.dataframe.columns.ColumnWithPath
1212
import org.jetbrains.kotlinx.dataframe.columns.ColumnsResolver
13+
import org.jetbrains.kotlinx.dataframe.columns.UnresolvedColumnsPolicy
1314
import org.jetbrains.kotlinx.dataframe.columns.toColumnSet
15+
import org.jetbrains.kotlinx.dataframe.impl.DataFrameReceiver
16+
import org.jetbrains.kotlinx.dataframe.impl.api.extractJoinColumns
1417
import org.jetbrains.kotlinx.dataframe.impl.api.joinImpl
18+
import org.jetbrains.kotlinx.dataframe.impl.columns.ColumnListImpl
1519
import kotlin.reflect.KProperty
1620

1721
@Refine
@@ -28,6 +32,8 @@ public fun <A, B> DataFrame<A>.join(
2832
type: JoinType = JoinType.Inner,
2933
): DataFrame<A> = join(other, type) { columns.toColumnSet() }
3034

35+
@Refine
36+
@Interpretable("InnerJoin")
3137
public fun <A, B> DataFrame<A>.innerJoin(
3238
other: DataFrame<B>,
3339
selector: JoinColumnsSelector<A, B>? = null,
@@ -36,6 +42,8 @@ public fun <A, B> DataFrame<A>.innerJoin(
3642
public fun <A, B> DataFrame<A>.innerJoin(other: DataFrame<B>, vararg columns: String): DataFrame<A> =
3743
innerJoin(other) { columns.toColumnSet() }
3844

45+
@Refine
46+
@Interpretable("LeftJoin")
3947
public fun <A, B> DataFrame<A>.leftJoin(
4048
other: DataFrame<B>,
4149
selector: JoinColumnsSelector<A, B>? = null,
@@ -44,6 +52,8 @@ public fun <A, B> DataFrame<A>.leftJoin(
4452
public fun <A, B> DataFrame<A>.leftJoin(other: DataFrame<B>, vararg columns: String): DataFrame<A> =
4553
leftJoin(other) { columns.toColumnSet() }
4654

55+
@Refine
56+
@Interpretable("RightJoin")
4757
public fun <A, B> DataFrame<A>.rightJoin(
4858
other: DataFrame<B>,
4959
selector: JoinColumnsSelector<A, B>? = null,
@@ -52,6 +62,8 @@ public fun <A, B> DataFrame<A>.rightJoin(
5262
public fun <A, B> DataFrame<A>.rightJoin(other: DataFrame<B>, vararg columns: String): DataFrame<A> =
5363
rightJoin(other) { columns.toColumnSet() }
5464

65+
@Refine
66+
@Interpretable("FullJoin")
5567
public fun <A, B> DataFrame<A>.fullJoin(
5668
other: DataFrame<B>,
5769
selector: JoinColumnsSelector<A, B>? = null,
@@ -60,6 +72,8 @@ public fun <A, B> DataFrame<A>.fullJoin(
6072
public fun <A, B> DataFrame<A>.fullJoin(other: DataFrame<B>, vararg columns: String): DataFrame<A> =
6173
fullJoin(other) { columns.toColumnSet() }
6274

75+
@Refine
76+
@Interpretable("FilterJoin")
6377
public fun <A, B> DataFrame<A>.filterJoin(
6478
other: DataFrame<B>,
6579
selector: JoinColumnsSelector<A, B>? = null,
@@ -68,6 +82,8 @@ public fun <A, B> DataFrame<A>.filterJoin(
6882
public fun <A, B> DataFrame<A>.filterJoin(other: DataFrame<B>, vararg columns: String): DataFrame<A> =
6983
filterJoin(other) { columns.toColumnSet() }
7084

85+
@Refine
86+
@Interpretable("ExcludeJoin")
7187
public fun <A, B> DataFrame<A>.excludeJoin(
7288
other: DataFrame<B>,
7389
selector: JoinColumnsSelector<A, B>? = null,
@@ -107,14 +123,44 @@ public interface JoinDsl<out A, out B> : ColumnsSelectionDsl<A> {
107123
@AccessApiOverload
108124
public infix fun <C> KProperty<C>.match(other: ColumnReference<C>): ColumnMatch<C> =
109125
ColumnMatch(toColumnAccessor(), other)
126+
127+
public companion object {
128+
public fun <A, B> defaultJoinColumns(left: DataFrame<A>, right: DataFrame<B>): JoinColumnsSelector<A, B> =
129+
{
130+
left.columnNames().intersect(right.columnNames().toSet())
131+
.map { it.toColumnAccessor() }
132+
.let { ColumnListImpl(it) }
133+
}
134+
135+
public fun <A, B> getColumns(
136+
left: DataFrame<A>,
137+
other: DataFrame<B>,
138+
selector: JoinColumnsSelector<A, B>,
139+
): List<ColumnMatch<Any?>> {
140+
val receiver = object : DataFrameReceiver<A>(left, UnresolvedColumnsPolicy.Fail), JoinDsl<A, B> {
141+
override val right: DataFrame<B> = DataFrameReceiver(other, UnresolvedColumnsPolicy.Fail)
142+
}
143+
val columns = selector(receiver, left)
144+
return columns.extractJoinColumns()
145+
}
146+
}
110147
}
111148

112-
public class ColumnMatch<C>(public val left: ColumnReference<C>, public val right: ColumnReference<C>) : ColumnSet<C> {
149+
public interface ColumnMatch<C> : ColumnSet<C> {
150+
public val left: ColumnReference<C>
151+
public val right: ColumnReference<C>
152+
}
153+
154+
internal class ColumnMatchImpl<C>(override val left: ColumnReference<C>, override val right: ColumnReference<C>) :
155+
ColumnMatch<C> {
113156

114157
override fun resolve(context: ColumnResolutionContext): List<ColumnWithPath<C>> =
115158
throw UnsupportedOperationException()
116159
}
117160

161+
public fun <C> ColumnMatch(left: ColumnReference<C>, right: ColumnReference<C>): ColumnMatch<C> =
162+
ColumnMatchImpl(left, right)
163+
118164
public typealias JoinColumnsSelector<A, B> = JoinDsl<A, B>.(ColumnsContainer<A>) -> ColumnsResolver<*>
119165

120166
public enum class JoinType {

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/joinWith.kt

Lines changed: 16 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.DataFrame
44
import org.jetbrains.kotlinx.dataframe.DataRow
55
import org.jetbrains.kotlinx.dataframe.Selector
6+
import org.jetbrains.kotlinx.dataframe.annotations.Interpretable
7+
import org.jetbrains.kotlinx.dataframe.annotations.Refine
68
import org.jetbrains.kotlinx.dataframe.impl.api.joinWithImpl
79

810
public interface JoinedDataRow<out A, out B> : DataRow<A> {
@@ -11,27 +13,41 @@ public interface JoinedDataRow<out A, out B> : DataRow<A> {
1113

1214
public typealias JoinExpression<A, B> = Selector<JoinedDataRow<A, B>, Boolean>
1315

16+
@Refine
17+
@Interpretable("JoinWith")
1418
public fun <A, B> DataFrame<A>.joinWith(
1519
right: DataFrame<B>,
1620
type: JoinType = JoinType.Inner,
1721
joinExpression: JoinExpression<A, B>,
1822
): DataFrame<A> = joinWithImpl(right, type, addNewColumns = type.addNewColumns, joinExpression)
1923

24+
@Refine
25+
@Interpretable("InnerJoinWith")
2026
public fun <A, B> DataFrame<A>.innerJoinWith(right: DataFrame<B>, joinExpression: JoinExpression<A, B>): DataFrame<A> =
2127
joinWith(right, JoinType.Inner, joinExpression)
2228

29+
@Refine
30+
@Interpretable("LeftJoinWith")
2331
public fun <A, B> DataFrame<A>.leftJoinWith(right: DataFrame<B>, joinExpression: JoinExpression<A, B>): DataFrame<A> =
2432
joinWith(right, JoinType.Left, joinExpression)
2533

34+
@Refine
35+
@Interpretable("RightJoinWith")
2636
public fun <A, B> DataFrame<A>.rightJoinWith(right: DataFrame<B>, joinExpression: JoinExpression<A, B>): DataFrame<A> =
2737
joinWith(right, JoinType.Right, joinExpression)
2838

39+
@Refine
40+
@Interpretable("FullJoinWith")
2941
public fun <A, B> DataFrame<A>.fullJoinWith(right: DataFrame<B>, joinExpression: JoinExpression<A, B>): DataFrame<A> =
3042
joinWith(right, JoinType.Full, joinExpression)
3143

44+
@Refine
45+
@Interpretable("FilterJoinWith")
3246
public fun <A, B> DataFrame<A>.filterJoinWith(right: DataFrame<B>, joinExpression: JoinExpression<A, B>): DataFrame<A> =
3347
joinWithImpl(right, JoinType.Inner, addNewColumns = false, joinExpression)
3448

49+
@Refine
50+
@Interpretable("ExcludeJoinWith")
3551
public fun <A, B> DataFrame<A>.excludeJoinWith(
3652
right: DataFrame<B>,
3753
joinExpression: JoinExpression<A, B>,

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/none.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package org.jetbrains.kotlinx.dataframe.api
33
import org.jetbrains.kotlinx.dataframe.DataFrame
44
import org.jetbrains.kotlinx.dataframe.columns.ColumnSet
55
import org.jetbrains.kotlinx.dataframe.columns.ColumnsResolver
6-
import org.jetbrains.kotlinx.dataframe.impl.columns.ColumnsList
6+
import org.jetbrains.kotlinx.dataframe.impl.columns.ColumnListImpl
77

88
// region ColumnsSelectionDsl
99

@@ -71,7 +71,7 @@ public interface NoneColumnsSelectionDsl {
7171
*
7272
* @return An empty [ColumnsResolver].
7373
*/
74-
public fun none(): ColumnsResolver<*> = ColumnsList<Any?>(emptyList())
74+
public fun none(): ColumnsResolver<*> = ColumnListImpl<Any?>(emptyList())
7575
}
7676

7777
// endregion

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/columns/constructors.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ package org.jetbrains.kotlinx.dataframe.columns
22

33
import org.jetbrains.kotlinx.dataframe.api.toColumnAccessor
44
import org.jetbrains.kotlinx.dataframe.impl.asList
5-
import org.jetbrains.kotlinx.dataframe.impl.columns.ColumnsList
5+
import org.jetbrains.kotlinx.dataframe.impl.columns.ColumnListImpl
66
import kotlin.reflect.KProperty
77

88
// region toColumnSet
99

1010
// region Array
1111

12-
public fun Array<out ColumnsResolver<*>>.toColumnSet(): ColumnSet<Any?> = ColumnsList(asList())
12+
public fun Array<out ColumnsResolver<*>>.toColumnSet(): ColumnSet<Any?> = ColumnListImpl(asList())
1313

1414
@JvmName("toColumnSetString")
1515
public fun Array<out String>.toColumnSet(): ColumnSet<Any?> = map { it.toColumnAccessor() }.toColumnSet()
@@ -20,15 +20,15 @@ public fun Array<out ColumnPath>.toColumnSet(): ColumnSet<Any?> = map { it.toCol
2020
public fun <C> Array<out KProperty<C>>.toColumnSet(): ColumnSet<C> = map { it.toColumnAccessor() }.toColumnSet()
2121

2222
@JvmName("toColumnSetC")
23-
public fun <C> Array<out ColumnsResolver<C>>.toColumnSet(): ColumnSet<C> = ColumnsList(asList())
23+
public fun <C> Array<out ColumnsResolver<C>>.toColumnSet(): ColumnSet<C> = ColumnListImpl(asList())
2424

2525
public fun <C> Array<out ColumnReference<C>>.toColumnSet(): ColumnSet<C> = asIterable().toColumnSet()
2626

2727
// endregion
2828

2929
// region Iterable
3030

31-
public fun Iterable<ColumnsResolver<*>>.toColumnSet(): ColumnSet<Any?> = ColumnsList(asList())
31+
public fun Iterable<ColumnsResolver<*>>.toColumnSet(): ColumnSet<Any?> = ColumnListImpl(asList())
3232

3333
@JvmName("toColumnSetString")
3434
public fun Iterable<String>.toColumnSet(): ColumnSet<Any?> = map { it.toColumnAccessor() }.toColumnSet()
@@ -40,10 +40,10 @@ public fun Iterable<ColumnPath>.toColumnSet(): ColumnSet<Any?> = map { it.toColu
4040
public fun <C> Iterable<KProperty<C>>.toColumnSet(): ColumnSet<C> = map { it.toColumnAccessor() }.toColumnSet()
4141

4242
@JvmName("toColumnSetC")
43-
public fun <C> Iterable<ColumnsResolver<C>>.toColumnSet(): ColumnSet<C> = ColumnsList(toList())
43+
public fun <C> Iterable<ColumnsResolver<C>>.toColumnSet(): ColumnSet<C> = ColumnListImpl(toList())
4444

4545
@JvmName("toColumnSetColumnReference")
46-
public fun <C> Iterable<ColumnReference<C>>.toColumnSet(): ColumnSet<C> = ColumnsList(toList())
46+
public fun <C> Iterable<ColumnReference<C>>.toColumnSet(): ColumnSet<C> = ColumnListImpl(toList())
4747

4848
// endregion
4949

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/api/join.kt

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,31 +18,23 @@ import org.jetbrains.kotlinx.dataframe.columns.ColumnKind
1818
import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
1919
import org.jetbrains.kotlinx.dataframe.columns.ColumnWithPath
2020
import org.jetbrains.kotlinx.dataframe.columns.ColumnsResolver
21-
import org.jetbrains.kotlinx.dataframe.columns.UnresolvedColumnsPolicy
2221
import org.jetbrains.kotlinx.dataframe.columns.toColumnSet
23-
import org.jetbrains.kotlinx.dataframe.impl.DataFrameReceiver
22+
import org.jetbrains.kotlinx.dataframe.impl.columns.ColumnListImpl
2423
import org.jetbrains.kotlinx.dataframe.impl.columns.ColumnsList
2524
import org.jetbrains.kotlinx.dataframe.indices
2625
import org.jetbrains.kotlinx.dataframe.kind
2726
import org.jetbrains.kotlinx.dataframe.nrow
2827
import org.jetbrains.kotlinx.dataframe.type
2928
import kotlin.reflect.full.withNullability
3029

31-
internal fun <A, B> defaultJoinColumns(left: DataFrame<A>, right: DataFrame<B>): JoinColumnsSelector<A, B> =
32-
{
33-
left.columnNames().intersect(right.columnNames().toSet())
34-
.map { it.toColumnAccessor() }
35-
.let { ColumnsList(it) }
36-
}
37-
3830
internal fun <T> defaultJoinColumns(dataFrames: Iterable<DataFrame<T>>): JoinColumnsSelector<T, T> =
3931
{
4032
dataFrames.map { it.columnNames() }
4133
.fold<List<String>, Set<String>?>(null) { set, names ->
4234
set?.intersect(names.toSet()) ?: names.toSet()
4335
}.orEmpty()
4436
.map { it.toColumnAccessor() }
45-
.let { ColumnsList(it) }
37+
.let { ColumnListImpl(it) }
4638
}
4739

4840
internal fun <C> ColumnsResolver<C>.extractJoinColumns(): List<ColumnMatch<C>> =
@@ -53,24 +45,13 @@ internal fun <C> ColumnsResolver<C>.extractJoinColumns(): List<ColumnMatch<C>> =
5345
else -> throw Exception()
5446
}
5547

56-
internal fun <A, B> DataFrame<A>.getColumns(
57-
other: DataFrame<B>,
58-
selector: JoinColumnsSelector<A, B>,
59-
): List<ColumnMatch<Any?>> {
60-
val receiver = object : DataFrameReceiver<A>(this, UnresolvedColumnsPolicy.Fail), JoinDsl<A, B> {
61-
override val right: DataFrame<B> = DataFrameReceiver(other, UnresolvedColumnsPolicy.Fail)
62-
}
63-
val columns = selector(receiver, this)
64-
return columns.extractJoinColumns()
65-
}
66-
6748
internal fun <A, B> DataFrame<A>.joinImpl(
6849
other: DataFrame<B>,
6950
joinType: JoinType = JoinType.Inner,
7051
addNewColumns: Boolean = true,
7152
selector: JoinColumnsSelector<A, B>?,
7253
): DataFrame<A> {
73-
val joinColumns = getColumns(other, selector ?: defaultJoinColumns(this, other))
54+
val joinColumns = JoinDsl.getColumns(this, other, selector ?: JoinDsl.defaultJoinColumns<A, B>(this, other))
7455

7556
val leftJoinColumns = getColumnsWithPaths { joinColumns.map { it.left }.toColumnSet() }
7657
val rightJoinColumns = other.getColumnsWithPaths { joinColumns.map { it.right }.toColumnSet() }

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/columns/ColumnsList.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,13 @@ import org.jetbrains.kotlinx.dataframe.columns.ColumnResolutionContext
44
import org.jetbrains.kotlinx.dataframe.columns.ColumnSet
55
import org.jetbrains.kotlinx.dataframe.columns.ColumnsResolver
66

7-
internal class ColumnsList<C>(val columns: List<ColumnsResolver<C>>) : ColumnSet<C> {
7+
public interface ColumnsList<C> : ColumnSet<C> {
8+
public val columns: List<ColumnsResolver<C>>
9+
}
10+
11+
internal class ColumnListImpl<C>(override val columns: List<ColumnsResolver<C>>) :
12+
ColumnSet<C>,
13+
ColumnsList<C> {
814
constructor(vararg columns: ColumnsResolver<C>) : this(columns.toList())
915

1016
override fun resolve(context: ColumnResolutionContext) = columns.flatMap { it.resolve(context) }

0 commit comments

Comments
 (0)