Skip to content

Commit

Permalink
DOPE-212: fixed merge
Browse files Browse the repository at this point in the history
  • Loading branch information
jansigi committed May 15, 2024
1 parent 18044b8 commit 6bfa738
Show file tree
Hide file tree
Showing 7 changed files with 33 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ fun formatToQueryString(left: String, vararg right: String) =
fun formatMinimumTwoToQueryString(left: String, symbol: String, vararg right: String) =
"$left $symbol ${right.joinToString()}"

fun formatToQueryString(symbol: String, separator: String, vararg argument: String) =
"$symbol$separator${argument.joinToString(separator = ", ")}}"
fun formatToQueryStringWithSeparator(symbol: String, separator: String, vararg argument: String) =
"$symbol$separator${argument.joinToString(separator = ", ")}"

fun formatToQueryStringWithBrackets(left: String, symbol: String, right: String) = "($left $symbol $right)"
fun formatToQueryStringWithBrackets(symbol: String, vararg argument: String) =
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,37 @@
package ch.ergon.dope.resolvable.clause.model

import ch.ergon.dope.DopeQuery
import ch.ergon.dope.resolvable.clause.ISelectUnnestClause
import ch.ergon.dope.resolvable.expression.AliasedExpression
import ch.ergon.dope.resolvable.expression.unaliased.type.Field
import ch.ergon.dope.resolvable.formatToQueryString
import ch.ergon.dope.resolvable.formatMinimumTwoToQueryString
import ch.ergon.dope.validtype.ArrayType
import ch.ergon.dope.validtype.ValidType

private const val UNNEST = "UNNEST"

class UnnestClause<T : ValidType>(private val arrayTypeField: Field<ArrayType<T>>, private val parentClause: ISelectUnnestClause) :
ISelectUnnestClause {
override fun toQueryString(): String = formatToQueryString(parentClause, UNNEST, arrayTypeField)
override fun toQuery(): DopeQuery {
val parentDopeQuery = parentClause.toQuery()
val arrayTypeDopeQuery = arrayTypeField.toQuery()
return DopeQuery(
queryString = formatMinimumTwoToQueryString(parentDopeQuery.queryString, UNNEST, arrayTypeDopeQuery.queryString),
parameters = parentDopeQuery.parameters + arrayTypeDopeQuery.parameters,
)
}
}

class AliasedUnnestClause<T : ValidType>(
private val aliasedExpression: AliasedExpression<ArrayType<T>>,
private val parentClause: ISelectUnnestClause,
) : ISelectUnnestClause {
override fun toQueryString(): String = formatToQueryString(parentClause, UNNEST, aliasedExpression)
override fun toQuery(): DopeQuery {
val parentDopeQuery = parentClause.toQuery()
val aliasedExpressionDopeQuery = aliasedExpression.toQuery()
return DopeQuery(
queryString = formatMinimumTwoToQueryString(parentDopeQuery.queryString, UNNEST, aliasedExpressionDopeQuery.queryString),
parameters = parentDopeQuery.parameters + aliasedExpressionDopeQuery.parameters,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import ch.ergon.dope.DopeQuery
import ch.ergon.dope.resolvable.expression.unaliased.type.toBooleanType
import ch.ergon.dope.resolvable.expression.unaliased.type.toNumberType
import ch.ergon.dope.resolvable.expression.unaliased.type.toStringType
import ch.ergon.dope.resolvable.formatToQueryString
import ch.ergon.dope.resolvable.formatMinimumTwoToQueryString
import ch.ergon.dope.validtype.ValidType

class AliasedExpression<T : ValidType>(
Expand All @@ -14,7 +14,7 @@ class AliasedExpression<T : ValidType>(
override fun toQuery(): DopeQuery {
val unaliasedExpressionDopeQuery = unaliasedExpression.toQuery()
return DopeQuery(
queryString = formatToQueryString(unaliasedExpressionDopeQuery.queryString, "AS", alias),
queryString = formatMinimumTwoToQueryString(unaliasedExpressionDopeQuery.queryString, "AS", alias),
parameters = unaliasedExpressionDopeQuery.parameters,
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package ch.ergon.dope.resolvable.operator

import ch.ergon.dope.DopeQuery
import ch.ergon.dope.resolvable.expression.TypeExpression
import ch.ergon.dope.resolvable.formatToQueryString
import ch.ergon.dope.resolvable.formatMinimumTwoToQueryString
import ch.ergon.dope.resolvable.formatToQueryStringWithBrackets
import ch.ergon.dope.validtype.ValidType

Expand All @@ -21,7 +21,7 @@ open class InfixOperator(
)
} else {
DopeQuery(
queryString = formatToQueryString(leftDopeQuery.queryString, symbol, rightDopeQuery.queryString),
queryString = formatMinimumTwoToQueryString(leftDopeQuery.queryString, symbol, rightDopeQuery.queryString),
parameters = leftDopeQuery.parameters + rightDopeQuery.parameters,
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ package ch.ergon.dope.resolvable.operator

import ch.ergon.dope.DopeQuery
import ch.ergon.dope.resolvable.Resolvable
import ch.ergon.dope.resolvable.formatToQueryString
import ch.ergon.dope.resolvable.formatToQueryStringWithSeparator

open class PrefixOperator(private val symbol: String, private val argument: Resolvable) {
fun toPrefixQueryString(separator: String): DopeQuery {
val argumentDopeQuery = argument.toQuery()
return DopeQuery(
queryString = formatToQueryString(symbol, separator = separator, argumentDopeQuery.queryString),
queryString = formatToQueryStringWithSeparator(symbol, separator = separator, argumentDopeQuery.queryString),
parameters = argumentDopeQuery.parameters,
)
}
Expand Down
6 changes: 3 additions & 3 deletions core/src/test/kotlin/ch/ergon/dope/BooleanComparatorTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -884,7 +884,7 @@ class BooleanComparatorTest {
.where(
true.toBooleanType().and(true),
)
.build()
.build().queryString

assertEquals(expected, actual)
}
Expand All @@ -900,7 +900,7 @@ class BooleanComparatorTest {
.where(
true.toBooleanType().and(true).or(false),
)
.build()
.build().queryString

assertEquals(expected, actual)
}
Expand All @@ -916,7 +916,7 @@ class BooleanComparatorTest {
.where(
true.toBooleanType().and(true.toBooleanType().or(false)),
)
.build()
.build().queryString

assertEquals(expected, actual)
}
Expand Down
8 changes: 4 additions & 4 deletions core/src/test/kotlin/ch/ergon/dope/UnnestClauseTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class UnnestClauseTest {
val actual: String = create
.selectFrom(airline)
.unnest(alias)
.build()
.build().queryString

assertEquals(expected, actual)
}
Expand All @@ -51,7 +51,7 @@ class UnnestClauseTest {
.select(someNumberArrayField("c"))
.from(someBucket("airline"))
.unnest(someNumberArrayField("a"))
.build()
.build().queryString

assertEquals(expected, actual)
}
Expand All @@ -68,7 +68,7 @@ class UnnestClauseTest {
.unnest(aField.alias("ab"))
.unnest(someBooleanArrayField("c", someBucket("ab")))
.where(aField.isValued())
.build()
.build().queryString

assertEquals(expected, actual)
}
Expand All @@ -87,7 +87,7 @@ class UnnestClauseTest {
someStringField(bucket = b).isEqualTo("something")
.and(someStringField(bucket = someBucket("a")).isEqualTo("".asParameter("param"))),
)
.build()
.build().queryString

assertEquals(expected, actual)
}
Expand Down

0 comments on commit 6bfa738

Please sign in to comment.