@@ -14,6 +14,7 @@ import org.jetbrains.kotlinx.dataframe.Predicate
14
14
import org.jetbrains.kotlinx.dataframe.columns.*
15
15
import org.jetbrains.kotlinx.dataframe.documentation.AccessApi
16
16
import org.jetbrains.kotlinx.dataframe.hasNulls
17
+ import org.jetbrains.kotlinx.dataframe.impl.aggregation.toColumns
17
18
import org.jetbrains.kotlinx.dataframe.impl.columnName
18
19
import org.jetbrains.kotlinx.dataframe.impl.columns.*
19
20
import org.jetbrains.kotlinx.dataframe.impl.columns.tree.dfs
@@ -42,18 +43,6 @@ public interface ColumnSelectionDsl<out T> : ColumnsContainer<T> {
42
43
43
44
public operator fun <C > ColumnPath.invoke (): DataColumn <C > = getColumn(this ).cast()
44
45
45
- public operator fun <T > KProperty<T>.invoke (): DataColumn <T > = this @ColumnSelectionDsl[this ]
46
-
47
- public operator fun <T > KProperty<DataRow<T>>.invoke (): ColumnGroup <T > = this @ColumnSelectionDsl[this ]
48
-
49
- public operator fun <T > KProperty<DataFrame<T>>.invoke (): FrameColumn <T > = this @ColumnSelectionDsl[this ]
50
-
51
- public operator fun <T , R > KProperty<DataRow<T>>.get (column : KProperty <R >): DataColumn <R > = invoke()[column]
52
-
53
- public operator fun <T , R > KProperty<DataRow<T>>.get (column : KProperty <DataRow <R >>): ColumnGroup <R > = invoke()[column]
54
-
55
- public operator fun <T , R > KProperty<DataRow<T>>.get (column : KProperty <DataFrame <R >>): FrameColumn <R > = invoke()[column]
56
-
57
46
public operator fun <C > String.invoke (): DataColumn <C > = getColumn(this ).cast()
58
47
59
48
public operator fun String.get (column : String ): ColumnPath = pathOf(this , column)
@@ -80,8 +69,6 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
80
69
public operator fun String.rangeTo (endInclusive : String ): ColumnSet <* > =
81
70
toColumnAccessor().rangeTo(endInclusive.toColumnAccessor())
82
71
83
- public operator fun KProperty <* >.rangeTo (endInclusive : KProperty <* >): ColumnSet <* > = toColumnAccessor().rangeTo(endInclusive.toColumnAccessor())
84
-
85
72
public operator fun AnyColumnReference.rangeTo (endInclusive : AnyColumnReference ): ColumnSet <* > =
86
73
object : ColumnSet <Any ?> {
87
74
override fun resolve (context : ColumnResolutionContext ): List <ColumnWithPath <Any ?>> {
@@ -116,19 +103,19 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
116
103
transform { it.flatMap { col -> names.mapNotNull { col.getChild(it) } } }
117
104
}
118
105
119
- public fun <C > ColumnSet <* >.cols (firstCol : KProperty <C >, vararg otherCols : KProperty <C >): ColumnSet <C > =
120
- (listOf (firstCol) + otherCols).let { names ->
121
- transform { it.flatMap { col -> names.mapNotNull { col.getChild(it) } } }
122
- }
123
-
124
106
public fun ColumnSet <* >.cols (vararg indices : Int ): ColumnSet <Any ?> =
125
107
transform { it.flatMap { it.children().let { children -> indices.map { children[it] } } } }
126
108
127
109
public fun ColumnSet <* >.cols (range : IntRange ): ColumnSet <Any ?> =
128
- transform { it.flatMap { it.children().subList(range.first , range.last + 1 ) } }
110
+ transform { it.flatMap { it.children().subList(range.start , range.endInclusive + 1 ) } }
129
111
130
112
// region select
131
113
114
+ public fun <C > ColumnSet<DataRow<C>>.select (vararg columns : String ): ColumnSet <* > = select { columns.toColumnSet() }
115
+
116
+ public fun <C , R > ColumnSet<DataRow<C>>.select (vararg columns : KProperty <R >): ColumnSet <R > =
117
+ select { columns.toColumnSet() }
118
+
132
119
public fun <C , R > ColumnSet<DataRow<C>>.select (selector : ColumnsSelector <C , R >): ColumnSet <R > = createColumnSet {
133
120
this @select.resolve(it).flatMap { group ->
134
121
group.asColumnGroup().getColumnsWithPaths(selector).map {
@@ -137,12 +124,6 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
137
124
}
138
125
}
139
126
140
- public fun <C > ColumnSet<DataRow<C>>.select (vararg columns : String ): ColumnSet <* > = select { columns.toColumns() }
141
-
142
- public fun <C , R > ColumnSet<DataRow<C>>.select (vararg columns : ColumnReference <R >): ColumnSet <R > = select { columns.toColumns() }
143
-
144
- public fun <C , R > ColumnSet<DataRow<C>>.select (vararg columns : KProperty <R >): ColumnSet <R > = select { columns.toColumns() }
145
-
146
127
// endregion
147
128
148
129
// endregion
@@ -153,8 +134,6 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
153
134
154
135
public fun String.dfs (predicate : (ColumnWithPath <* >) -> Boolean ): ColumnSet <* > = toColumnAccessor().dfs(predicate)
155
136
156
- public fun <C > KProperty<C>.dfs (predicate : (ColumnWithPath <* >) -> Boolean ): ColumnSet <* > = toColumnAccessor().dfs(predicate)
157
-
158
137
// endregion
159
138
160
139
// region all
@@ -163,17 +142,13 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
163
142
164
143
public fun String.all (): ColumnSet <* > = toColumnAccessor().transformSingle { it.children() }
165
144
166
- public fun KProperty <* >.all (): ColumnSet <* > = toColumnAccessor().transformSingle { it.children() }
167
-
168
145
// region allDfs
169
146
170
147
public fun ColumnSet <* >.allDfs (includeGroups : Boolean = false): ColumnSet <Any ?> =
171
148
if (includeGroups) dfs { true } else dfs { ! it.isColumnGroup() }
172
149
173
150
public fun String.allDfs (includeGroups : Boolean = false): ColumnSet <Any ?> = toColumnAccessor().allDfs(includeGroups)
174
151
175
- public fun KProperty <* >.allDfs (includeGroups : Boolean = false): ColumnSet <Any ?> = toColumnAccessor().allDfs(includeGroups)
176
-
177
152
// endregion
178
153
179
154
// region allAfter
@@ -192,24 +167,13 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
192
167
193
168
public fun SingleColumn <* >.allAfter (colName : String ): ColumnSet <Any ?> = allAfter(pathOf(colName))
194
169
public fun SingleColumn <* >.allAfter (column : AnyColumnReference ): ColumnSet <Any ?> = allAfter(column.path())
195
- public fun SingleColumn <* >.allAfter (column : KProperty <* >): ColumnSet <Any ?> = allAfter(column.toColumnAccessor().path())
196
-
197
- public fun String.allAfter (colPath : ColumnPath ): ColumnSet <Any ?> = toColumnAccessor().allAfter(colPath)
198
- public fun String.allAfter (colName : String ): ColumnSet <Any ?> = toColumnAccessor().allAfter(colName)
199
- public fun String.allAfter (column : AnyColumnReference ): ColumnSet <Any ?> = toColumnAccessor().allAfter(column)
200
- public fun String.allAfter (column : KProperty <* >): ColumnSet <Any ?> = toColumnAccessor().allAfter(column)
201
-
202
- public fun KProperty <* >.allAfter (colPath : ColumnPath ): ColumnSet <Any ?> = toColumnAccessor().allAfter(colPath)
203
- public fun KProperty <* >.allAfter (colName : String ): ColumnSet <Any ?> = toColumnAccessor().allAfter(colName)
204
- public fun KProperty <* >.allAfter (column : AnyColumnReference ): ColumnSet <Any ?> = toColumnAccessor().allAfter(column)
205
- public fun KProperty <* >.allAfter (column : KProperty <* >): ColumnSet <Any ?> = toColumnAccessor().allAfter(column)
206
170
207
171
// endregion
208
172
209
- // region allFrom
173
+ // region allSince
210
174
211
175
// including current
212
- public fun SingleColumn <* >.allFrom (colPath : ColumnPath ): ColumnSet <Any ?> {
176
+ public fun SingleColumn <* >.allSince (colPath : ColumnPath ): ColumnSet <Any ?> {
213
177
var take = false
214
178
return children {
215
179
if (take) true
@@ -220,19 +184,8 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
220
184
}
221
185
}
222
186
223
- public fun SingleColumn <* >.allFrom (colName : String ): ColumnSet <Any ?> = allFrom(pathOf(colName))
224
- public fun SingleColumn <* >.allFrom (column : AnyColumnReference ): ColumnSet <Any ?> = allFrom(column.path())
225
- public fun SingleColumn <* >.allFrom (column : KProperty <* >): ColumnSet <Any ?> = allFrom(column.toColumnAccessor().path())
226
-
227
- public fun String.allFrom (colPath : ColumnPath ): ColumnSet <Any ?> = toColumnAccessor().allFrom(colPath)
228
- public fun String.allFrom (colName : String ): ColumnSet <Any ?> = toColumnAccessor().allFrom(colName)
229
- public fun String.allFrom (column : AnyColumnReference ): ColumnSet <Any ?> = toColumnAccessor().allFrom(column)
230
- public fun String.allFrom (column : KProperty <* >): ColumnSet <Any ?> = toColumnAccessor().allFrom(column)
231
-
232
- public fun KProperty <* >.allFrom (colPath : ColumnPath ): ColumnSet <Any ?> = toColumnAccessor().allFrom(colPath)
233
- public fun KProperty <* >.allFrom (colName : String ): ColumnSet <Any ?> = toColumnAccessor().allFrom(colName)
234
- public fun KProperty <* >.allFrom (column : AnyColumnReference ): ColumnSet <Any ?> = toColumnAccessor().allFrom(column)
235
- public fun KProperty <* >.allFrom (column : KProperty <* >): ColumnSet <Any ?> = toColumnAccessor().allFrom(column)
187
+ public fun SingleColumn <* >.allSince (colName : String ): ColumnSet <Any ?> = allSince(pathOf(colName))
188
+ public fun SingleColumn <* >.allSince (column : AnyColumnReference ): ColumnSet <Any ?> = allSince(column.path())
236
189
237
190
// endregion
238
191
@@ -252,24 +205,13 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
252
205
253
206
public fun SingleColumn <* >.allBefore (colName : String ): ColumnSet <Any ?> = allBefore(pathOf(colName))
254
207
public fun SingleColumn <* >.allBefore (column : AnyColumnReference ): ColumnSet <Any ?> = allBefore(column.path())
255
- public fun SingleColumn <* >.allBefore (column : KProperty <* >): ColumnSet <Any ?> = allBefore(column.toColumnAccessor().path())
256
-
257
- public fun String.allBefore (colPath : ColumnPath ): ColumnSet <Any ?> = toColumnAccessor().allBefore(colPath)
258
- public fun String.allBefore (colName : String ): ColumnSet <Any ?> = toColumnAccessor().allBefore(colName)
259
- public fun String.allBefore (column : AnyColumnReference ): ColumnSet <Any ?> = toColumnAccessor().allBefore(column)
260
- public fun String.allBefore (column : KProperty <* >): ColumnSet <Any ?> = toColumnAccessor().allBefore(column)
261
-
262
- public fun KProperty <* >.allBefore (colPath : ColumnPath ): ColumnSet <Any ?> = toColumnAccessor().allBefore(colPath)
263
- public fun KProperty <* >.allBefore (colName : String ): ColumnSet <Any ?> = toColumnAccessor().allBefore(colName)
264
- public fun KProperty <* >.allBefore (column : AnyColumnReference ): ColumnSet <Any ?> = toColumnAccessor().allBefore(column)
265
- public fun KProperty <* >.allBefore (column : KProperty <* >): ColumnSet <Any ?> = toColumnAccessor().allBefore(column)
266
208
267
209
// endregion
268
210
269
- // region allUpTo
211
+ // region allUntil
270
212
271
213
// including current
272
- public fun SingleColumn <* >.allUpTo (colPath : ColumnPath ): ColumnSet <Any ?> {
214
+ public fun SingleColumn <* >.allUntil (colPath : ColumnPath ): ColumnSet <Any ?> {
273
215
var take = true
274
216
return children {
275
217
if (! take) false
@@ -280,46 +222,21 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
280
222
}
281
223
}
282
224
283
- public fun SingleColumn <* >.allUpTo (colName : String ): ColumnSet <Any ?> = allUpTo(pathOf(colName))
284
- public fun SingleColumn <* >.allUpTo (column : AnyColumnReference ): ColumnSet <Any ?> = allUpTo(column.path())
285
- public fun SingleColumn <* >.allUpTo (column : KProperty <* >): ColumnSet <Any ?> = allUpTo(column.toColumnAccessor().path())
286
-
287
- public fun String.allUpTo (colPath : ColumnPath ): ColumnSet <Any ?> = toColumnAccessor().allUpTo(colPath)
288
- public fun String.allUpTo (colName : String ): ColumnSet <Any ?> = toColumnAccessor().allUpTo(colName)
289
- public fun String.allUpTo (column : AnyColumnReference ): ColumnSet <Any ?> = toColumnAccessor().allUpTo(column)
290
- public fun String.allUpTo (column : KProperty <* >): ColumnSet <Any ?> = toColumnAccessor().allUpTo(column)
291
-
292
- public fun KProperty <* >.allUpTo (colPath : ColumnPath ): ColumnSet <Any ?> = toColumnAccessor().allUpTo(colPath)
293
- public fun KProperty <* >.allUpTo (colName : String ): ColumnSet <Any ?> = toColumnAccessor().allUpTo(colName)
294
- public fun KProperty <* >.allUpTo (column : AnyColumnReference ): ColumnSet <Any ?> = toColumnAccessor().allUpTo(column)
295
- public fun KProperty <* >.allUpTo (column : KProperty <* >): ColumnSet <Any ?> = toColumnAccessor().allUpTo(column)
225
+ public fun SingleColumn <* >.allUntil (colName : String ): ColumnSet <Any ?> = allUntil(pathOf(colName))
226
+ public fun SingleColumn <* >.allUntil (column : AnyColumnReference ): ColumnSet <Any ?> = allUntil(column.path())
296
227
297
228
// endregion
298
229
299
230
// endregion
300
231
301
- // region groups
302
-
303
232
public fun SingleColumn <* >.groups (filter : (ColumnGroup <* >) -> Boolean = { true }): ColumnSet <AnyRow > =
304
233
children { it.isColumnGroup() && filter(it.asColumnGroup()) } as ColumnSet <AnyRow >
305
234
306
- public fun String.groups (filter : (ColumnGroup <* >) -> Boolean = { true }): ColumnSet <AnyRow > =
307
- toColumnAccessor().groups(filter)
308
-
309
- public fun KProperty <* >.groups (filter : (ColumnGroup <* >) -> Boolean = { true }): ColumnSet <AnyRow > =
310
- toColumnAccessor().groups(filter)
311
-
312
- // endregion
313
-
314
- // region children
315
-
316
- public fun ColumnSet <* >.children (predicate : (ColumnWithPath <Any ?>) -> Boolean = { true }): ColumnSet <Any ?> =
235
+ public fun <C > ColumnSet<C>.children (predicate : (ColumnWithPath <Any ?>) -> Boolean = { true }): ColumnSet <Any ?> =
317
236
transform { it.flatMap { it.children().filter { predicate(it) } } }
318
237
319
238
public fun ColumnGroupReference.children (): ColumnSet <Any ?> = transformSingle { it.children() }
320
239
321
- // endregion
322
-
323
240
public operator fun <C > List<DataColumn<C>>.get (range : IntRange ): ColumnSet <C > =
324
241
ColumnsList (subList(range.first, range.last + 1 ))
325
242
@@ -329,7 +246,6 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
329
246
transform { it.mapNotNull { it.getChild(colName) } }
330
247
331
248
public operator fun <C > ColumnSet <* >.get (column : ColumnReference <C >): ColumnSet <C > = cols(column)
332
- public operator fun <C > ColumnSet <* >.get (column : KProperty <C >): ColumnSet <C > = cols(column)
333
249
334
250
public fun SingleColumn<AnyRow>.take (n : Int ): ColumnSet <* > = transformSingle { it.children().take(n) }
335
251
public fun SingleColumn<AnyRow>.takeLast (n : Int ): ColumnSet <* > = transformSingle { it.children().takeLast(n) }
@@ -355,8 +271,8 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
355
271
public fun ColumnSet <* >.startsWith (prefix : CharSequence ): ColumnSet <Any ?> = cols { it.name.startsWith(prefix) }
356
272
public fun ColumnSet <* >.endsWith (suffix : CharSequence ): ColumnSet <Any ?> = cols { it.name.endsWith(suffix) }
357
273
358
- public fun <C > ColumnSet<C>.except (vararg other : ColumnSet <* >): ColumnSet <* > = except(other.toColumns ())
359
- public fun <C > ColumnSet<C>.except (vararg other : String ): ColumnSet <* > = except(other.toColumns ())
274
+ public fun <C > ColumnSet<C>.except (vararg other : ColumnSet <* >): ColumnSet <* > = except(other.toColumnSet ())
275
+ public fun <C > ColumnSet<C>.except (vararg other : String ): ColumnSet <* > = except(other.toColumnSet ())
360
276
361
277
public fun <C > ColumnSet<C?>.withoutNulls (): ColumnSet <C > = transform { it.filter { ! it.hasNulls } } as ColumnSet <C >
362
278
@@ -381,18 +297,9 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
381
297
toColumnAccessor().into(column.columnName)
382
298
383
299
public infix fun <C > ColumnReference<C>.named (newName : String ): ColumnReference <C > = renamedReference(newName)
384
- public infix fun <C > ColumnReference<C>.named (nameFrom : ColumnReference <* >): ColumnReference <C > = named(nameFrom.name)
385
- public infix fun <C > ColumnReference<C>.named (nameFrom : KProperty <* >): ColumnReference <C > = named(nameFrom.columnName)
300
+ public infix fun <C > ColumnReference<C>.named (name : KProperty <* >): ColumnReference <C > = named(name.columnName)
386
301
387
302
public infix fun String.named (newName : String ): ColumnReference <Any ?> = toColumnAccessor().named(newName)
388
- public infix fun String.named (nameFrom : ColumnReference <* >): ColumnReference <Any ?> = toColumnAccessor().named(nameFrom.name)
389
- public infix fun String.named (nameFrom : KProperty <* >): ColumnReference <Any ?> = toColumnAccessor().named(nameFrom.columnName)
390
-
391
- public infix fun <C > KProperty<C>.named (newName : String ): ColumnReference <C > = toColumnAccessor().named(newName)
392
-
393
- public infix fun <C > KProperty<C>.named (nameFrom : ColumnReference <* >): ColumnReference <C > = toColumnAccessor().named(nameFrom.name)
394
-
395
- public infix fun <C > KProperty<C>.named (nameFrom : KProperty <* >): ColumnReference <C > = toColumnAccessor().named(nameFrom.columnName)
396
303
397
304
// region and
398
305
@@ -433,21 +340,6 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
433
340
// endregion
434
341
435
342
public fun <C > ColumnSet<C>.distinct (): ColumnSet <C > = DistinctColumnSet (this )
436
-
437
- public fun <C > String.dfsOf (type : KType , predicate : (ColumnWithPath <C >) -> Boolean = { true }): ColumnSet <* > =
438
- toColumnAccessor().dfsOf(type, predicate)
439
-
440
- public fun <C > KProperty <* >.dfsOf (type : KType , predicate : (ColumnWithPath <C >) -> Boolean = { true }): ColumnSet <* > =
441
- toColumnAccessor().dfsOf(type, predicate)
442
-
443
- public fun String.colsOf (type : KType ): ColumnSet <Any ?> = toColumnAccessor().colsOf(type)
444
- public fun KProperty <* >.colsOf (type : KType ): ColumnSet <Any ?> = toColumnAccessor().colsOf(type)
445
-
446
- public fun <C > String.colsOf (type : KType , filter : (DataColumn <C >) -> Boolean ): ColumnSet <Any ?> =
447
- toColumnAccessor().colsOf(type, filter)
448
-
449
- public fun <C > KProperty <* >.colsOf (type : KType , filter : (DataColumn <C >) -> Boolean ): ColumnSet <Any ?> =
450
- toColumnAccessor().colsOf(type, filter)
451
343
}
452
344
453
345
public inline fun <T , reified R > ColumnsSelectionDsl<T>.expr (
@@ -458,6 +350,7 @@ public inline fun <T, reified R> ColumnsSelectionDsl<T>.expr(
458
350
459
351
internal fun <T , C > ColumnsSelector <T , C >.filter (predicate : (ColumnWithPath <C >) -> Boolean ): ColumnsSelector <T , C > =
460
352
{ this @filter(it, it).filter(predicate) }
353
+ // internal fun Columns<*>.filter(predicate: (AnyCol) -> Boolean) = transform { it.filter { predicate(it.data) } }
461
354
462
355
internal fun ColumnSet <* >.colsInternal (predicate : (AnyCol ) -> Boolean ) =
463
356
transform { it.flatMap { it.children().filter { predicate(it.data) } } }
0 commit comments