Skip to content

Commit cf51cc9

Browse files
committed
fix(modelql): removed duplicate definitions of the semantic in IProducingStep
In IProducing step there were the methods createFlow, createSequence and evaluate which all did basically the same computation, but on different types of input. In some cases this can have a performance benefit, but it's hard to maintain and to guarantee that they all do the same. It's not worth to keep them.
1 parent 3483efa commit cf51cc9

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+73
-389
lines changed

modelql-core/src/commonMain/kotlin/org/modelix/modelql/core/AndOperatorStep.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import kotlinx.serialization.Serializable
1919
import kotlinx.serialization.modules.SerializersModule
2020
import kotlinx.serialization.serializer
2121

22-
class AndOperatorStep() : MonoTransformingStep<IZipOutput<Boolean>, Boolean>() {
22+
class AndOperatorStep() : SimpleMonoTransformingStep<IZipOutput<Boolean>, Boolean>() {
2323

2424
override fun transform(evaluationContext: QueryEvaluationContext, input: IZipOutput<Boolean>): Boolean {
2525
return input.values.all { it == true }

modelql-core/src/commonMain/kotlin/org/modelix/modelql/core/CollectionSizeStep.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import kotlinx.serialization.Serializable
1919
import kotlinx.serialization.modules.SerializersModule
2020
import kotlinx.serialization.serializer
2121

22-
class CollectionSizeStep : MonoTransformingStep<Collection<*>, Int>() {
22+
class CollectionSizeStep : SimpleMonoTransformingStep<Collection<*>, Int>() {
2323
override fun getOutputSerializer(serializersModule: SerializersModule): KSerializer<out IStepOutput<Int>> {
2424
return serializersModule.serializer<Int>().stepOutputSerializer(this)
2525
}

modelql-core/src/commonMain/kotlin/org/modelix/modelql/core/CollectorStep.kt

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -99,11 +99,6 @@ class ListCollectorStep<E> : CollectorStep<E, List<E>>() {
9999
val outputList = inputList.map { it.value }
100100
return CollectorStepOutput(inputList, inputList, outputList)
101101
}
102-
override fun aggregate(input: Sequence<IStepOutput<E>>): IStepOutput<List<E>> {
103-
val inputList = input.toList()
104-
val outputList = inputList.map { it.value }
105-
return CollectorStepOutput(inputList, inputList, outputList)
106-
}
107102

108103
@Serializable
109104
@SerialName("toList")
@@ -132,12 +127,6 @@ class SetCollectorStep<E> : CollectorStep<E, Set<E>>() {
132127
input.collect { if (outputSet.add(it.value)) inputList.add(it) }
133128
return CollectorStepOutput(inputList, inputList, outputSet)
134129
}
135-
override fun aggregate(input: Sequence<IStepOutput<E>>): IStepOutput<Set<E>> {
136-
val inputList = ArrayList<IStepOutput<E>>()
137-
val outputSet = HashSet<E>()
138-
input.forEach { if (outputSet.add(it.value)) inputList.add(it) }
139-
return CollectorStepOutput(inputList, inputList, outputSet)
140-
}
141130

142131
@Serializable
143132
@SerialName("toSet")
@@ -173,19 +162,6 @@ class MapCollectorStep<K, V> : CollectorStep<IZip2Output<Any?, K, V>, Map<K, V>>
173162
val outputMap: Map<K, V> = internalMap.mapValues { it.value.value }
174163
return CollectorStepOutput(inputList, internalMap, outputMap)
175164
}
176-
override fun aggregate(input: Sequence<IStepOutput<IZip2Output<Any?, K, V>>>): IStepOutput<Map<K, V>> {
177-
val inputList = ArrayList<IStepOutput<IZip2Output<Any?, K, V>>>()
178-
val internalMap = HashMap<K, IStepOutput<V>>()
179-
input.forEach {
180-
val zipStepOutput = it as ZipStepOutput<IZip2Output<Any?, K, V>, Any?>
181-
if (!internalMap.containsKey(it.value.first)) {
182-
inputList.add(it)
183-
internalMap.put(zipStepOutput.values[0].value as K, zipStepOutput.values[1] as IStepOutput<V>)
184-
}
185-
}
186-
val outputMap: Map<K, V> = internalMap.mapValues { it.value.value }
187-
return CollectorStepOutput(inputList, internalMap, outputMap)
188-
}
189165

190166
@Serializable
191167
@SerialName("toMap")

modelql-core/src/commonMain/kotlin/org/modelix/modelql/core/ConstantSourceStep.kt

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,6 @@ open class ConstantSourceStep<E>(val element: E, val type: KType) : ProducingSte
5656
override fun requiresWriteAccess(): Boolean = false
5757
override fun needsCoroutineScope(): Boolean = false
5858

59-
override fun createSequence(evaluationContext: QueryEvaluationContext, queryInput: Sequence<Any?>): Sequence<E> {
60-
return sequenceOf(element)
61-
}
62-
63-
override fun evaluate(evaluationContext: QueryEvaluationContext, queryInput: Any?): Optional<E> {
64-
return Optional.of(element)
65-
}
66-
6759
override fun evaluateStatically(): E {
6860
return element
6961
}
@@ -172,3 +164,5 @@ fun String?.asMono() = createConstantSourceStep(this)
172164

173165
@JvmName("asMono_nullable")
174166
fun Set<String?>.asMono() = createConstantSourceStep(this)
167+
168+
inline fun <reified T> nullMono(): IMonoStep<T?> = ConstantSourceStep<T?>(null, typeOf<T?>())

modelql-core/src/commonMain/kotlin/org/modelix/modelql/core/CountingStep.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ class CountingStep() : AggregationStep<Any?, Int>() {
2525
return input.count().asStepOutput(this)
2626
}
2727

28-
override fun aggregate(input: Sequence<IStepOutput<Any?>>): IStepOutput<Int> = input.count().asStepOutput(this)
29-
3028
override fun createDescriptor(context: QueryGraphDescriptorBuilder) = CountDescriptor()
3129

3230
@Serializable

modelql-core/src/commonMain/kotlin/org/modelix/modelql/core/EmptyStringIfNullStep.kt

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,34 @@
1313
*/
1414
package org.modelix.modelql.core
1515

16+
import kotlinx.coroutines.flow.map
1617
import kotlinx.serialization.KSerializer
1718
import kotlinx.serialization.SerialName
1819
import kotlinx.serialization.Serializable
1920
import kotlinx.serialization.modules.SerializersModule
2021
import kotlinx.serialization.serializer
2122

2223
class EmptyStringIfNullStep : MonoTransformingStep<String?, String>() {
24+
2325
override fun getOutputSerializer(serializersModule: SerializersModule): KSerializer<out IStepOutput<String>> {
24-
return serializersModule.serializer<String>().stepOutputSerializer(this)
26+
val inputSerializer: KSerializer<IStepOutput<String?>> = getProducer().getOutputSerializer(serializersModule).upcast()
27+
return MultiplexedOutputSerializer<String>(
28+
this,
29+
listOf<KSerializer<IStepOutput<String>>>(
30+
inputSerializer as KSerializer<IStepOutput<String>>,
31+
serializersModule.serializer<String>().stepOutputSerializer(this).upcast(),
32+
),
33+
)
2534
}
2635

27-
override fun transform(evaluationContext: QueryEvaluationContext, input: String?): String {
28-
return input ?: ""
36+
override fun createFlow(input: StepFlow<String?>, context: IFlowInstantiationContext): StepFlow<String> {
37+
return input.map {
38+
if (it.value == null) {
39+
MultiplexedOutput(1, "".asStepOutput(this))
40+
} else {
41+
MultiplexedOutput(0, it.upcast())
42+
}
43+
}
2944
}
3045

3146
override fun createDescriptor(context: QueryGraphDescriptorBuilder): StepDescriptor {

modelql-core/src/commonMain/kotlin/org/modelix/modelql/core/FilteringStep.kt

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,6 @@ class FilteringStep<E>(val condition: MonoUnboundQuery<E, Boolean?>) : Transform
4343
// return input.filter { condition.evaluate(it.value).presentAndEqual(true) }
4444
}
4545

46-
override fun createSequence(evaluationContext: QueryEvaluationContext, queryInput: Sequence<Any?>): Sequence<E> {
47-
return getProducer().createSequence(evaluationContext, queryInput).filter {
48-
condition.evaluate(
49-
evaluationContext,
50-
it,
51-
).presentAndEqual(true)
52-
}
53-
}
54-
5546
override fun getOutputSerializer(serializersModule: SerializersModule): KSerializer<out IStepOutput<E>> {
5647
return getProducer().getOutputSerializer(serializersModule)
5748
}

modelql-core/src/commonMain/kotlin/org/modelix/modelql/core/FirstElementStep.kt

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,6 @@ class FirstElementStep<E>() : MonoTransformingStep<E, E>() {
2828

2929
override fun requiresSingularQueryInput(): Boolean = true
3030

31-
override fun transform(evaluationContext: QueryEvaluationContext, input: IStepOutput<E>): IStepOutput<E> {
32-
return input
33-
}
34-
35-
override fun transform(evaluationContext: QueryEvaluationContext, input: E): E {
36-
return input
37-
}
38-
3931
override fun toString(): String {
4032
return getProducer().toString() + ".first()"
4133
}

modelql-core/src/commonMain/kotlin/org/modelix/modelql/core/FirstOrNullStep.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,6 @@ class FirstOrNullStep<E>() : AggregationStep<E, E?>() {
2626
?: MultiplexedOutput(1, null.asStepOutput(this))
2727
}
2828

29-
override fun aggregate(input: Sequence<IStepOutput<E>>): IStepOutput<E?> {
30-
return input.firstOrNull() ?: null.asStepOutput(this)
31-
}
32-
3329
override fun toString(): String {
3430
return "${getProducer()}.firstOrNull()"
3531
}

modelql-core/src/commonMain/kotlin/org/modelix/modelql/core/FlatMapStep.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,6 @@ class FlatMapStep<In, Out>(val query: FluxUnboundQuery<In, Out>) : TransformingS
3636
return input.flatMapConcat { query.asFlow(context.evaluationContext, it) }
3737
}
3838

39-
override fun createSequence(evaluationContext: QueryEvaluationContext, queryInput: Sequence<Any?>): Sequence<Out> {
40-
return query.asSequence(evaluationContext, getProducer().createSequence(evaluationContext, queryInput))
41-
}
42-
4339
override fun getOutputSerializer(serializersModule: SerializersModule): KSerializer<out IStepOutput<Out>> {
4440
return query.outputStep.getOutputSerializer(serializersModule)
4541
}

0 commit comments

Comments
 (0)