From 8fe9f3eb23249e2c7b218139852f70b2a1d8b4f8 Mon Sep 17 00:00:00 2001 From: Martina Gallati Date: Thu, 23 May 2024 17:40:50 +0200 Subject: [PATCH 1/3] DOPE-214 added backticks to tests, tried first rudimentary draft implementation --- .../dope/resolvable/QueryStringBuilder.kt | 4 +- .../resolvable/clause/model/DeleteClause.kt | 2 +- .../resolvable/clause/model/FromClause.kt | 2 +- .../resolvable/clause/model/JoinClause.kt | 2 +- .../expression/AliasedExpression.kt | 2 +- .../expression/AsteriskExpression.kt | 4 +- .../ergon/dope/resolvable/fromable/Bucket.kt | 2 +- .../test/kotlin/ch/ergon/dope/ArrayTest.kt | 30 +-- .../ch/ergon/dope/BooleanComparatorTest.kt | 112 +++++----- .../test/kotlin/ch/ergon/dope/DeleteTest.kt | 14 +- .../kotlin/ch/ergon/dope/JoinClauseTest.kt | 90 ++++---- .../ch/ergon/dope/NumberFunctionsTest.kt | 8 +- .../test/kotlin/ch/ergon/dope/OperatorTest.kt | 82 ++++---- .../test/kotlin/ch/ergon/dope/OrderByTest.kt | 6 +- .../ch/ergon/dope/ParameterizedQueriesTest.kt | 20 +- .../kotlin/ch/ergon/dope/QueryBuilderTest.kt | 72 +++---- .../ch/ergon/dope/QueryStringBuilderTest.kt | 5 +- .../ch/ergon/dope/StringFunctionsTest.kt | 198 +++++++++--------- .../test/kotlin/ch/ergon/dope/SubQueryTest.kt | 2 +- .../kotlin/ch/ergon/dope/UnnestClauseTest.kt | 8 +- 20 files changed, 333 insertions(+), 332 deletions(-) diff --git a/core/src/main/kotlin/ch/ergon/dope/resolvable/QueryStringBuilder.kt b/core/src/main/kotlin/ch/ergon/dope/resolvable/QueryStringBuilder.kt index c07cda1d..3599bd2b 100644 --- a/core/src/main/kotlin/ch/ergon/dope/resolvable/QueryStringBuilder.kt +++ b/core/src/main/kotlin/ch/ergon/dope/resolvable/QueryStringBuilder.kt @@ -15,7 +15,7 @@ fun formatToQueryStringWithBrackets(symbol: String, vararg argument: String) = fun formatPathToQueryString(name: String, path: String) = if (path.isBlank()) { - name + "`$name`" } else { - "$path.$name" + "`$path`.`$name`" } diff --git a/core/src/main/kotlin/ch/ergon/dope/resolvable/clause/model/DeleteClause.kt b/core/src/main/kotlin/ch/ergon/dope/resolvable/clause/model/DeleteClause.kt index 33b77f72..652c23ea 100644 --- a/core/src/main/kotlin/ch/ergon/dope/resolvable/clause/model/DeleteClause.kt +++ b/core/src/main/kotlin/ch/ergon/dope/resolvable/clause/model/DeleteClause.kt @@ -9,7 +9,7 @@ class DeleteClause(private val bucket: Bucket) : IDeleteClause { override fun toDopeQuery(): DopeQuery { val bucketDopeQuery = bucket.toDopeQuery() return DopeQuery( - queryString = "DELETE FROM ${bucketDopeQuery.queryString}", + queryString = "DELETE FROM `${bucketDopeQuery.queryString}`", parameters = bucketDopeQuery.parameters, ) } diff --git a/core/src/main/kotlin/ch/ergon/dope/resolvable/clause/model/FromClause.kt b/core/src/main/kotlin/ch/ergon/dope/resolvable/clause/model/FromClause.kt index 97a053d8..0a4df02f 100644 --- a/core/src/main/kotlin/ch/ergon/dope/resolvable/clause/model/FromClause.kt +++ b/core/src/main/kotlin/ch/ergon/dope/resolvable/clause/model/FromClause.kt @@ -11,7 +11,7 @@ class FromClause(private val fromable: Fromable, private val parentClause: ISele val parentDopeQuery = parentClause.toDopeQuery() val fromableDopeQuery = fromable.toDopeQuery() return DopeQuery( - queryString = formatToQueryStringWithSymbol(parentDopeQuery.queryString, "FROM", fromableDopeQuery.queryString), + queryString = formatToQueryStringWithSymbol(parentDopeQuery.queryString, "FROM", "`" + fromableDopeQuery.queryString) + "`", parameters = fromableDopeQuery.parameters + parentDopeQuery.parameters, ) } diff --git a/core/src/main/kotlin/ch/ergon/dope/resolvable/clause/model/JoinClause.kt b/core/src/main/kotlin/ch/ergon/dope/resolvable/clause/model/JoinClause.kt index 38d467e4..fc3d4435 100644 --- a/core/src/main/kotlin/ch/ergon/dope/resolvable/clause/model/JoinClause.kt +++ b/core/src/main/kotlin/ch/ergon/dope/resolvable/clause/model/JoinClause.kt @@ -17,7 +17,7 @@ sealed class SelectJoinClause : ISelectJoinClause { val bucketDopeQuery = bucket.toDopeQuery() val onConditionDopeQuery = onCondition.toDopeQuery() dopeQuery = DopeQuery( - queryString = "${parentDopeQuery.queryString} $joinType ${bucketDopeQuery.queryString} ON ${onConditionDopeQuery.queryString}", + queryString = "${parentDopeQuery.queryString} $joinType `${bucketDopeQuery.queryString}` ON `${onConditionDopeQuery.queryString}`", parameters = parentDopeQuery.parameters + bucketDopeQuery.parameters + onConditionDopeQuery.parameters, ) } diff --git a/core/src/main/kotlin/ch/ergon/dope/resolvable/expression/AliasedExpression.kt b/core/src/main/kotlin/ch/ergon/dope/resolvable/expression/AliasedExpression.kt index d37ab683..1e0920a7 100644 --- a/core/src/main/kotlin/ch/ergon/dope/resolvable/expression/AliasedExpression.kt +++ b/core/src/main/kotlin/ch/ergon/dope/resolvable/expression/AliasedExpression.kt @@ -14,7 +14,7 @@ class AliasedExpression( override fun toDopeQuery(): DopeQuery { val unaliasedExpressionDopeQuery = unaliasedExpression.toDopeQuery() return DopeQuery( - queryString = formatToQueryStringWithSymbol(unaliasedExpressionDopeQuery.queryString, "AS", alias), + queryString = formatToQueryStringWithSymbol(unaliasedExpressionDopeQuery.queryString, "AS", "`$alias`"), parameters = unaliasedExpressionDopeQuery.parameters, ) } diff --git a/core/src/main/kotlin/ch/ergon/dope/resolvable/expression/AsteriskExpression.kt b/core/src/main/kotlin/ch/ergon/dope/resolvable/expression/AsteriskExpression.kt index 4c1390a7..f66fd05a 100644 --- a/core/src/main/kotlin/ch/ergon/dope/resolvable/expression/AsteriskExpression.kt +++ b/core/src/main/kotlin/ch/ergon/dope/resolvable/expression/AsteriskExpression.kt @@ -11,10 +11,10 @@ class AsteriskExpression : Expression { private val queryString: String constructor(bucket: Bucket) { - queryString = when (bucket) { + queryString = "`" + when (bucket) { is AliasedBucket -> bucket.alias is UnaliasedBucket -> bucket.name - } + ".$ASTERISK_STRING" + } + "`.$ASTERISK_STRING" } constructor() { diff --git a/core/src/main/kotlin/ch/ergon/dope/resolvable/fromable/Bucket.kt b/core/src/main/kotlin/ch/ergon/dope/resolvable/fromable/Bucket.kt index beac7f29..eac2bf20 100644 --- a/core/src/main/kotlin/ch/ergon/dope/resolvable/fromable/Bucket.kt +++ b/core/src/main/kotlin/ch/ergon/dope/resolvable/fromable/Bucket.kt @@ -13,7 +13,7 @@ open class UnaliasedBucket(name: String) : Bucket(name) { class AliasedBucket(name: String, val alias: String) : Bucket(name) { override fun toDopeQuery(): DopeQuery = DopeQuery( - queryString = "$name AS $alias", + queryString = "$name` AS `$alias", parameters = emptyMap(), ) } diff --git a/core/src/test/kotlin/ch/ergon/dope/ArrayTest.kt b/core/src/test/kotlin/ch/ergon/dope/ArrayTest.kt index 325442f7..a9a40dad 100644 --- a/core/src/test/kotlin/ch/ergon/dope/ArrayTest.kt +++ b/core/src/test/kotlin/ch/ergon/dope/ArrayTest.kt @@ -28,7 +28,7 @@ class ArrayTest { @Test fun `should support arrays`() { val person = someBucket("person") - val expected = "SELECT [person.fname, stringField] FROM person" + val expected = "SELECT [`person`.`fname`, `stringField`] FROM `person`" val actual: String = create .select( @@ -43,7 +43,7 @@ class ArrayTest { @Test fun `should support multiple arrays`() { val person = someBucket("person") - val expected = "SELECT [stringField], [stringField] FROM person" + val expected = "SELECT [`stringField`], [`stringField`] FROM `person`" val actual: String = create .select( @@ -59,7 +59,7 @@ class ArrayTest { @Test fun `should support arrays with multiple types`() { val person = someBucket("person") - val expected = "SELECT [\"test\", 53, TRUE, stringField, person.age, booleanField] FROM person" + val expected = "SELECT [\"test\", 53, TRUE, `stringField`, `person`.`age`, `booleanField`] FROM `person`" val actual: String = create .select( @@ -81,7 +81,7 @@ class ArrayTest { @Test fun `should support array aliased`() { val person = someBucket("person") - val expected = "SELECT [stringField] AS test FROM person" + val expected = "SELECT [`stringField`] AS `test` FROM `person`" val actual: String = create .select( @@ -96,7 +96,7 @@ class ArrayTest { @Test fun `should support multiple arrays aliased`() { val person = someBucket("person") - val expected = "SELECT [stringField] AS fname, [stringField] AS true FROM person" + val expected = "SELECT [`stringField`] AS `fname`, [`stringField`] AS `true` FROM `person`" val actual: String = create .select( @@ -112,7 +112,7 @@ class ArrayTest { @Test fun `should support nested arrays`() { val person = someBucket("person") - val expected = "SELECT [stringField, [person.age, TRUE, \"string\"], 23] AS test FROM person" + val expected = "SELECT [`stringField`, [`person`.`age`, TRUE, \"string\"], 23] AS `test` FROM `person`" val actual: String = create .select( @@ -135,7 +135,7 @@ class ArrayTest { @Test fun `should support string arrays`() { val person = someBucket("person") - val expected = "SELECT [\"string\", \"hallo\"] FROM person" + val expected = "SELECT [\"string\", \"hallo\"] FROM `person`" val actual: String = create .select( @@ -153,7 +153,7 @@ class ArrayTest { @Test fun `should support stringFunction in string arrays`() { val person = someBucket("person") - val expected = "SELECT [CONCAT(\"string\", stringField), \"hallo\"] AS test, 23 FROM person" + val expected = "SELECT [CONCAT(\"string\", `stringField`), \"hallo\"] AS `test`, 23 FROM `person`" val actual: String = create .select( @@ -172,7 +172,7 @@ class ArrayTest { @Test fun `should support in array`() { val person = someBucket("person") - val expected = "SELECT TRUE IN [FALSE] FROM person" + val expected = "SELECT TRUE IN [FALSE] FROM `person`" val actual: String = create .select( @@ -191,7 +191,7 @@ class ArrayTest { @Test fun `should support in array aliased`() { val person = someBucket("person") - val expected = "SELECT TRUE IN [FALSE] AS test FROM person" + val expected = "SELECT TRUE IN [FALSE] AS `test` FROM `person`" val actual: String = create .select( @@ -209,7 +209,7 @@ class ArrayTest { @Test fun `should support in array with boolean and collection`() { - val expected = "SELECT TRUE IN [FALSE, TRUE] AS test FROM person" + val expected = "SELECT TRUE IN [FALSE, TRUE] AS `test` FROM `person`" val actual: String = create .select( @@ -228,7 +228,7 @@ class ArrayTest { @Test fun `should support in array with string and collection`() { - val expected = "SELECT \"test\" IN [stringField, \"string\"] AS test FROM person" + val expected = "SELECT \"test\" IN [`stringField`, \"string\"] AS `test` FROM `person`" val actual: String = create .select( @@ -247,7 +247,7 @@ class ArrayTest { @Test fun `should support in array with number and collection`() { - val expected = "SELECT 3 IN [numberField, 23] AS test FROM someBucket" + val expected = "SELECT 3 IN [`numberField`, 23] AS `test` FROM `someBucket`" val actual: String = create .select( @@ -266,7 +266,7 @@ class ArrayTest { @Test fun `should support in array with field and collection`() { - val expected = "SELECT numberField IN [23] AS test FROM person" + val expected = "SELECT `numberField` IN [23] AS `test` FROM `person`" val actual: String = create .select( @@ -285,7 +285,7 @@ class ArrayTest { @Test fun `should support in array as whereClause`() { val person = someBucket("person") - val expected = "SELECT * FROM person WHERE stringField IN [\"string\", \"hallo\"]" + val expected = "SELECT * FROM `person` WHERE `stringField` IN [\"string\", \"hallo\"]" val actual: String = create .selectFrom( diff --git a/core/src/test/kotlin/ch/ergon/dope/BooleanComparatorTest.kt b/core/src/test/kotlin/ch/ergon/dope/BooleanComparatorTest.kt index 6700fdee..845794ec 100644 --- a/core/src/test/kotlin/ch/ergon/dope/BooleanComparatorTest.kt +++ b/core/src/test/kotlin/ch/ergon/dope/BooleanComparatorTest.kt @@ -39,7 +39,7 @@ class BooleanComparatorTest { @Test fun `should support greater than number`() { - val expected = "SELECT * FROM someBucket WHERE numberField > 5" + val expected = "SELECT * FROM `someBucket` WHERE `numberField` > 5" val actual = create .selectFrom(someBucket()) @@ -52,7 +52,7 @@ class BooleanComparatorTest { @Test fun `should support number is greater than a number`() { - val expected = "SELECT * FROM someBucket WHERE 2 > 4" + val expected = "SELECT * FROM `someBucket` WHERE 2 > 4" val actual = create .selectAsterisk() @@ -67,7 +67,7 @@ class BooleanComparatorTest { @Test fun `should support number is greater than a numberType`() { - val expected = "SELECT * FROM someBucket WHERE 2 > 4" + val expected = "SELECT * FROM `someBucket` WHERE 2 > 4" val actual = create .selectAsterisk() @@ -82,7 +82,7 @@ class BooleanComparatorTest { @Test fun `should support numberType is greater than a number`() { - val expected = "SELECT * FROM someBucket WHERE 2 > 4" + val expected = "SELECT * FROM `someBucket` WHERE 2 > 4" val actual = create .selectAsterisk() @@ -97,7 +97,7 @@ class BooleanComparatorTest { @Test fun `should support greater than with a field and string`() { - val expected = "SELECT * FROM someBucket WHERE stringField > \"a\"" + val expected = "SELECT * FROM `someBucket` WHERE `stringField` > \"a\"" val actual = create .selectFrom(someBucket()) @@ -110,7 +110,7 @@ class BooleanComparatorTest { @Test fun `should support string is greater than a string`() { - val expected = "SELECT * FROM someBucket WHERE \"hallo\" > \"test\"" + val expected = "SELECT * FROM `someBucket` WHERE \"hallo\" > \"test\"" val actual = create .selectAsterisk() @@ -125,7 +125,7 @@ class BooleanComparatorTest { @Test fun `should support stringType is greater than a string`() { - val expected = "SELECT * FROM someBucket WHERE \"hallo\" > \"test\"" + val expected = "SELECT * FROM `someBucket` WHERE \"hallo\" > \"test\"" val actual = create .selectAsterisk() @@ -140,7 +140,7 @@ class BooleanComparatorTest { @Test fun `should support string is greater than a stringType`() { - val expected = "SELECT * FROM someBucket WHERE \"hallo\" > \"test\"" + val expected = "SELECT * FROM `someBucket` WHERE \"hallo\" > \"test\"" val actual = create .selectAsterisk() @@ -155,7 +155,7 @@ class BooleanComparatorTest { @Test fun `should support greater than with a string and a field`() { - val expected = "SELECT * FROM someBucket WHERE \"a\" > stringField" + val expected = "SELECT * FROM `someBucket` WHERE \"a\" > `stringField`" val actual = create .selectFrom(someBucket()) @@ -168,7 +168,7 @@ class BooleanComparatorTest { @Test fun `should support less than with a field and a number`() { - val expected = "SELECT * FROM someBucket WHERE numberField < 5" + val expected = "SELECT * FROM `someBucket` WHERE `numberField` < 5" val actual = create .selectFrom( @@ -182,7 +182,7 @@ class BooleanComparatorTest { @Test fun `should support less than with a number and a field`() { - val expected = "SELECT * FROM someBucket WHERE 5 < numberField" + val expected = "SELECT * FROM `someBucket` WHERE 5 < `numberField`" val actual = create .selectFrom(someBucket()) @@ -195,7 +195,7 @@ class BooleanComparatorTest { @Test fun `should support number is less than a number`() { - val expected = "SELECT * FROM someBucket WHERE 5 < 7" + val expected = "SELECT * FROM `someBucket` WHERE 5 < 7" val actual = create .selectAsterisk() @@ -210,7 +210,7 @@ class BooleanComparatorTest { @Test fun `should support numberType is less than a number`() { - val expected = "SELECT * FROM someBucket WHERE 5 < 7" + val expected = "SELECT * FROM `someBucket` WHERE 5 < 7" val actual = create .selectAsterisk() @@ -225,7 +225,7 @@ class BooleanComparatorTest { @Test fun `should support number is less than a numberType`() { - val expected = "SELECT * FROM someBucket WHERE 5 < 7" + val expected = "SELECT * FROM `someBucket` WHERE 5 < 7" val actual = create .selectAsterisk() @@ -240,7 +240,7 @@ class BooleanComparatorTest { @Test fun `should support is less than with a string`() { - val expected = "SELECT * FROM someBucket WHERE stringField < \"a\"" + val expected = "SELECT * FROM `someBucket` WHERE `stringField` < \"a\"" val actual = create .selectFrom(someBucket()) @@ -253,7 +253,7 @@ class BooleanComparatorTest { @Test fun `should support string is less than a string`() { - val expected = "SELECT * FROM someBucket WHERE \"hallo\" < \"test\"" + val expected = "SELECT * FROM `someBucket` WHERE \"hallo\" < \"test\"" val actual = create .selectAsterisk() @@ -268,7 +268,7 @@ class BooleanComparatorTest { @Test fun `should support stringType is less than a string`() { - val expected = "SELECT * FROM someBucket WHERE \"hallo\" < \"test\"" + val expected = "SELECT * FROM `someBucket` WHERE \"hallo\" < \"test\"" val actual = create .selectAsterisk() @@ -283,7 +283,7 @@ class BooleanComparatorTest { @Test fun `should support string is less than a stringType`() { - val expected = "SELECT * FROM someBucket WHERE \"hallo\" < \"test\"" + val expected = "SELECT * FROM `someBucket` WHERE \"hallo\" < \"test\"" val actual = create .selectAsterisk() @@ -298,7 +298,7 @@ class BooleanComparatorTest { @Test fun `should support like with a string`() { - val expected = "SELECT * FROM someBucket WHERE stringField LIKE \"_b%\"" + val expected = "SELECT * FROM `someBucket` WHERE `stringField` LIKE \"_b%\"" val actual = create .selectFrom(someBucket()) @@ -311,7 +311,7 @@ class BooleanComparatorTest { @Test fun `should support like with a type`() { - val expected = "SELECT * FROM someBucket WHERE stringField LIKE \"_b%\"" + val expected = "SELECT * FROM `someBucket` WHERE `stringField` LIKE \"_b%\"" val actual = create .selectFrom(someBucket()) @@ -324,7 +324,7 @@ class BooleanComparatorTest { @Test fun `should support not like with a string`() { - val expected = "SELECT * FROM someBucket WHERE email NOT LIKE \"%@yahoo.com\"" + val expected = "SELECT * FROM `someBucket` WHERE `email` NOT LIKE \"%@yahoo.com\"" val actual: String = create .selectFrom(someBucket()) @@ -337,7 +337,7 @@ class BooleanComparatorTest { @Test fun `should support not like with a type`() { - val expected = "SELECT * FROM someBucket WHERE stringField NOT LIKE \"_b%\"" + val expected = "SELECT * FROM `someBucket` WHERE `stringField` NOT LIKE \"_b%\"" val actual = create .selectFrom(someBucket()) @@ -350,7 +350,7 @@ class BooleanComparatorTest { @Test fun `should support is null`() { - val expected = "SELECT * FROM someBucket WHERE stringField IS NULL" + val expected = "SELECT * FROM `someBucket` WHERE `stringField` IS NULL" val actual = create .selectFrom(someBucket()) @@ -363,7 +363,7 @@ class BooleanComparatorTest { @Test fun `should support is not null`() { - val expected = "SELECT * FROM someBucket WHERE stringField IS NOT NULL" + val expected = "SELECT * FROM `someBucket` WHERE `stringField` IS NOT NULL" val actual = create .selectFrom(someBucket()) @@ -376,7 +376,7 @@ class BooleanComparatorTest { @Test fun `should support is missing`() { - val expected = "SELECT * FROM someBucket WHERE stringField IS MISSING" + val expected = "SELECT * FROM `someBucket` WHERE `stringField` IS MISSING" val actual = create .selectFrom(someBucket()) @@ -389,7 +389,7 @@ class BooleanComparatorTest { @Test fun `should support is not missing`() { - val expected = "SELECT * FROM someBucket WHERE stringField IS NOT MISSING" + val expected = "SELECT * FROM `someBucket` WHERE `stringField` IS NOT MISSING" val actual = create .selectFrom(someBucket()) @@ -402,7 +402,7 @@ class BooleanComparatorTest { @Test fun `should support is valued`() { - val expected = "SELECT * FROM someBucket WHERE stringField IS VALUED" + val expected = "SELECT * FROM `someBucket` WHERE `stringField` IS VALUED" val actual = create .selectFrom(someBucket()) @@ -415,7 +415,7 @@ class BooleanComparatorTest { @Test fun `should support is not valued`() { - val expected = "SELECT * FROM someBucket WHERE stringField IS NOT VALUED" + val expected = "SELECT * FROM `someBucket` WHERE `stringField` IS NOT VALUED" val actual = create .selectFrom(someBucket()) @@ -428,7 +428,7 @@ class BooleanComparatorTest { @Test fun `should support is not equal to with number`() { - val expected = "SELECT * FROM someBucket WHERE 12 != 5" + val expected = "SELECT * FROM `someBucket` WHERE 12 != 5" val actual: String = create .selectAsterisk() @@ -442,7 +442,7 @@ class BooleanComparatorTest { @Test fun `should support number is not equal to with number`() { - val expected = "SELECT * FROM someBucket WHERE 12 != 5" + val expected = "SELECT * FROM `someBucket` WHERE 12 != 5" val actual: String = create .selectAsterisk() @@ -456,7 +456,7 @@ class BooleanComparatorTest { @Test fun `should support numberType is not equal to with number`() { - val expected = "SELECT * FROM someBucket WHERE 12 != 5" + val expected = "SELECT * FROM `someBucket` WHERE 12 != 5" val actual: String = create .selectAsterisk() @@ -470,7 +470,7 @@ class BooleanComparatorTest { @Test fun `should support number is not equal to with numberType`() { - val expected = "SELECT * FROM someBucket WHERE 12 != 5" + val expected = "SELECT * FROM `someBucket` WHERE 12 != 5" val actual: String = create .selectAsterisk() @@ -484,7 +484,7 @@ class BooleanComparatorTest { @Test fun `should support is not equal to with numberField and number`() { - val expected = "SELECT * FROM someBucket WHERE numberField != 5" + val expected = "SELECT * FROM `someBucket` WHERE `numberField` != 5" val actual: String = create .selectAsterisk() @@ -498,7 +498,7 @@ class BooleanComparatorTest { @Test fun `should support is not equal to with number and numberField`() { - val expected = "SELECT * FROM someBucket WHERE 3 != numberField" + val expected = "SELECT * FROM `someBucket` WHERE 3 != `numberField`" val actual: String = create .selectAsterisk() @@ -512,7 +512,7 @@ class BooleanComparatorTest { @Test fun `should support is not equal to with string`() { - val expected = "SELECT * FROM someBucket WHERE \"test\" != \"hallo\"" + val expected = "SELECT * FROM `someBucket` WHERE \"test\" != \"hallo\"" val actual: String = create .selectAsterisk() @@ -526,7 +526,7 @@ class BooleanComparatorTest { @Test fun `should support is not equal to with stringField and string`() { - val expected = "SELECT * FROM someBucket WHERE stringField != \"5\"" + val expected = "SELECT * FROM `someBucket` WHERE `stringField` != \"5\"" val actual: String = create .selectAsterisk() @@ -540,7 +540,7 @@ class BooleanComparatorTest { @Test fun `should support is greater or equal to with number`() { - val expected = "SELECT * FROM someBucket WHERE 12 >= 5" + val expected = "SELECT * FROM `someBucket` WHERE 12 >= 5" val actual: String = create .selectAsterisk() @@ -554,7 +554,7 @@ class BooleanComparatorTest { @Test fun `should support number is greater or equal to with numberType`() { - val expected = "SELECT * FROM someBucket WHERE 12 >= 5" + val expected = "SELECT * FROM `someBucket` WHERE 12 >= 5" val actual: String = create .selectAsterisk() @@ -568,7 +568,7 @@ class BooleanComparatorTest { @Test fun `should support numberType is greater or equal to with number`() { - val expected = "SELECT * FROM someBucket WHERE 12 >= 5" + val expected = "SELECT * FROM `someBucket` WHERE 12 >= 5" val actual: String = create .selectAsterisk() @@ -582,7 +582,7 @@ class BooleanComparatorTest { @Test fun `should support string is greater or equal to with stringType`() { - val expected = "SELECT * FROM someBucket WHERE \"hallo\" >= \"test\"" + val expected = "SELECT * FROM `someBucket` WHERE \"hallo\" >= \"test\"" val actual: String = create .selectAsterisk() @@ -596,7 +596,7 @@ class BooleanComparatorTest { @Test fun `should support stringType is greater or equal to with string`() { - val expected = "SELECT * FROM someBucket WHERE stringField >= \"test\"" + val expected = "SELECT * FROM `someBucket` WHERE `stringField` >= \"test\"" val actual: String = create .selectAsterisk() @@ -610,7 +610,7 @@ class BooleanComparatorTest { @Test fun `should support is greater or equal to with numberField and number`() { - val expected = "SELECT * FROM someBucket WHERE numberField >= 5" + val expected = "SELECT * FROM `someBucket` WHERE `numberField` >= 5" val actual: String = create .selectAsterisk() @@ -624,7 +624,7 @@ class BooleanComparatorTest { @Test fun `should support is greater or equal to with number and numberField`() { - val expected = "SELECT * FROM someBucket WHERE 3 >= numberField" + val expected = "SELECT * FROM `someBucket` WHERE 3 >= `numberField`" val actual: String = create .selectAsterisk() @@ -638,7 +638,7 @@ class BooleanComparatorTest { @Test fun `should support is greater or equal to with string`() { - val expected = "SELECT * FROM someBucket WHERE \"test\" >= \"hallo\"" + val expected = "SELECT * FROM `someBucket` WHERE \"test\" >= \"hallo\"" val actual: String = create .selectAsterisk() @@ -652,7 +652,7 @@ class BooleanComparatorTest { @Test fun `should support is greater or equal to with stringField and string`() { - val expected = "SELECT * FROM someBucket WHERE stringField >= \"5\"" + val expected = "SELECT * FROM `someBucket` WHERE `stringField` >= \"5\"" val actual: String = create .selectAsterisk() @@ -666,7 +666,7 @@ class BooleanComparatorTest { @Test fun `should support is greater or equal to with boolean and stringField`() { - val expected = "SELECT * FROM someBucket WHERE \"test\" >= stringField" + val expected = "SELECT * FROM `someBucket` WHERE \"test\" >= `stringField`" val actual: String = create .selectAsterisk() @@ -680,7 +680,7 @@ class BooleanComparatorTest { @Test fun `should support is Less or equal to with number`() { - val expected = "SELECT * FROM someBucket WHERE 12 <= 5" + val expected = "SELECT * FROM `someBucket` WHERE 12 <= 5" val actual: String = create .selectAsterisk() @@ -694,7 +694,7 @@ class BooleanComparatorTest { @Test fun `should support is Less or equal to with numberField and number`() { - val expected = "SELECT * FROM someBucket WHERE numberField <= 5" + val expected = "SELECT * FROM `someBucket` WHERE `numberField` <= 5" val actual: String = create .selectAsterisk() @@ -708,7 +708,7 @@ class BooleanComparatorTest { @Test fun `should support is Less or equal to with number and numberField`() { - val expected = "SELECT * FROM someBucket WHERE 3 <= numberField" + val expected = "SELECT * FROM `someBucket` WHERE 3 <= `numberField`" val actual: String = create .selectAsterisk() @@ -722,7 +722,7 @@ class BooleanComparatorTest { @Test fun `should support is Less or equal to with string`() { - val expected = "SELECT * FROM someBucket WHERE \"test\" <= \"hallo\"" + val expected = "SELECT * FROM `someBucket` WHERE \"test\" <= \"hallo\"" val actual: String = create .selectAsterisk() @@ -736,7 +736,7 @@ class BooleanComparatorTest { @Test fun `should support is Less or equal to with stringField and string`() { - val expected = "SELECT * FROM someBucket WHERE stringField <= \"5\"" + val expected = "SELECT * FROM `someBucket` WHERE `stringField` <= \"5\"" val actual: String = create .selectAsterisk() @@ -750,7 +750,7 @@ class BooleanComparatorTest { @Test fun `should Support Where With Like`() { - val expected = "SELECT stringField, email FROM someBucket WHERE email LIKE \"%@yahoo.com\"" + val expected = "SELECT `stringField`, `email` FROM `someBucket` WHERE `email` LIKE \"%@yahoo.com\"" val actual: String = create.select( someStringField(), @@ -768,7 +768,7 @@ class BooleanComparatorTest { @Test fun `should Support Where With Like Chained`() { - val expected = "SELECT stringField, numberField FROM someBucket WHERE (email LIKE \"%@gmail.com\" AND numberField = 46)" + val expected = "SELECT `stringField`, `numberField` FROM `someBucket` WHERE (`email` LIKE \"%@gmail.com\" AND `numberField` = 46)" val actual: String = create.select( someStringField(), @@ -875,7 +875,7 @@ class BooleanComparatorTest { @Test fun `should add brackets to one Boolean comparator`() { - val expected = "SELECT * FROM someBucket WHERE (TRUE AND TRUE)" + val expected = "SELECT * FROM `someBucket` WHERE (TRUE AND TRUE)" val actual: String = create .selectAsterisk() .from( @@ -891,7 +891,7 @@ class BooleanComparatorTest { @Test fun `should add first bracket pair to two Boolean comparators`() { - val expected = "SELECT * FROM someBucket WHERE ((TRUE AND TRUE) OR FALSE)" + val expected = "SELECT * FROM `someBucket` WHERE ((TRUE AND TRUE) OR FALSE)" val actual: String = create .selectAsterisk() .from( @@ -907,7 +907,7 @@ class BooleanComparatorTest { @Test fun `should add second bracket pair to two Boolean comparators`() { - val expected = "SELECT * FROM someBucket WHERE (TRUE AND (TRUE OR FALSE))" + val expected = "SELECT * FROM `someBucket` WHERE (TRUE AND (TRUE OR FALSE))" val actual: String = create .selectAsterisk() .from( diff --git a/core/src/test/kotlin/ch/ergon/dope/DeleteTest.kt b/core/src/test/kotlin/ch/ergon/dope/DeleteTest.kt index 45a29643..65998d6d 100644 --- a/core/src/test/kotlin/ch/ergon/dope/DeleteTest.kt +++ b/core/src/test/kotlin/ch/ergon/dope/DeleteTest.kt @@ -21,7 +21,7 @@ class DeleteTest { @Test fun `should support delete from`() { - val expected = "DELETE FROM someBucket" + val expected = "DELETE FROM `someBucket`" val actual: String = create .deleteFrom(someBucket()) @@ -32,7 +32,7 @@ class DeleteTest { @Test fun `should support delete from with where`() { - val expected = "DELETE FROM someBucket WHERE TRUE" + val expected = "DELETE FROM `someBucket` WHERE TRUE" val actual: String = create .deleteFrom(someBucket()) @@ -44,7 +44,7 @@ class DeleteTest { @Test fun `should support delete from with limit`() { - val expected = "DELETE FROM someBucket LIMIT 10" + val expected = "DELETE FROM `someBucket` LIMIT 10" val actual: String = create .deleteFrom(someBucket()) @@ -56,7 +56,7 @@ class DeleteTest { @Test fun `should support delete from with offset`() { - val expected = "DELETE FROM someBucket OFFSET 10" + val expected = "DELETE FROM `someBucket` OFFSET 10" val actual: String = create .deleteFrom(someBucket()) @@ -68,7 +68,7 @@ class DeleteTest { @Test fun `should support delete from with returning`() { - val expected = "DELETE FROM someBucket RETURNING stringField" + val expected = "DELETE FROM `someBucket` RETURNING `stringField`" val actual: String = create .deleteFrom(someBucket()) @@ -80,7 +80,7 @@ class DeleteTest { @Test fun `should support delete from with multiple returning`() { - val expected = "DELETE FROM someBucket RETURNING stringField, numberField" + val expected = "DELETE FROM `someBucket` RETURNING `stringField`, `numberField`" val actual: String = create .deleteFrom(someBucket()) @@ -92,7 +92,7 @@ class DeleteTest { @Test fun `should support delete`() { - val expected = "DELETE FROM someBucket WHERE (someBucket.age = 2 AND TRUE) LIMIT 7 OFFSET 10 RETURNING stringField" + val expected = "DELETE FROM `someBucket` WHERE (`someBucket`.`age` = 2 AND TRUE) LIMIT 7 OFFSET 10 RETURNING `stringField`" val actual: String = create .deleteFrom(someBucket()) diff --git a/core/src/test/kotlin/ch/ergon/dope/JoinClauseTest.kt b/core/src/test/kotlin/ch/ergon/dope/JoinClauseTest.kt index b837dda0..1418ecae 100644 --- a/core/src/test/kotlin/ch/ergon/dope/JoinClauseTest.kt +++ b/core/src/test/kotlin/ch/ergon/dope/JoinClauseTest.kt @@ -29,7 +29,7 @@ class JoinClauseTest { @Test fun `should support join`() { - val expected = "SELECT * FROM route JOIN airline ON route.airlineid = META(airline).id WHERE airline.country = \"France\"" + val expected = "SELECT * FROM `route` JOIN `airline` ON `route`.`airlineid` = META(`airline`).`id` WHERE `airline`.`country` = \"France\"" val actual = create .selectAsterisk() @@ -51,7 +51,7 @@ class JoinClauseTest { @Test fun `Should support left join`() { - val expected = "SELECT * FROM route LEFT JOIN airline ON route.airlineid = META(airline).id WHERE route.sourceairport = \"SFO\"" + val expected = "SELECT * FROM `route` LEFT JOIN `airline` ON `route`.`airlineid` = META(`airline`).`id` WHERE `route`.`sourceairport` = \"SFO\"" val actual = create .selectAsterisk() @@ -71,7 +71,7 @@ class JoinClauseTest { @Test fun `Should support right outer join`() { - val expected = "SELECT * FROM route RIGHT JOIN airline ON route.airlineid = META(airline).id WHERE route.sourceairport = \"SFO\"" + val expected = "SELECT * FROM `route` RIGHT JOIN `airline` ON `route`.`airlineid` = META(`airline`).`id` WHERE `route`.`sourceairport` = \"SFO\"" val actual = create .selectAsterisk() @@ -95,9 +95,9 @@ class JoinClauseTest { @Test fun `Should support complex inner join`() { - val expected = "SELECT route.airlineid, airline.iota, route.sourceairport, " + - "route.destinationairport FROM route INNER JOIN airline ON route.airlineid = " + - "META(airline).id WHERE route.destinationairport = \"SFO\" ORDER BY sourceairport" + val expected = "SELECT `route`.`airlineid`, `airline`.`iota`, `route`.`sourceairport`, " + + "`route``.destinationairport` FROM `route` INNER JOIN `airline` ON `route`.`airlineid` = " + + "META(`airline`).`id` WHERE `route`.`destinationairport` = \"SFO\" ORDER BY `sourceairport`" val actual = create.select( someStringField("airlineid", route), @@ -133,11 +133,11 @@ class JoinClauseTest { val lmark = someBucket("landmark").alias("lmark") val expected = - "SELECT DISTINCT MIN(aport.airportname) AS Airport__Name, " + - "MIN(aport.tz) AS Airport__Time, MIN(lmark.name) AS Landmark_Name " + - "FROM airport AS aport LEFT JOIN landmark AS lmark ON (aport.city = " + - "lmark.city AND lmark.country = \"United States\") GROUP BY " + - "aport.airportname ORDER BY aport.airportname LIMIT 4" + "SELECT DISTINCT MIN(`aport`.`airportname`) AS `Airport__Name, " + + "MIN(`aport`.`tz`) AS `Airport__Time`, MIN(`lmark`.`name`) AS `Landmark_Name` " + + "FROM `airport` AS `aport` LEFT JOIN `landmark` AS `lmark` ON (`aport`.`city` = " + + "`lmark`.`city` AND `lmark`.`country` = \"United States\") GROUP BY " + + "`aport`.`airportname` ORDER BY `aport`.`airportname` LIMIT 4" val actual = create.selectDistinct( min( @@ -183,11 +183,11 @@ class JoinClauseTest { val lmark = someBucket("landmark").alias("lmark") val expected = - "SELECT DISTINCT MIN(aport.airportname) AS Airport__Name, " + - "MIN(aport.tz) AS Airport__Time, MIN(lmark.name) AS Landmark_Name " + - "FROM airport AS aport RIGHT JOIN landmark AS lmark ON (aport.city = " + - "lmark.city AND lmark.country = \"United States\") GROUP BY " + - "aport.airportname ORDER BY aport.airportname LIMIT 4" + "SELECT DISTINCT MIN(`aport`.`airportname`) AS `Airport__Name`, " + + "MIN(`aport`.`tz`) AS `Airport__Time`, MIN(`lmark`.`name`) AS `Landmark_Name` " + + "FROM `airport` AS `aport` RIGHT JOIN `landmark` AS `lmark` ON (`aport`.`city` = " + + "`lmark`.`city` AND `lmark`.`country` = \"United States\") GROUP BY " + + "`aport`.`airportname` ORDER BY `aport`.`airportname` LIMIT 4" val actual = create.selectDistinct( min( @@ -242,10 +242,10 @@ class JoinClauseTest { @Test fun `Inner Lookup Join`() { - val expected = "SELECT DISTINCT route.destinationairport, route.stops, " + - "route.airline, airline.name, airline.callsign " + - "FROM route JOIN airline ON KEYS route.airlineid " + - "WHERE (route.sourceairport = \"SFO\" AND route.stops = 0) LIMIT 4" + val expected = "SELECT DISTINCT `route`.`destinationairport`, `route`.`stops`, " + + "`route`.`airline`, `airline`.`name`, `airline`.`callsign` " + + "FROM `route` JOIN `airline` ON KEYS `route`.`airlineid` " + + "WHERE (`route`.`sourceairport` = \"SFO\" AND `route`.`stops` = 0) LIMIT 4" val actual = create.selectDistinct( someStringField("destinationairport", route), @@ -275,10 +275,10 @@ class JoinClauseTest { @Test fun `Left Outer Lookup Join`() { - val expected = "SELECT route.airline, route.sourceairport, " + - "route.destinationairport, airline.callsign FROM route LEFT JOIN airline " + - "ON KEYS route.airlineid WHERE (route.destinationairport = " + - "\"ATL\" AND route.sourceairport = \"SEA\")" + val expected = "SELECT `route`.`airline`, `route`.`sourceairport`, " + + "`route`.`destinationairport`, `airline`.`callsign` FROM `route` LEFT JOIN `airline` " + + "ON KEYS `route`.`airlineid` WHERE (`route`.`destinationairport` = " + + "\"ATL\" AND `route`.`sourceairport` = \"SEA\")" val actual = create.select( someStringField("airline", route), @@ -305,10 +305,10 @@ class JoinClauseTest { @Test fun `Use INDEX join to flip the direction`() { - val expected = "SELECT DISTINCT route.destinationairport, " + - "route.stops, route.airline, airline.name, airline.callsign " + - "FROM route JOIN airline ON KEYS route.airlineid " + - "WHERE airline.icao = \"SWA\" LIMIT 4" + val expected = "SELECT DISTINCT `route`.`destinationairport`, " + + "`route`.`stops`, `route`.`airline`, `airline`.`name`, `airline`.`callsign` " + + "FROM `route` RIGHT JOIN `airline` ON KEYS `route`.`airlineid` " + + "WHERE `airline`.`icao` = \"SWA\" LIMIT 4" val actual = create.selectDistinct( someStringField("destinationairport", route), @@ -332,10 +332,10 @@ class JoinClauseTest { @Test fun `Use INDEX right join to flip the direction`() { - val expected = "SELECT DISTINCT route.destinationairport, " + - "route.stops, route.airline, airline.name, airline.callsign " + - "FROM route RIGHT JOIN airline ON KEYS route.airlineid " + - "WHERE airline.icao = \"SWA\" LIMIT 4" + val expected = "SELECT DISTINCT `route`.`destinationairport`, " + + "`route`.`stops`, `route`.`airline`, `airline`.`name`, `airline`.`callsign` " + + "FROM `route` RIGHT JOIN `airline` ON KEYS `route`.`airlineid` " + + "WHERE `airline`.`icao` = \"SWA\" LIMIT 4" val actual = create.selectDistinct( someStringField("destinationairport", route), @@ -360,9 +360,9 @@ class JoinClauseTest { @Test fun `Simple Join Example`() { val expected = "SELECT * " + - "FROM route AS r " + - "JOIN airline AS a " + - "ON r.airlineid = META(a).id" + "FROM `route` AS `r` " + + "JOIN `airline` AS `a` " + + "ON `r`.`airlineid` = META(`a`).`id`" val r = someBucket("route").alias("r") val a = airline.alias("a") @@ -383,7 +383,7 @@ class JoinClauseTest { @Test fun `Simple Join Example 2`() { - val expected = "SELECT * FROM route AS r JOIN airline ON KEYS r.airlineid" + val expected = "SELECT * FROM `route` AS `r` JOIN `airline` ON KEYS `r`.`airlineid`" val r = someBucket("route").alias("r") @@ -401,10 +401,10 @@ class JoinClauseTest { @Test fun `Use INDEX inner join to flip the direction`() { - val expected = "SELECT DISTINCT route.destinationairport, " + - "route.stops, route.airline, airline.name, airline.callsign " + - "FROM route INNER JOIN airline ON KEYS route.airlineid " + - "WHERE airline.icao = \"SWA\" LIMIT 4" + val expected = "SELECT DISTINCT `route`.`destinationairport`, " + + "`route`.`stops`, `route`.`airline`, `airline`.`name`, `airline`.`callsign` " + + "FROM `route` INNER JOIN `airline` ON KEYS `route`.`airlineid` " + + "WHERE `airline`.`icao` = \"SWA\" LIMIT 4" val actual = create.selectDistinct( someStringField("destinationairport", route), @@ -429,8 +429,8 @@ class JoinClauseTest { @Test fun `Very minimal Example`() { val expected = "SELECT *\n" + - "FROM airline AS a1\n" + - "JOIN airline AS a2 ON a1.id = a2.id\n" + "FROM `airline` AS `a1`\n" + + "JOIN `airline` AS `a2` ON `a1`.`id` = `a2`.`id`\n" val a1 = airline.alias("a1") val a2 = airline.alias("a2") @@ -448,9 +448,9 @@ class JoinClauseTest { @Test fun `should support multiple joins`() { val expected = "SELECT *\n" + - "FROM airline AS al\n" + - "JOIN airport AS ap ON al.id = ap.id\n" + - "JOIN city AS c ON ap.id = c.id\n" + "FROM `airline` AS `al`\n" + + "JOIN `airport` AS `ap` ON `al`.`id` = `ap`.`id`\n" + + "JOIN `city` AS `c` ON `ap`.`id` = `c`.`id`\n" val airline = airline.alias("al") val airport = someBucket("airport").alias("ap") val city = someBucket("city").alias("c") diff --git a/core/src/test/kotlin/ch/ergon/dope/NumberFunctionsTest.kt b/core/src/test/kotlin/ch/ergon/dope/NumberFunctionsTest.kt index 4dc3f393..54bb7260 100644 --- a/core/src/test/kotlin/ch/ergon/dope/NumberFunctionsTest.kt +++ b/core/src/test/kotlin/ch/ergon/dope/NumberFunctionsTest.kt @@ -25,7 +25,7 @@ class NumberFunctionsTest { @Test fun `should support numberType alias`() { - val expected = "SELECT 12 AS someNumber" + val expected = "SELECT 12 AS `someNumber`" val actual: String = create .select( @@ -37,7 +37,7 @@ class NumberFunctionsTest { @Test fun `should support min with a ValidType`() { - val expected = "SELECT MIN(numberField), MIN(person.fname) FROM person" + val expected = "SELECT MIN(`numberField`), MIN(`person`.`fname`) FROM `person`" val actual: String = create .select( @@ -52,7 +52,7 @@ class NumberFunctionsTest { @Test fun `should support count all`() { - val expected = "SELECT COUNT(*) FROM person" + val expected = "SELECT COUNT(*) FROM `person`" val actual: String = create .select( @@ -66,7 +66,7 @@ class NumberFunctionsTest { @Test fun `should support count with a Field`() { - val expected = "SELECT COUNT(numberField) FROM person" + val expected = "SELECT COUNT(`numberField`) FROM `person`" val actual: String = create .select( diff --git a/core/src/test/kotlin/ch/ergon/dope/OperatorTest.kt b/core/src/test/kotlin/ch/ergon/dope/OperatorTest.kt index 9740dd17..8a91bd27 100644 --- a/core/src/test/kotlin/ch/ergon/dope/OperatorTest.kt +++ b/core/src/test/kotlin/ch/ergon/dope/OperatorTest.kt @@ -27,7 +27,7 @@ class OperatorTest { @Test fun `should support adding two number types`() { - val expected = "SELECT (2 + 5) FROM someBucket" + val expected = "SELECT (2 + 5) FROM `someBucket`" val actual: String = create .select( @@ -41,7 +41,7 @@ class OperatorTest { @Test fun `should support adding two number`() { - val expected = "SELECT (2 + 5) FROM someBucket" + val expected = "SELECT (2 + 5) FROM `someBucket`" val actual: String = create .select( @@ -55,7 +55,7 @@ class OperatorTest { @Test fun `should support adding a number with a numberType`() { - val expected = "SELECT (2 + numberField) FROM someBucket" + val expected = "SELECT (2 + `numberField`) FROM `someBucket`" val actual: String = create .select( @@ -69,7 +69,7 @@ class OperatorTest { @Test fun `should support adding a number type with a number`() { - val expected = "SELECT (numberField + 2) FROM someBucket" + val expected = "SELECT (`numberField` + 2) FROM `someBucket`" val actual: String = create .select( @@ -83,7 +83,7 @@ class OperatorTest { @Test fun `should support adding a NumberField and a number`() { - val expected = "SELECT (numberField + 5) FROM someBucket" + val expected = "SELECT (`numberField` + 5) FROM `someBucket`" val actual: String = create .select( @@ -97,7 +97,7 @@ class OperatorTest { @Test fun `should support nested additions`() { - val expected = "SELECT (3 + (numberField + 5)) FROM someBucket" + val expected = "SELECT (3 + (`numberField` + 5)) FROM `someBucket`" val actual: String = create .select( @@ -111,7 +111,7 @@ class OperatorTest { @Test fun `should support alias on addition`() { - val expected = "SELECT (numberField + 5) AS something FROM someBucket" + val expected = "SELECT (`numberField` + 5) AS `something` FROM `someBucket`" val actual: String = create .select( @@ -125,7 +125,7 @@ class OperatorTest { @Test fun `should support subtracting two number types`() { - val expected = "SELECT (13 - 6) FROM someBucket" + val expected = "SELECT (13 - 6) FROM `someBucket`" val actual: String = create .select( @@ -139,7 +139,7 @@ class OperatorTest { @Test fun `should support subtracting two number`() { - val expected = "SELECT (2 - 5) FROM someBucket" + val expected = "SELECT (2 - 5) FROM `someBucket`" val actual: String = create .select( @@ -153,7 +153,7 @@ class OperatorTest { @Test fun `should support subtracting a number with a numberType`() { - val expected = "SELECT (6 - numberField) FROM someBucket" + val expected = "SELECT (6 - `numberField`) FROM `someBucket`" val actual: String = create .select( @@ -167,7 +167,7 @@ class OperatorTest { @Test fun `should support subtracting a number type with a number`() { - val expected = "SELECT (numberField - 11) FROM someBucket" + val expected = "SELECT (`numberField` - 11) FROM `someBucket`" val actual: String = create .select( @@ -181,7 +181,7 @@ class OperatorTest { @Test fun `should support subtracting a NumberField and a number`() { - val expected = "SELECT (numberField - 2) FROM someBucket" + val expected = "SELECT (`numberField` - 2) FROM `someBucket`" val actual: String = create .select( @@ -195,7 +195,7 @@ class OperatorTest { @Test fun `should support nested subtracting`() { - val expected = "SELECT (9 - (numberField - 2)) FROM someBucket" + val expected = "SELECT (9 - (`numberField` - 2)) FROM `someBucket`" val actual: String = create .select( @@ -209,7 +209,7 @@ class OperatorTest { @Test fun `should support alias on subtraction`() { - val expected = "SELECT (numberField - 5) AS something FROM someBucket" + val expected = "SELECT (`numberField` - 5) AS `something` FROM `someBucket`" val actual: String = create .select( @@ -223,7 +223,7 @@ class OperatorTest { @Test fun `should support multiplying two number types`() { - val expected = "SELECT (13 * 6) FROM someBucket" + val expected = "SELECT (13 * 6) FROM `someBucket`" val actual: String = create .select( @@ -237,7 +237,7 @@ class OperatorTest { @Test fun `should support multiplying two number`() { - val expected = "SELECT (7 * 5) FROM someBucket" + val expected = "SELECT (7 * 5) FROM `someBucket`" val actual: String = create .select( @@ -251,7 +251,7 @@ class OperatorTest { @Test fun `should support multiplying a number with a numberType`() { - val expected = "SELECT (4 * numberField) FROM someBucket" + val expected = "SELECT (4 * `numberField`) FROM `someBucket`" val actual: String = create .select( @@ -265,7 +265,7 @@ class OperatorTest { @Test fun `should support multiplying a number type with a number`() { - val expected = "SELECT (numberField * 7) FROM someBucket" + val expected = "SELECT (`numberField` * 7) FROM `someBucket`" val actual: String = create .select( @@ -279,7 +279,7 @@ class OperatorTest { @Test fun `should support multiplying a NumberField and a number`() { - val expected = "SELECT (numberField * 2) FROM someBucket" + val expected = "SELECT (`numberField` * 2) FROM `someBucket`" val actual: String = create .select( @@ -293,7 +293,7 @@ class OperatorTest { @Test fun `should support nested multiplying`() { - val expected = "SELECT (9 * (numberField * 2)) FROM someBucket" + val expected = "SELECT (9 * (`numberField` * 2)) FROM `someBucket`" val actual: String = create .select( @@ -307,7 +307,7 @@ class OperatorTest { @Test fun `should support alias on multiplication`() { - val expected = "SELECT (numberField * 5) AS something FROM someBucket" + val expected = "SELECT (`numberField` * 5) AS `something` FROM `someBucket`" val actual: String = create .select( @@ -321,7 +321,7 @@ class OperatorTest { @Test fun `should support dividing two number types`() { - val expected = "SELECT (13 / 6) FROM someBucket" + val expected = "SELECT (13 / 6) FROM `someBucket`" val actual: String = create .select( @@ -335,7 +335,7 @@ class OperatorTest { @Test fun `should support dividing a number with a numberType`() { - val expected = "SELECT (14 / numberField) FROM someBucket" + val expected = "SELECT (14 / `numberField`) FROM `someBucket`" val actual: String = create .select( @@ -349,7 +349,7 @@ class OperatorTest { @Test fun `should support dividing a number type with a number`() { - val expected = "SELECT (numberField / 2) FROM someBucket" + val expected = "SELECT (`numberField` / 2) FROM `someBucket`" val actual: String = create .select( @@ -363,7 +363,7 @@ class OperatorTest { @Test fun `should support dividing a NumberField and a number`() { - val expected = "SELECT (numberField / 2) FROM someBucket" + val expected = "SELECT (`numberField` / 2) FROM `someBucket`" val actual: String = create .select( @@ -377,7 +377,7 @@ class OperatorTest { @Test fun `should support nested dividing`() { - val expected = "SELECT (9 / (numberField / 2)) FROM someBucket" + val expected = "SELECT (9 / (`numberField` / 2)) FROM `someBucket`" val actual: String = create .select( @@ -391,7 +391,7 @@ class OperatorTest { @Test fun `should support alias on dividing`() { - val expected = "SELECT (numberField / 5) AS something FROM someBucket" + val expected = "SELECT (`numberField` / 5) AS `something` FROM `someBucket`" val actual: String = create .select( @@ -405,7 +405,7 @@ class OperatorTest { @Test fun `should support modulo with two number types`() { - val expected = "SELECT (13 % 6) FROM someBucket" + val expected = "SELECT (13 % 6) FROM `someBucket`" val actual: String = create .select( @@ -419,7 +419,7 @@ class OperatorTest { @Test fun `should support modulo with two numbers`() { - val expected = "SELECT (2 % 5) FROM someBucket" + val expected = "SELECT (2 % 5) FROM `someBucket`" val actual: String = create .select( @@ -433,7 +433,7 @@ class OperatorTest { @Test fun `should support modulo with a number with a numberType`() { - val expected = "SELECT (2 % numberField) FROM someBucket" + val expected = "SELECT (2 % `numberField`) FROM `someBucket`" val actual: String = create .select( @@ -447,7 +447,7 @@ class OperatorTest { @Test fun `should support modulo with a number type with a number`() { - val expected = "SELECT (numberField % 2) FROM someBucket" + val expected = "SELECT (`numberField` % 2) FROM `someBucket`" val actual: String = create .select( @@ -461,7 +461,7 @@ class OperatorTest { @Test fun `should support modulo with a NumberField and a number`() { - val expected = "SELECT (numberField % 2) FROM someBucket" + val expected = "SELECT (`numberField` % 2) FROM `someBucket`" val actual: String = create .select( @@ -475,7 +475,7 @@ class OperatorTest { @Test fun `should support nested modulo`() { - val expected = "SELECT (9 % (numberField % 2)) FROM someBucket" + val expected = "SELECT (9 % (`numberField` % 2)) FROM `someBucket`" val actual: String = create .select( @@ -489,7 +489,7 @@ class OperatorTest { @Test fun `should support alias on modulo`() { - val expected = "SELECT (numberField % 5) AS something FROM someBucket" + val expected = "SELECT (`numberField` % 5) AS `something` FROM `someBucket`" val actual: String = create .select( @@ -503,7 +503,7 @@ class OperatorTest { @Test fun `should support negation with a NumberField`() { - val expected = "SELECT -numberField FROM someBucket" + val expected = "SELECT -`numberField` FROM `someBucket`" val actual: String = create .select( @@ -517,7 +517,7 @@ class OperatorTest { @Test fun `should support negation on a calculation`() { - val expected = "SELECT -(numberField * 12) FROM someBucket" + val expected = "SELECT -(`numberField` * 12) FROM `someBucket`" val actual: String = create .select( @@ -531,7 +531,7 @@ class OperatorTest { @Test fun `should support negation with different calculation`() { - val expected = "SELECT (-numberField + 6) FROM someBucket" + val expected = "SELECT (-`numberField` + 6) FROM `someBucket`" val actual: String = create .select( @@ -545,7 +545,7 @@ class OperatorTest { @Test fun `should support negation with calculations`() { - val expected = "SELECT (12 + (-numberField % ((12 * -(numberField - -12)) + 6))) AS calculation FROM someBucket" + val expected = "SELECT (12 + (-`numberField` % ((12 * -(`numberField` - -12)) + 6))) AS `calculation` FROM `someBucket`" val actual: String = create .select( @@ -571,7 +571,7 @@ class OperatorTest { @Test fun `should support more complicated calculations`() { - val expected = "SELECT (9 * ((15 - (19 / 4)) + (21 * (12 - 59)))) AS calculation FROM someBucket" + val expected = "SELECT (9 * ((15 - (19 / 4)) + (21 * (12 - 59)))) AS `calculation` FROM `someBucket`" val actual: String = create .select( @@ -593,7 +593,7 @@ class OperatorTest { @Test fun `should support negation with a number type`() { - val expected = "SELECT -6 FROM someBucket" + val expected = "SELECT -6 FROM `someBucket`" val actual: String = create .select( @@ -607,7 +607,7 @@ class OperatorTest { @Test fun `should support negation with a number`() { - val expected = "SELECT -6 FROM someBucket" + val expected = "SELECT -6 FROM `someBucket`" val actual: String = create .select( diff --git a/core/src/test/kotlin/ch/ergon/dope/OrderByTest.kt b/core/src/test/kotlin/ch/ergon/dope/OrderByTest.kt index 97fe09af..2fbc5573 100644 --- a/core/src/test/kotlin/ch/ergon/dope/OrderByTest.kt +++ b/core/src/test/kotlin/ch/ergon/dope/OrderByTest.kt @@ -17,7 +17,7 @@ class OrderByTest { @Test fun `should add an Order By clause to the end`() { - val expected = "SELECT * FROM someBucket ORDER BY stringField" + val expected = "SELECT * FROM `someBucket` ORDER BY `stringField`" val actual: String = create .selectAsterisk() @@ -32,7 +32,7 @@ class OrderByTest { @Test fun `should add an Order By Ascending clause`() { - val expected = "SELECT * FROM someBucket ORDER BY stringField ASC" + val expected = "SELECT * FROM `someBucket` ORDER BY `stringField` ASC" val actual: String = create .selectAsterisk() @@ -48,7 +48,7 @@ class OrderByTest { @Test fun `should add an Order By Descending clause`() { - val expected = "SELECT * FROM someBucket ORDER BY stringField DESC" + val expected = "SELECT * FROM `someBucket` ORDER BY `stringField` DESC" val actual: String = create .selectAsterisk() diff --git a/core/src/test/kotlin/ch/ergon/dope/ParameterizedQueriesTest.kt b/core/src/test/kotlin/ch/ergon/dope/ParameterizedQueriesTest.kt index 1dcb6d7f..6cac5777 100644 --- a/core/src/test/kotlin/ch/ergon/dope/ParameterizedQueriesTest.kt +++ b/core/src/test/kotlin/ch/ergon/dope/ParameterizedQueriesTest.kt @@ -69,7 +69,7 @@ class ParameterizedQueriesTest { @Test fun `should Support Positional Parameters`() { - val expected = "SELECT * FROM someBucket WHERE country = $1" + val expected = "SELECT * FROM `someBucket` WHERE `country` = $1" val actual: String = create.selectFrom(someBucket()) @@ -79,7 +79,7 @@ class ParameterizedQueriesTest { @Test fun `should Support Number Array Parameters`() { - val expected = "SELECT * FROM someBucket WHERE numberField IN $1" + val expected = "SELECT * FROM `someBucket` WHERE `numberField` IN $1" val actual: String = create.selectFrom(someBucket()) .where(someNumberField().inArray(listOf().asParameter())).build().queryString @@ -88,7 +88,7 @@ class ParameterizedQueriesTest { @Test fun `should Support String Array Parameters`() { - val expected = "SELECT * FROM someBucket WHERE stringField IN $1" + val expected = "SELECT * FROM `someBucket` WHERE `stringField` IN $1" val actual: String = create.selectFrom(someBucket()) .where(someStringField().inArray(listOf().asParameter())).build().queryString @@ -97,7 +97,7 @@ class ParameterizedQueriesTest { @Test fun `should Support Boolean Array Parameters`() { - val expected = "SELECT * FROM someBucket WHERE booleanField IN $1" + val expected = "SELECT * FROM `someBucket` WHERE `booleanField` IN $1" val actual: String = create.selectFrom(someBucket()) .where(someBooleanField().inArray(listOf().asParameter())).build().queryString @@ -116,7 +116,7 @@ class ParameterizedQueriesTest { @Test fun `should Support Mixed Parameters`() { - val expected = "SELECT $1 AS one, \$MagicNumber AS two" + val expected = "SELECT $1 AS `one`, \$MagicNumber AS `two`" val actual: String = create .select( @@ -129,7 +129,7 @@ class ParameterizedQueriesTest { @Test fun `should Support Mixed Parameters 2`() { - val expected = "SELECT $1, (\$name OR ($2 AND \$MagicNumber)) AS one" + val expected = "SELECT $1, (\$name OR ($2 AND \$MagicNumber)) AS `one`" val actual: String = create .select( @@ -144,7 +144,7 @@ class ParameterizedQueriesTest { @Test fun `should Support Mixed Parameters 3`() { - val expected = "SELECT $1, (\$name OR ($2 AND \$MagicNumber)), CONCAT(\$superMagic, $3) AS one" + val expected = "SELECT $1, (\$name OR ($2 AND \$MagicNumber)), CONCAT(\$superMagic, $3) AS `one`" val actual: String = create .select( @@ -163,7 +163,7 @@ class ParameterizedQueriesTest { @Test fun `should Support Mixed Parameters 4`() { - val expected = "SELECT $1, (\$name OR ($2 AND \$MagicNumber)) AS one, CONCAT(\$superMagic, \$3)" + val expected = "SELECT $1, (\$name OR ($2 AND \$MagicNumber)) AS `one`, CONCAT(\$superMagic, \$3)" val actual: String = create .select( @@ -184,7 +184,7 @@ class ParameterizedQueriesTest { @Test fun `should Support Aliased Parameters`() { - val expected = "SELECT $1 AS one" + val expected = "SELECT $1 AS `one`" val actual: String = create.select( "Questionable" @@ -213,7 +213,7 @@ class ParameterizedQueriesTest { @Test fun `shouldSupport Prefix Operator2 Parameters Aliased`() { - val expected = "SELECT CONCAT(\$greetingLeft, \$greetingRight) AS concatted" + val expected = "SELECT CONCAT(\$greetingLeft, \$greetingRight) AS `concatted`" val actual: String = create.select( concat( diff --git a/core/src/test/kotlin/ch/ergon/dope/QueryBuilderTest.kt b/core/src/test/kotlin/ch/ergon/dope/QueryBuilderTest.kt index 53fc5a11..48702bd0 100644 --- a/core/src/test/kotlin/ch/ergon/dope/QueryBuilderTest.kt +++ b/core/src/test/kotlin/ch/ergon/dope/QueryBuilderTest.kt @@ -39,7 +39,7 @@ class QueryBuilderTest { @Test fun `should Equal Simple String`() { - val expected = "SELECT stringField\n" + "FROM someBucket" + val expected = "SELECT `stringField`\n" + "FROM `someBucket`" val actual = create.select( someStringField(), @@ -52,7 +52,7 @@ class QueryBuilderTest { @Test fun `should Equal Simple String 2`() { - val expected = "SELECT *\n" + " FROM someBucket\n" + " WHERE stringField = \"Ian\"\n" + val expected = "SELECT *\n" + " FROM `someBucket`\n" + " WHERE `stringField` = \"Ian\"\n" val actual: String = create .selectAsterisk() @@ -67,7 +67,7 @@ class QueryBuilderTest { @Test fun `should Support Where`() { - val expected = "SELECT *\n" + " FROM someBucket\n" + " WHERE stringField = \"Ian\"\n" + val expected = "SELECT *\n" + " FROM `someBucket`\n" + " WHERE `stringField` = \"Ian\"\n" val actual: String = create.selectFrom( someBucket(), @@ -80,7 +80,7 @@ class QueryBuilderTest { @Test fun `should Equal Simple String 3`() { - val expected = "SELECT *\n" + " FROM someBucket\n" + " WHERE stringField = \"Ian\"\n" + val expected = "SELECT *\n" + " FROM `someBucket`\n" + " WHERE `stringField` = \"Ian\"\n" val actual: String = create .selectAsterisk() @@ -95,7 +95,7 @@ class QueryBuilderTest { @Test fun `should Support Select Distinct`() { - val expected = "SELECT DISTINCT stringField, numberField\n" + " FROM someBucket\n" + " WHERE stringField = \"Ian\"\n" + val expected = "SELECT DISTINCT `stringField`, `numberField`\n" + " FROM `someBucket`\n" + " WHERE `stringField` = \"Ian\"\n" val actual: String = create.selectDistinct( someStringField(), @@ -111,7 +111,7 @@ class QueryBuilderTest { @Test fun `should Support Alias`() { - val expected = "SELECT stringField AS firstName\n" + " FROM someBucket\n" + " WHERE stringField = \"Peter\"" + val expected = "SELECT `stringField` AS `firstName`\n" + " FROM `someBucket`\n" + " WHERE `stringField` = \"Peter\"" val actual: String = create.select( someStringField().alias("firstName"), @@ -126,7 +126,7 @@ class QueryBuilderTest { @Test fun `should Support Alias Mixed In First`() { - val expected = "SELECT stringField AS FirstName, stringField\n" + " FROM someBucket\n" + " WHERE stringField = \"Jackson\"" + val expected = "SELECT `stringField` AS `FirstName`, `stringField`\n" + " FROM `someBucket`\n" + " WHERE `stringField` = \"Jackson\"" val actual: String = create.select( someStringField().alias("FirstName"), @@ -140,7 +140,7 @@ class QueryBuilderTest { @Test fun `should Support Alias Mixed In Last`() { - val expected = "SELECT stringField, stringField AS LastName\n" + " FROM someBucket\n" + " WHERE stringField = \"Jackson\"" + val expected = "SELECT `stringField`, `stringField` AS `LastName`\n" + " FROM `someBucket`\n" + " WHERE `stringField` = \"Jackson\"" val actual: String = create.select( someStringField(), @@ -154,7 +154,7 @@ class QueryBuilderTest { @Test fun `should Support Where With Simple Condition`() { - val expected = "SELECT * FROM someBucket WHERE numberField < 50" + val expected = "SELECT * FROM `someBucket` WHERE `numberField` < 50" val actual: String = create .selectAsterisk() @@ -169,7 +169,7 @@ class QueryBuilderTest { @Test fun `should Support Where With Chained Conditions`() { - val expected = "SELECT * FROM someBucket WHERE (numberField < 50 AND stringField = \"Mr.\")" + val expected = "SELECT * FROM `someBucket` WHERE (`numberField` < 50 AND `stringField` = \"Mr.\")" val actual: String = create .selectAsterisk() @@ -186,7 +186,7 @@ class QueryBuilderTest { @Test fun `should Support Where With Chained Conditions And Expressions`() { - val expected = "SELECT * FROM someBucket WHERE (numberField < 50 AND stringField = \"Mr.\")" + val expected = "SELECT * FROM `someBucket` WHERE (`numberField` < 50 AND `stringField` = \"Mr.\")" val actual: String = create .selectAsterisk() @@ -207,7 +207,7 @@ class QueryBuilderTest { @Test fun `should support is not equal to with number`() { - val expected = "SELECT * FROM someBucket WHERE 12 != 5" + val expected = "SELECT * FROM `someBucket` WHERE 12 != 5" val actual: String = create .selectAsterisk() @@ -221,7 +221,7 @@ class QueryBuilderTest { @Test fun `should support is not equal to with numberField and number`() { - val expected = "SELECT * FROM someBucket WHERE numberField != 5" + val expected = "SELECT * FROM `someBucket` WHERE `numberField` != 5" val actual: String = create .selectAsterisk() @@ -235,7 +235,7 @@ class QueryBuilderTest { @Test fun `should support is not equal to with number and numberField`() { - val expected = "SELECT * FROM someBucket WHERE 3 != numberField" + val expected = "SELECT * FROM `someBucket` WHERE 3 != `numberField`" val actual: String = create .selectAsterisk() @@ -249,7 +249,7 @@ class QueryBuilderTest { @Test fun `should support is not equal to with string`() { - val expected = "SELECT * FROM someBucket WHERE \"test\" != \"hallo\"" + val expected = "SELECT * FROM `someBucket` WHERE \"test\" != \"hallo\"" val actual: String = create .selectAsterisk() @@ -263,7 +263,7 @@ class QueryBuilderTest { @Test fun `should support is not equal to with stringField and string`() { - val expected = "SELECT * FROM someBucket WHERE stringField != \"5\"" + val expected = "SELECT * FROM `someBucket` WHERE `stringField` != \"5\"" val actual: String = create .selectAsterisk() @@ -277,7 +277,7 @@ class QueryBuilderTest { @Test fun `should support is greater or equal to with number`() { - val expected = "SELECT * FROM someBucket WHERE 12 >= 5" + val expected = "SELECT * FROM `someBucket` WHERE 12 >= 5" val actual: String = create .selectAsterisk() @@ -291,7 +291,7 @@ class QueryBuilderTest { @Test fun `should support is greater or equal to with numberField and number`() { - val expected = "SELECT * FROM someBucket WHERE numberField >= 5" + val expected = "SELECT * FROM `someBucket` WHERE `numberField` >= 5" val actual: String = create .selectAsterisk() @@ -305,7 +305,7 @@ class QueryBuilderTest { @Test fun `should support is greater or equal to with number and numberField`() { - val expected = "SELECT * FROM someBucket WHERE 3 >= numberField" + val expected = "SELECT * FROM `someBucket` WHERE 3 >= `numberField`" val actual: String = create .selectAsterisk() @@ -319,7 +319,7 @@ class QueryBuilderTest { @Test fun `should support is greater or equal to with string`() { - val expected = "SELECT * FROM someBucket WHERE \"test\" >= \"hallo\"" + val expected = "SELECT * FROM `someBucket` WHERE \"test\" >= \"hallo\"" val actual: String = create .selectAsterisk() @@ -333,7 +333,7 @@ class QueryBuilderTest { @Test fun `should support is greater or equal to with stringField and string`() { - val expected = "SELECT * FROM someBucket WHERE stringField >= \"5\"" + val expected = "SELECT * FROM `someBucket` WHERE `stringField` >= \"5\"" val actual: String = create .selectAsterisk() @@ -347,7 +347,7 @@ class QueryBuilderTest { @Test fun `should support is greater or equal to with boolean and stringField`() { - val expected = "SELECT * FROM someBucket WHERE \"test\" >= stringField" + val expected = "SELECT * FROM `someBucket` WHERE \"test\" >= `stringField`" val actual: String = create .selectAsterisk() @@ -361,7 +361,7 @@ class QueryBuilderTest { @Test fun `should support is Less or equal to with number`() { - val expected = "SELECT * FROM someBucket WHERE 12 <= 5" + val expected = "SELECT * FROM `someBucket` WHERE 12 <= 5" val actual: String = create .selectAsterisk() @@ -375,7 +375,7 @@ class QueryBuilderTest { @Test fun `should support is Less or equal to with numberField and number`() { - val expected = "SELECT * FROM someBucket WHERE numberField <= 5" + val expected = "SELECT * FROM `someBucket` WHERE `numberField` <= 5" val actual: String = create .selectAsterisk() @@ -389,7 +389,7 @@ class QueryBuilderTest { @Test fun `should support is Less or equal to with number and numberField`() { - val expected = "SELECT * FROM someBucket WHERE 3 <= numberField" + val expected = "SELECT * FROM `someBucket` WHERE 3 <= `numberField`" val actual: String = create .selectAsterisk() @@ -403,7 +403,7 @@ class QueryBuilderTest { @Test fun `should support is Less or equal to with string`() { - val expected = "SELECT * FROM someBucket WHERE \"test\" <= \"hallo\"" + val expected = "SELECT * FROM `someBucket` WHERE \"test\" <= \"hallo\"" val actual: String = create .selectAsterisk() @@ -417,7 +417,7 @@ class QueryBuilderTest { @Test fun `should support is Less or equal to with stringField and string`() { - val expected = "SELECT * FROM someBucket WHERE stringField <= \"5\"" + val expected = "SELECT * FROM `someBucket` WHERE `stringField` <= \"5\"" val actual: String = create .selectAsterisk() @@ -431,7 +431,7 @@ class QueryBuilderTest { @Test fun `should Support Where With Many Chained Conditions`() { - val expected = "SELECT * FROM someBucket WHERE (numberField < 50 AND (stringField = \"Mr.\" AND stringField = \"friend\"))" + val expected = "SELECT * FROM `someBucket` WHERE (`numberField` < 50 AND (`stringField` = \"Mr.\" AND `stringField` = \"friend\"))" val actual: String = create .selectAsterisk() @@ -454,7 +454,7 @@ class QueryBuilderTest { @Test fun `should Support Where With Like`() { - val expected = "SELECT stringField FROM someBucket WHERE email LIKE \"%@yahoo.com\"" + val expected = "SELECT `stringField` FROM `someBucket` WHERE `email` LIKE \"%@yahoo.com\"" val actual: String = create.select( someStringField(), @@ -471,7 +471,7 @@ class QueryBuilderTest { @Test fun `should Support Where With Like Chained`() { - val expected = "SELECT stringField, numberField FROM someBucket WHERE (email LIKE \"%@gmail.com\" AND numberField = 46)" + val expected = "SELECT `stringField`, `numberField` FROM `someBucket` WHERE (`email` LIKE \"%@gmail.com\" AND `numberField` = 46)" val actual: String = create.select( someStringField(), @@ -513,7 +513,7 @@ class QueryBuilderTest { @Test fun `should Support Long Complex Query`() { - val expected = "SELECT ((1 = 1 AND 2 = 2) AND 3 = 3) AS what FROM someBucket WHERE (1 = 1 AND \"run\" = \"run\")" + val expected = "SELECT ((1 = 1 AND 2 = 2) AND 3 = 3) AS `what` FROM `someBucket` WHERE (1 = 1 AND \"run\" = \"run\")" val actual: String = create.select( 1.toNumberType().isEqualTo( @@ -714,9 +714,9 @@ class QueryBuilderTest { @Test fun `Should support the NOW_STR function`() { - val expected = "SELECT NOW_STR() AS full_date, NOW_STR(\"invalid date\") AS invalid_date, " + + val expected = "SELECT NOW_STR() AS `full_date`, NOW_STR(\"invalid date\") AS `invalid_date`, " + "NOW_STR(\"1111-11-11\") " + - "AS short_date" + "AS `short_date`" val actual = create.select( nowStr().alias("full_date"), @@ -740,7 +740,7 @@ class QueryBuilderTest { @Test fun `should support select raw with field`() { - val expected = "SELECT RAW name FROM someBucket" + val expected = "SELECT RAW `name` FROM `someBucket`" val actual = create.selectRaw( someStringField("name"), @@ -764,7 +764,7 @@ class QueryBuilderTest { @Test fun `should support selecting all Fields from bucket`() { val someBucket = someBucket() - val expected = "SELECT someBucket.* FROM someBucket" + val expected = "SELECT `someBucket`.* FROM `someBucket`" val actual = create .select(someBucket.asterisk()) @@ -777,7 +777,7 @@ class QueryBuilderTest { @Test fun `should support selecting all Fields from aliased bucket`() { val someBucket = someBucket().alias("alias") - val expected = "SELECT alias.* FROM someBucket AS alias" + val expected = "SELECT `alias`.* FROM `someBucket` AS `alias`" val actual = create .select(someBucket.asterisk()) diff --git a/core/src/test/kotlin/ch/ergon/dope/QueryStringBuilderTest.kt b/core/src/test/kotlin/ch/ergon/dope/QueryStringBuilderTest.kt index 8eccb4a3..9061aa2b 100644 --- a/core/src/test/kotlin/ch/ergon/dope/QueryStringBuilderTest.kt +++ b/core/src/test/kotlin/ch/ergon/dope/QueryStringBuilderTest.kt @@ -71,17 +71,18 @@ class QueryStringBuilderTest { fun `should format name with empty path`() { val name = "testName" val path = "" + val expected = "`$name`" val actual = formatPathToQueryString(name, path) - assertEquals(name, actual) + assertEquals(expected, actual) } @Test fun `should format name with path`() { val name = "testName" val path = "testPath" - val expected = "$path.$name" + val expected = "`$path`.`$name`" val actual = formatPathToQueryString(name, path) diff --git a/core/src/test/kotlin/ch/ergon/dope/StringFunctionsTest.kt b/core/src/test/kotlin/ch/ergon/dope/StringFunctionsTest.kt index e011bf02..46de55bf 100644 --- a/core/src/test/kotlin/ch/ergon/dope/StringFunctionsTest.kt +++ b/core/src/test/kotlin/ch/ergon/dope/StringFunctionsTest.kt @@ -47,7 +47,7 @@ class StringFunctionsTest { @Test fun `should Support Concat With StringTypes`() { - val expected = "SELECT CONCAT(\"abc\", \"def\", \"ghi\") AS concat" + val expected = "SELECT CONCAT(\"abc\", \"def\", \"ghi\") AS `concat`" val actual: String = create.select( concat("abc".toStringType(), "def".toStringType(), "ghi".toStringType()).alias("concat"), @@ -58,7 +58,7 @@ class StringFunctionsTest { @Test fun `should Support Concat With Strings`() { - val expected = "SELECT CONCAT(\"abc\", \"def\", \"ghi\") AS concat" + val expected = "SELECT CONCAT(\"abc\", \"def\", \"ghi\") AS `concat`" val actual: String = create.select( concat("abc", "def", "ghi").alias("concat"), @@ -69,7 +69,7 @@ class StringFunctionsTest { @Test fun `should Support Mixed Concat`() { - val expected = "SELECT CONCAT(\"abc\", \"def\", \"ghi\", stringField) AS concat" + val expected = "SELECT CONCAT(\"abc\", \"def\", \"ghi\", `stringField`) AS `concat`" val actual: String = create.select( concat( @@ -87,7 +87,7 @@ class StringFunctionsTest { @Test fun `should Support Concat2 With StringTypes`() { - val expected = "SELECT CONCAT2(\"-\", \"a\", \"b\", \"c\", \"d\") AS c1" + val expected = "SELECT CONCAT2(\"-\", \"a\", \"b\", \"c\", \"d\") AS `c1`" val actual: String = create.select( concat2( @@ -104,7 +104,7 @@ class StringFunctionsTest { @Test fun `should Support Concat2 With Strings`() { - val expected = "SELECT CONCAT2(\"-\", \"a\", \"b\", \"c\", \"d\") AS c1" + val expected = "SELECT CONCAT2(\"-\", \"a\", \"b\", \"c\", \"d\") AS `c1`" val actual: String = create.select( concat2( @@ -121,7 +121,7 @@ class StringFunctionsTest { @Test fun `should Support Concat2 With Strings And StringType As Seperator`() { - val expected = "SELECT CONCAT2(\"-\", \"a\", \"b\", \"c\", \"d\") AS c1" + val expected = "SELECT CONCAT2(\"-\", \"a\", \"b\", \"c\", \"d\") AS `c1`" val actual: String = create.select( concat2( @@ -138,7 +138,7 @@ class StringFunctionsTest { @Test fun `should Support Concat2 One Argument`() { - val expected = "CONCAT2(\"-\", \"a\") AS c2" + val expected = "CONCAT2(\"-\", \"a\") AS `c2`" val actual: String = concat2("-", "a".toStringType()).alias("c2").toDopeQuery().queryString @@ -147,7 +147,7 @@ class StringFunctionsTest { @Test fun `should Support Contains`() { - val expected = "SELECT CONTAINS(\"N1QL is awesome\", \"N1QL\") AS n1ql\n" + val expected = "SELECT CONTAINS(\"N1QL is awesome\", \"N1QL\") AS `n1ql`\n" val actual: String = create.select( contains("N1QL is awesome".toStringType(), "N1QL".toStringType()) @@ -159,7 +159,7 @@ class StringFunctionsTest { @Test fun `should Support Contains With String`() { - val expected = "SELECT CONTAINS(\"N1QL is awesome\", \"N1QL\") AS n1ql\n" + val expected = "SELECT CONTAINS(\"N1QL is awesome\", \"N1QL\") AS `n1ql`\n" val actual: String = create.select( contains("N1QL is awesome", "N1QL".toStringType()) @@ -171,8 +171,8 @@ class StringFunctionsTest { @Test fun `should Support Contains Chained`() { - val expected = "SELECT CONTAINS(\"N1QL is awesome\", \"N1QL\") AS n1ql,\n" + - " CONTAINS(\"N1QL is awesome\", \"SQL\") AS no_sql" + val expected = "SELECT CONTAINS(\"N1QL is awesome\", \"N1QL\") AS `n1ql`,\n" + + " CONTAINS(\"N1QL is awesome\", \"SQL\") AS `no_sql`" val actual: String = create.select( @@ -185,7 +185,7 @@ class StringFunctionsTest { @Test fun `should Support Initcap`() { - val expected = "SELECT INITCAP(\"N1QL is awesome\") AS n1ql" + val expected = "SELECT INITCAP(\"N1QL is awesome\") AS `n1ql`" val actual: String = create.select(initCap("N1QL is awesome").alias("n1ql")).build().queryString @@ -194,9 +194,9 @@ class StringFunctionsTest { @Test fun `should Support Length`() { - val expected = "SELECT LENGTH(\"N1QL is awesome\") AS ascii,\n" + - " LENGTH(\"Café\") AS diacritic,\n" + - " LENGTH(\"\") AS zero" + val expected = "SELECT LENGTH(\"N1QL is awesome\") AS `ascii`,\n" + + " LENGTH(\"Café\") AS `diacritic`,\n" + + " LENGTH(\"\") AS `zero`" val actual: String = create.select( @@ -210,7 +210,7 @@ class StringFunctionsTest { @Test fun `should Support Lower`() { - val expected = "SELECT LOWER(\"N1QL is awesome\") AS n1ql" + val expected = "SELECT LOWER(\"N1QL is awesome\") AS `n1ql`" val actual: String = create.select(lower("N1QL is awesome").alias("n1ql")).build().queryString @@ -219,10 +219,10 @@ class StringFunctionsTest { @Test fun `should Support Lpad`() { - val expected = "SELECT LPAD(\"N1QL is awesome\", 20) AS implicit_padding,\n" + - " LPAD(\"N1QL is awesome\", 20, \"-*\") AS repeated_padding,\n" + - " LPAD(\"N1QL is awesome\", 20, \"987654321\") AS truncate_padding,\n" + - " LPAD(\"N1QL is awesome\", 4, \"987654321\") AS truncate_string" + val expected = "SELECT LPAD(\"N1QL is awesome\", 20) AS `implicit_padding`,\n" + + " LPAD(\"N1QL is awesome\", 20, \"-*\") AS `repeated_padding`,\n" + + " LPAD(\"N1QL is awesome\", 20, \"987654321\") AS `truncate_padding`,\n" + + " LPAD(\"N1QL is awesome\", 4, \"987654321\") AS `truncate_string`" val actual: String = create.select( lpad("N1QL is awesome", 20).alias("implicit_padding"), @@ -236,13 +236,13 @@ class StringFunctionsTest { @Test fun `should Support Lpad With String`() { - val expected = "SELECT LPAD(\"N1QL is awesome\", 20) AS implicit_padding,\n" + - " LPAD(\"N1QL is awesome\", 20, \"-*\") AS repeated_padding,\n" + - " LPAD(\"N1QL is awesome\", 20, \"987654321\") AS truncate_padding,\n" + + val expected = "SELECT LPAD(\"N1QL is awesome\", 20) AS `implicit_padding`,\n" + + " LPAD(\"N1QL is awesome\", 20, \"-*\") AS `repeated_padding`,\n" + + " LPAD(\"N1QL is awesome\", 20, \"987654321\") AS `truncate_padding`,\n" + " LPAD(\"N1QL is awesome\", 20),\n" + " LPAD(\"N1QL is awesome\", 20, \"987654321\"),\n" + " LPAD(\"N1QL is awesome\", 20, \"987654321\"),\n" + - " LPAD(\"N1QL is awesome\", 4, \"987654321\") AS truncate_string" + " LPAD(\"N1QL is awesome\", 4, \"987654321\") AS `truncate_string`" val actual: String = create.select( lpad("N1QL is awesome".toStringType(), 20).alias("implicit_padding"), @@ -259,7 +259,7 @@ class StringFunctionsTest { @Test fun `should Support Lpad With String And StringTypes`() { - val expected = "SELECT LPAD(\"N1QL is awesome\", 20, \"1234\") AS implicit_padding" + val expected = "SELECT LPAD(\"N1QL is awesome\", 20, \"1234\") AS `implicit_padding`" val actual: String = create.select( lpad("N1QL is awesome", 20, "1234".toStringType()).alias("implicit_padding"), @@ -270,8 +270,8 @@ class StringFunctionsTest { @Test fun `should Support Ltrim`() { - val expected = "SELECT LTRIM(\"...N1QL is awesome\", \".\") AS dots, LTRIM(\" N1QL is awesome\", \" \") AS " + - "explicit_spaces, LTRIM(\" N1QL is awesome\") AS implicit_spaces, LTRIM(\"N1QL is awesome\") AS no_dots" + val expected = "SELECT LTRIM(\"...N1QL is awesome\", \".\") AS `dots`, LTRIM(\" N1QL is awesome\", \" \") AS " + + "`explicit_spaces`, LTRIM(\" N1QL is awesome\") AS `implicit_spaces`, LTRIM(\"N1QL is awesome\") AS `no_dots`" val actual: String = create.select( ltrim("...N1QL is awesome", ".").alias("dots"), @@ -285,7 +285,7 @@ class StringFunctionsTest { @Test fun `should Support Ltrim With A String`() { - val expected = "SELECT LTRIM(\"...N1QL is awesome\", \"...\") AS dots" + val expected = "SELECT LTRIM(\"...N1QL is awesome\", \"...\") AS `dots`" val actual: String = create.select( ltrim("...N1QL is awesome", "...").alias("dots"), @@ -296,7 +296,7 @@ class StringFunctionsTest { @Test fun `should Support Ltrim With A StringType And Char`() { - val expected = "SELECT LTRIM(\"...N1QL is awesome\", \".\") AS dots, LTRIM(\"...N1QL is awesome\", \".\")" + val expected = "SELECT LTRIM(\"...N1QL is awesome\", \".\") AS `dots`, LTRIM(\"...N1QL is awesome\", \".\")" val actual: String = create.select( ltrim("...N1QL is awesome".toStringType(), ".").alias("dots"), @@ -308,9 +308,9 @@ class StringFunctionsTest { @Test fun `should Support Mask`() { - val expected = "SELECT MASK(\"SomeTextToMask\", {}) AS mask,\n" + - " MASK(\"SomeTextToMask\", {\"mask\": \"++++\"}) AS mask_custom,\n" + - " MASK(\"SomeTextToMask\", {\"mask\": \"++++ ++++\"}) AS mask_hole" + val expected = "SELECT MASK(\"SomeTextToMask\", {}) AS `mask`,\n" + + " MASK(\"SomeTextToMask\", {\"mask\": \"++++\"}) AS `mask_custom`,\n" + + " MASK(\"SomeTextToMask\", {\"mask\": \"++++ ++++\"}) AS `mask_hole`" val actual: String = create.select( mask("SomeTextToMask").alias("mask"), @@ -323,9 +323,9 @@ class StringFunctionsTest { @Test fun `should Support Mask With StringType`() { - val expected = "SELECT MASK(\"SomeTextToMask\", {}) AS mask,\n" + - " MASK(\"SomeTextToMask\", {\"mask\": \"++++\"}) AS mask_custom,\n" + - " MASK(\"SomeTextToMask\", {\"mask\": \"++++ ++++\"}) AS mask_hole" + val expected = "SELECT MASK(\"SomeTextToMask\", {}) AS `mask`,\n" + + " MASK(\"SomeTextToMask\", {\"mask\": \"++++\"}) AS `mask_custom`,\n" + + " MASK(\"SomeTextToMask\", {\"mask\": \"++++ ++++\"}) AS `mask_hole`" val actual: String = create.select( mask("SomeTextToMask".toStringType()).alias("mask"), @@ -338,9 +338,9 @@ class StringFunctionsTest { @Test fun `should Support Mask 2`() { - val expected = "SELECT MASK(\"SomeTextToMask\", {}) AS mask,\n" + - " MASK(\"SomeTextToMask\", {\"mask\": \"++++\"}) AS mask_custom,\n" + - " MASK(\"SomeTextToMask\", {\"mask\": \"++++ ++++\"}) AS mask_hole" + val expected = "SELECT MASK(\"SomeTextToMask\", {}) AS `mask`,\n" + + " MASK(\"SomeTextToMask\", {\"mask\": \"++++\"}) AS `mask_custom`,\n" + + " MASK(\"SomeTextToMask\", {\"mask\": \"++++ ++++\"}) AS `mask_hole`" val actual: String = create.select( mask("SomeTextToMask") @@ -356,9 +356,9 @@ class StringFunctionsTest { @Test fun `should Support Position`() { - val expected = "SELECT POSITION(\"N1QL is awesome\", \"awesome\") AS awesome,\n" + - " POSITION(\"N1QL is awesome\", \"N1QL\") AS n1ql,\n" + - " POSITION(\"N1QL is awesome\", \"SQL\") AS sql" + val expected = "SELECT POSITION(\"N1QL is awesome\", \"awesome\") AS `awesome`,\n" + + " POSITION(\"N1QL is awesome\", \"N1QL\") AS `n1ql`,\n" + + " POSITION(\"N1QL is awesome\", \"SQL\") AS `sql`" val actual: String = create.select( position("N1QL is awesome", "awesome").alias("awesome"), @@ -371,9 +371,9 @@ class StringFunctionsTest { @Test fun `should Support Position With As StringType And String`() { - val expected = "SELECT POSITION(\"N1QL is awesome\", \"awesome\") AS awesome,\n" + - " POSITION(\"N1QL is awesome\", \"N1QL\") AS n1ql,\n" + - " POSITION(\"N1QL is awesome\", \"SQL\") AS sql" + val expected = "SELECT POSITION(\"N1QL is awesome\", \"awesome\") AS `awesome`,\n" + + " POSITION(\"N1QL is awesome\", \"N1QL\") AS `n1ql`,\n" + + " POSITION(\"N1QL is awesome\", \"SQL\") AS `sql`" val actual: String = create.select( position("N1QL is awesome".toStringType(), "awesome").alias("awesome"), @@ -386,9 +386,9 @@ class StringFunctionsTest { @Test fun `should Support Position With As String And StringType`() { - val expected = "SELECT POSITION(\"N1QL is awesome\", \"awesome\") AS awesome,\n" + - " POSITION(\"N1QL is awesome\", \"N1QL\") AS n1ql,\n" + - " POSITION(\"N1QL is awesome\", \"SQL\") AS sql" + val expected = "SELECT POSITION(\"N1QL is awesome\", \"awesome\") AS `awesome`,\n" + + " POSITION(\"N1QL is awesome\", \"N1QL\") AS `n1ql`,\n" + + " POSITION(\"N1QL is awesome\", \"SQL\") AS `sql`" val actual: String = create.select( position("N1QL is awesome", "awesome".toStringType()).alias("awesome"), @@ -401,7 +401,7 @@ class StringFunctionsTest { @Test fun `should Support Repeat`() { - val expected = "SELECT REPEAT(\"N1QL\", 0) AS empty_string, REPEAT(\"N1QL\", 3), REPEAT(\"N1QL\", 3), REPEAT(\"N1QL\", 3) AS n1ql_3" + val expected = "SELECT REPEAT(\"N1QL\", 0) AS `empty_string`, REPEAT(\"N1QL\", 3), REPEAT(\"N1QL\", 3), REPEAT(\"N1QL\", 3) AS `n1ql_3`" val actual: String = create.select( repeat("N1QL", 0).alias("empty_string"), @@ -415,8 +415,8 @@ class StringFunctionsTest { @Test fun `should Support Reverse`() { - val expected = "SELECT REVERSE(\"N1QL is awesome\") AS n1ql,\n" + - " REVERSE(\"racecar\") AS palindrome" + val expected = "SELECT REVERSE(\"N1QL is awesome\") AS `n1ql`,\n" + + " REVERSE(\"racecar\") AS `palindrome`" val actual: String = create.select( reverse("N1QL is awesome").alias("n1ql"), @@ -428,13 +428,13 @@ class StringFunctionsTest { @Test fun `should Support Rpad`() { - val expected = "SELECT RPAD(\"N1QL is awesome\", 20) AS implicit_padding,\n" + - " RPAD(\"N1QL is awesome\", 20, \"-*\") AS repeated_padding,\n" + - " RPAD(\"N1QL is awesome\", 20, \"123456789\") AS truncate_padding,\n" + - " RPAD(\"N1QL is awesome\", 4, \"123456789\") AS truncate_string,\n" + - " RPAD(\"N1QL is awesome\", 4, \"123456789\") AS truncate_string,\n" + - " RPAD(\"N1QL is awesome\", 4) AS truncate_string,\n" + - " RPAD(\"N1QL is awesome\", 4, \"123456789\") AS truncate_string" + val expected = "SELECT RPAD(\"N1QL is awesome\", 20) AS `implicit_padding`,\n" + + " RPAD(\"N1QL is awesome\", 20, \"-*\") AS `repeated_padding`,\n" + + " RPAD(\"N1QL is awesome\", 20, \"123456789\") AS `truncate_padding`,\n" + + " RPAD(\"N1QL is awesome\", 4, \"123456789\") AS `truncate_string`,\n" + + " RPAD(\"N1QL is awesome\", 4, \"123456789\") AS `truncate_string`,\n" + + " RPAD(\"N1QL is awesome\", 4) AS `truncate_string`,\n" + + " RPAD(\"N1QL is awesome\", 4, \"123456789\") AS `truncate_string`" val actual: String = create.select( rpad("N1QL is awesome", 20).alias("implicit_padding"), @@ -451,10 +451,10 @@ class StringFunctionsTest { @Test fun `should Support Rpad With StringType And String`() { - val expected = "SELECT RPAD(\"N1QL is awesome\", 20) AS implicit_padding,\n" + - " RPAD(\"N1QL is awesome\", 20, \"-*\") AS repeated_padding,\n" + - " RPAD(\"N1QL is awesome\", 20, \"123456789\") AS truncate_padding,\n" + - " RPAD(\"N1QL is awesome\", 4, \"123456789\") AS truncate_string" + val expected = "SELECT RPAD(\"N1QL is awesome\", 20) AS `implicit_padding`,\n" + + " RPAD(\"N1QL is awesome\", 20, \"-*\") AS `repeated_padding`,\n" + + " RPAD(\"N1QL is awesome\", 20, \"123456789\") AS `truncate_padding`,\n" + + " RPAD(\"N1QL is awesome\", 4, \"123456789\") AS `truncate_string`" val actual: String = create.select( rpad("N1QL is awesome".toStringType(), 20).alias("implicit_padding"), @@ -468,10 +468,10 @@ class StringFunctionsTest { @Test fun `should Support Rpad With String And StringType`() { - val expected = "SELECT RPAD(\"N1QL is awesome\", 20) AS implicit_padding,\n" + - " RPAD(\"N1QL is awesome\", 20, \"-*\") AS repeated_padding,\n" + - " RPAD(\"N1QL is awesome\", 20, \"123456789\") AS truncate_padding,\n" + - " RPAD(\"N1QL is awesome\", 4, \"123456789\") AS truncate_string" + val expected = "SELECT RPAD(\"N1QL is awesome\", 20) AS `implicit_padding`,\n" + + " RPAD(\"N1QL is awesome\", 20, \"-*\") AS `repeated_padding`,\n" + + " RPAD(\"N1QL is awesome\", 20, \"123456789\") AS `truncate_padding`,\n" + + " RPAD(\"N1QL is awesome\", 4, \"123456789\") AS `truncate_string`" val actual: String = create.select( rpad("N1QL is awesome", 20).alias("implicit_padding"), @@ -486,8 +486,8 @@ class StringFunctionsTest { @Test fun `should Support Rtrim`() { val expected = - "SELECT RTRIM(\"N1QL is awesome...\", \".\") AS dots, RTRIM(\"N1QL is awesome \", \" \") AS " + - "explicit_spaces, RTRIM(\"N1QL is awesome \") AS implicit_spaces, RTRIM(\"N1QL is awesome\") AS no_dots" + "SELECT RTRIM(\"N1QL is awesome...\", \".\") AS `dots`, RTRIM(\"N1QL is awesome \", \" \") AS " + + "`explicit_spaces`, RTRIM(\"N1QL is awesome \") AS `implicit_spaces`, RTRIM(\"N1QL is awesome\") AS `no_dots`" val actual: String = create.select( rtrim("N1QL is awesome...", '.').alias("dots"), @@ -502,8 +502,8 @@ class StringFunctionsTest { @Test fun `should Support Rtrim With String And String`() { val expected = - "SELECT RTRIM(\"N1QL is awesome...\", \".\") AS dots, RTRIM(\"N1QL is awesome \", \" \") AS " + - "explicit_spaces, RTRIM(\"N1QL is awesome \") AS implicit_spaces, RTRIM(\"N1QL is awesome\") AS no_dots" + "SELECT RTRIM(\"N1QL is awesome...\", \".\") AS `dots`, RTRIM(\"N1QL is awesome \", \" \") AS " + + "`explicit_spaces`, RTRIM(\"N1QL is awesome \") AS `implicit_spaces`, RTRIM(\"N1QL is awesome\") AS `no_dots`" val actual: String = create.select( rtrim("N1QL is awesome...", ".").alias("dots"), @@ -518,8 +518,8 @@ class StringFunctionsTest { @Test fun `should Support Rtrim With StringType`() { val expected = - "SELECT RTRIM(\"N1QL is awesome...\") AS dots, RTRIM(\"N1QL is awesome \") AS " + - "explicit_spaces, RTRIM(\"N1QL is awesome \") AS implicit_spaces, RTRIM(\"N1QL is awesome\") AS no_dots" + "SELECT RTRIM(\"N1QL is awesome...\") AS `dots`, RTRIM(\"N1QL is awesome \") AS " + + "`explicit_spaces`, RTRIM(\"N1QL is awesome \") AS `implicit_spaces`, RTRIM(\"N1QL is awesome\") AS `no_dots`" val actual: String = create.select( rtrim("N1QL is awesome...".toStringType()).alias("dots"), @@ -534,8 +534,8 @@ class StringFunctionsTest { @Test fun `should Support Rtrim With StringType And A Char`() { val expected = - "SELECT RTRIM(\"N1QL is awesome...\", \".\") AS dots, RTRIM(\"N1QL is awesome \") AS " + - "explicit_spaces, RTRIM(\"N1QL is awesome \") AS implicit_spaces, RTRIM(\"N1QL is awesome\") AS no_dots" + "SELECT RTRIM(\"N1QL is awesome...\", \".\") AS `dots`, RTRIM(\"N1QL is awesome \") AS " + + "`explicit_spaces`, RTRIM(\"N1QL is awesome \") AS `implicit_spaces`, RTRIM(\"N1QL is awesome\") AS `no_dots`" val actual: String = create.select( rtrim("N1QL is awesome...".toStringType(), '.').alias("dots"), @@ -550,8 +550,8 @@ class StringFunctionsTest { @Test fun `should Support Split`() { val expected = - "SELECT SPLIT(\"N1QL is awesome\", \" \") AS explicit_spaces, SPLIT(\"N1QL is awesome\") AS" + - " implicit_spaces, SPLIT(\"N1QL is awesome\", \"is\") AS split_is" + "SELECT SPLIT(\"N1QL is awesome\", \" \") AS `explicit_spaces`, SPLIT(\"N1QL is awesome\") AS" + + " `implicit_spaces`, SPLIT(\"N1QL is awesome\", \"is\") AS `split_is`" val actual: String = create.select( split("N1QL is awesome", " ").alias("explicit_spaces"), @@ -565,8 +565,8 @@ class StringFunctionsTest { @Test fun `should Support Split With StringType`() { val expected = - "SELECT SPLIT(\"N1QL is awesome\", \" \") AS explicit_spaces, SPLIT(\"N1QL is awesome\") AS" + - " implicit_spaces, SPLIT(\"N1QL is awesome\", \"is\") AS split_is" + "SELECT SPLIT(\"N1QL is awesome\", \" \") AS `explicit_spaces`, SPLIT(\"N1QL is awesome\") AS" + + " `implicit_spaces`, SPLIT(\"N1QL is awesome\", \"is\") AS `split_is`" val actual: String = create.select( split("N1QL is awesome".toStringType(), " ").alias("explicit_spaces"), @@ -580,8 +580,8 @@ class StringFunctionsTest { @Test fun `should Support Split With String And A StringType`() { val expected = - "SELECT SPLIT(\"N1QL is awesome\", \" \") AS explicit_spaces, SPLIT(\"N1QL is awesome\") AS" + - " implicit_spaces, SPLIT(\"N1QL is awesome\", \"is\") AS split_is" + "SELECT SPLIT(\"N1QL is awesome\", \" \") AS `explicit_spaces`, SPLIT(\"N1QL is awesome\") AS" + + " `implicit_spaces`, SPLIT(\"N1QL is awesome\", \"is\") AS `split_is`" val actual: String = create.select( split("N1QL is awesome", " ".toStringType()).alias("explicit_spaces"), @@ -595,8 +595,8 @@ class StringFunctionsTest { @Test fun `should Support Substring`() { val expected = - "SELECT SUBSTR(\"N1QL is awesome\", 3, 15) AS end_of_string, SUBSTR(\"N1QL is awesome\", 3, 1) AS" + - " single_letter, SUBSTR(\"N1QL is awesome\", 3, 3) AS three_letters" + "SELECT SUBSTR(\"N1QL is awesome\", 3, 15) AS `end_of_string`, SUBSTR(\"N1QL is awesome\", 3, 1) AS" + + " `single_letter`, SUBSTR(\"N1QL is awesome\", 3, 3) AS `three_letters`" val actual: String = create.select( substr("N1QL is awesome", 3).alias("end_of_string"), @@ -618,7 +618,7 @@ class StringFunctionsTest { @Test fun `should Support Title`() { - val expected = "SELECT INITCAP(\"N1QL is awesome\") AS n1ql" + val expected = "SELECT INITCAP(\"N1QL is awesome\") AS `n1ql`" val actual: String = create.select(title("N1QL is awesome").alias("n1ql")).build().queryString @@ -627,7 +627,7 @@ class StringFunctionsTest { @Test fun `should Support Title with string Type`() { - val expected = "SELECT INITCAP(\"N1QL is awesome\") AS n1ql" + val expected = "SELECT INITCAP(\"N1QL is awesome\") AS `n1ql`" val actual: String = create.select(title("N1QL is awesome".toStringType()).alias("n1ql")).build().queryString @@ -693,10 +693,10 @@ class StringFunctionsTest { @Test fun `should Support Trim`() { - val expected = "SELECT TRIM(\"...N1QL is awesome...\", \".\") AS dots," + - " TRIM(\" N1QL is awesome \") AS explicit_spaces," + - " TRIM(\" N1QL is awesome \") AS implicit_spaces," + - " TRIM(\"N1QL is awesome\") AS no_dots" + val expected = "SELECT TRIM(\"...N1QL is awesome...\", \".\") AS `dots`," + + " TRIM(\" N1QL is awesome \") AS `explicit_spaces`," + + " TRIM(\" N1QL is awesome \") AS `implicit_spaces`," + + " TRIM(\"N1QL is awesome\") AS `no_dots`" val actual: String = create.select( trim("...N1QL is awesome...", '.') @@ -714,10 +714,10 @@ class StringFunctionsTest { @Test fun `should Support Trim With A String And A String`() { - val expected = "SELECT TRIM(\"...N1QL is awesome...\", \"...\") AS dots," + - " TRIM(\" N1QL is awesome \", \" \") AS explicit_spaces," + - " TRIM(\" N1QL is awesome \") AS implicit_spaces," + - " TRIM(\"N1QL is awesome\") AS no_dots" + val expected = "SELECT TRIM(\"...N1QL is awesome...\", \"...\") AS `dots`," + + " TRIM(\" N1QL is awesome \", \" \") AS `explicit_spaces`," + + " TRIM(\" N1QL is awesome \") AS `implicit_spaces`," + + " TRIM(\"N1QL is awesome\") AS `no_dots`" val actual: String = create.select( trim("...N1QL is awesome...", "...") @@ -735,10 +735,10 @@ class StringFunctionsTest { @Test fun `should Support Trim With String Type`() { - val expected = "SELECT TRIM(\"...N1QL is awesome...\", \".\") AS dots," + - " TRIM(\" N1QL is awesome \") AS explicit_spaces," + - " TRIM(\" N1QL is awesome \") AS implicit_spaces," + - " TRIM(\"N1QL is awesome\") AS no_dots" + val expected = "SELECT TRIM(\"...N1QL is awesome...\", \".\") AS `dots`," + + " TRIM(\" N1QL is awesome \") AS `explicit_spaces`," + + " TRIM(\" N1QL is awesome \") AS `implicit_spaces`," + + " TRIM(\"N1QL is awesome\") AS `no_dots`" val actual: String = create.select( trim("...N1QL is awesome...".toStringType(), '.') @@ -756,7 +756,7 @@ class StringFunctionsTest { @Test fun `should Support Upper`() { - val expected = "SELECT UPPER(\"N1QL is awesome\") AS n1ql" + val expected = "SELECT UPPER(\"N1QL is awesome\") AS `n1ql`" val actual: String = create.select(upper("N1QL is awesome").alias("n1ql")).build().queryString @@ -765,7 +765,7 @@ class StringFunctionsTest { @Test fun `should support string functions in where clause`() { - val expected = "SELECT * FROM someBucket WHERE CONTAINS(stringField, \"123\")" + val expected = "SELECT * FROM `someBucket` WHERE CONTAINS(`stringField`, \"123\")" val actual: String = create.selectFrom(someBucket()).where(contains(someStringField(), "123")).build().queryString @@ -774,7 +774,7 @@ class StringFunctionsTest { @Test fun `should support string functions with conditions in where clause`() { - val expected = "SELECT * FROM someBucket WHERE UPPER(stringField) = \"VENDOLIN\"" + val expected = "SELECT * FROM `someBucket` WHERE UPPER(`stringField`) = \"VENDOLIN\"" val actual: String = create.selectFrom(someBucket()).where(upper(someStringField()).isEqualTo("VENDOLIN".toStringType())).build().queryString @@ -783,7 +783,7 @@ class StringFunctionsTest { @Test fun `should support nested string functions`() { - val expected = "SELECT CONTAINS(UPPER(\"vendolin\"), \"VEN\") AS foo" + val expected = "SELECT CONTAINS(UPPER(\"vendolin\"), \"VEN\") AS `foo`" val actual: String = create.select(contains(upper("vendolin"), "VEN").alias("foo")).build().queryString diff --git a/core/src/test/kotlin/ch/ergon/dope/SubQueryTest.kt b/core/src/test/kotlin/ch/ergon/dope/SubQueryTest.kt index 7272e7c5..119e3d3d 100644 --- a/core/src/test/kotlin/ch/ergon/dope/SubQueryTest.kt +++ b/core/src/test/kotlin/ch/ergon/dope/SubQueryTest.kt @@ -15,7 +15,7 @@ class SubQueryTest { @Test fun `should support sub select in from`() { - val expected = "SELECT stringField FROM (SELECT *) AS asdf" + val expected = "SELECT `stringField` FROM (SELECT *) AS `asdf`" val actual: String = create .select(someStringField()) diff --git a/core/src/test/kotlin/ch/ergon/dope/UnnestClauseTest.kt b/core/src/test/kotlin/ch/ergon/dope/UnnestClauseTest.kt index 68079dd4..05078ab5 100644 --- a/core/src/test/kotlin/ch/ergon/dope/UnnestClauseTest.kt +++ b/core/src/test/kotlin/ch/ergon/dope/UnnestClauseTest.kt @@ -32,7 +32,7 @@ class UnnestClauseTest { fun `should support unnest`() { val airline = someBucket() val aField = listOf("a".toStringType()).toArrayType() - val expected = "SELECT * FROM someBucket UNNEST [\"a\"] AS a" + val expected = "SELECT * FROM `someBucket` UNNEST [\"a\"] AS `a`" val alias: AliasedExpression> = aField.alias("a") val actual: String = create @@ -45,7 +45,7 @@ class UnnestClauseTest { @Test fun `should support unnest with arrayField`() { - val expected = "SELECT c FROM airline UNNEST a" + val expected = "SELECT `c` FROM `airline` UNNEST `a`" val actual: String = create .select(someNumberArrayField("c")) @@ -60,7 +60,7 @@ class UnnestClauseTest { fun `should support nested unnest`() { val airline = someBucket("airline").alias("ai") val aField = someNumberArrayField("a") - val expected = "SELECT c FROM airline AS ai UNNEST a AS ab UNNEST ab.c WHERE a IS VALUED" + val expected = "SELECT `c` FROM `airline` AS `ai` UNNEST `a` AS `ab` UNNEST `ab`.`c` WHERE `a` IS VALUED" val actual: String = create .select(someNumberArrayField("c")) @@ -76,7 +76,7 @@ class UnnestClauseTest { @Test fun `should support unnest s`() { val expected = - "SELECT b.* FROM someBucket AS b UNNEST stringArrayField AS a WHERE (b.stringField = \"something\" AND a.stringField = \$param)" + "SELECT `b`.* FROM `someBucket` AS `b` UNNEST `stringArrayField` AS `a` WHERE (`b`.`stringField` = \"something\" AND `a`.`stringField` = \$param)" val b = someBucket().alias("b") val actual: String = create From 6a0e351545db8a00d62dc1de4cb2e64b93f6b44d Mon Sep 17 00:00:00 2001 From: Jan Sigrist Date: Fri, 24 May 2024 11:19:55 +0200 Subject: [PATCH 2/3] DOPE-214: updated backticks --- .../resolvable/clause/model/DeleteClause.kt | 2 +- .../resolvable/clause/model/FromClause.kt | 2 +- .../resolvable/clause/model/JoinClause.kt | 2 +- .../expression/AsteriskExpression.kt | 8 ++-- .../expression/unaliased/type/Field.kt | 2 +- .../unaliased/type/meta/MetaExpression.kt | 39 ++++++++++++------- .../fromable/AliasedSelectClause.kt | 2 +- .../ergon/dope/resolvable/fromable/Bucket.kt | 4 +- .../kotlin/ch/ergon/dope/JoinClauseTest.kt | 15 ++++--- .../kotlin/ch/ergon/dope/QueryBuilderTest.kt | 6 ++- .../kotlin/ch/ergon/dope/UnnestClauseTest.kt | 3 +- .../kotlin/ch/ergon/dope/CrystalMapAdapter.kt | 12 +++--- 12 files changed, 58 insertions(+), 39 deletions(-) diff --git a/core/src/main/kotlin/ch/ergon/dope/resolvable/clause/model/DeleteClause.kt b/core/src/main/kotlin/ch/ergon/dope/resolvable/clause/model/DeleteClause.kt index 652c23ea..33b77f72 100644 --- a/core/src/main/kotlin/ch/ergon/dope/resolvable/clause/model/DeleteClause.kt +++ b/core/src/main/kotlin/ch/ergon/dope/resolvable/clause/model/DeleteClause.kt @@ -9,7 +9,7 @@ class DeleteClause(private val bucket: Bucket) : IDeleteClause { override fun toDopeQuery(): DopeQuery { val bucketDopeQuery = bucket.toDopeQuery() return DopeQuery( - queryString = "DELETE FROM `${bucketDopeQuery.queryString}`", + queryString = "DELETE FROM ${bucketDopeQuery.queryString}", parameters = bucketDopeQuery.parameters, ) } diff --git a/core/src/main/kotlin/ch/ergon/dope/resolvable/clause/model/FromClause.kt b/core/src/main/kotlin/ch/ergon/dope/resolvable/clause/model/FromClause.kt index 0a4df02f..97a053d8 100644 --- a/core/src/main/kotlin/ch/ergon/dope/resolvable/clause/model/FromClause.kt +++ b/core/src/main/kotlin/ch/ergon/dope/resolvable/clause/model/FromClause.kt @@ -11,7 +11,7 @@ class FromClause(private val fromable: Fromable, private val parentClause: ISele val parentDopeQuery = parentClause.toDopeQuery() val fromableDopeQuery = fromable.toDopeQuery() return DopeQuery( - queryString = formatToQueryStringWithSymbol(parentDopeQuery.queryString, "FROM", "`" + fromableDopeQuery.queryString) + "`", + queryString = formatToQueryStringWithSymbol(parentDopeQuery.queryString, "FROM", fromableDopeQuery.queryString), parameters = fromableDopeQuery.parameters + parentDopeQuery.parameters, ) } diff --git a/core/src/main/kotlin/ch/ergon/dope/resolvable/clause/model/JoinClause.kt b/core/src/main/kotlin/ch/ergon/dope/resolvable/clause/model/JoinClause.kt index fc3d4435..38d467e4 100644 --- a/core/src/main/kotlin/ch/ergon/dope/resolvable/clause/model/JoinClause.kt +++ b/core/src/main/kotlin/ch/ergon/dope/resolvable/clause/model/JoinClause.kt @@ -17,7 +17,7 @@ sealed class SelectJoinClause : ISelectJoinClause { val bucketDopeQuery = bucket.toDopeQuery() val onConditionDopeQuery = onCondition.toDopeQuery() dopeQuery = DopeQuery( - queryString = "${parentDopeQuery.queryString} $joinType `${bucketDopeQuery.queryString}` ON `${onConditionDopeQuery.queryString}`", + queryString = "${parentDopeQuery.queryString} $joinType ${bucketDopeQuery.queryString} ON ${onConditionDopeQuery.queryString}", parameters = parentDopeQuery.parameters + bucketDopeQuery.parameters + onConditionDopeQuery.parameters, ) } diff --git a/core/src/main/kotlin/ch/ergon/dope/resolvable/expression/AsteriskExpression.kt b/core/src/main/kotlin/ch/ergon/dope/resolvable/expression/AsteriskExpression.kt index f66fd05a..d71b7ec4 100644 --- a/core/src/main/kotlin/ch/ergon/dope/resolvable/expression/AsteriskExpression.kt +++ b/core/src/main/kotlin/ch/ergon/dope/resolvable/expression/AsteriskExpression.kt @@ -11,10 +11,10 @@ class AsteriskExpression : Expression { private val queryString: String constructor(bucket: Bucket) { - queryString = "`" + when (bucket) { - is AliasedBucket -> bucket.alias - is UnaliasedBucket -> bucket.name - } + "`.$ASTERISK_STRING" + queryString = when (bucket) { + is AliasedBucket -> "`${bucket.alias}`" + is UnaliasedBucket -> "`${bucket.name}`" + } + ".$ASTERISK_STRING" } constructor() { diff --git a/core/src/main/kotlin/ch/ergon/dope/resolvable/expression/unaliased/type/Field.kt b/core/src/main/kotlin/ch/ergon/dope/resolvable/expression/unaliased/type/Field.kt index b06776c1..2c7a6a31 100644 --- a/core/src/main/kotlin/ch/ergon/dope/resolvable/expression/unaliased/type/Field.kt +++ b/core/src/main/kotlin/ch/ergon/dope/resolvable/expression/unaliased/type/Field.kt @@ -5,7 +5,7 @@ import ch.ergon.dope.resolvable.expression.TypeExpression import ch.ergon.dope.resolvable.formatPathToQueryString import ch.ergon.dope.validtype.ValidType -class Field(private val name: String, private val path: String) : TypeExpression { +open class Field(private val name: String, private val path: String) : TypeExpression { override fun toDopeQuery(): DopeQuery = DopeQuery( queryString = formatPathToQueryString(name, path), parameters = emptyMap(), diff --git a/core/src/main/kotlin/ch/ergon/dope/resolvable/expression/unaliased/type/meta/MetaExpression.kt b/core/src/main/kotlin/ch/ergon/dope/resolvable/expression/unaliased/type/meta/MetaExpression.kt index a6c48696..36965920 100644 --- a/core/src/main/kotlin/ch/ergon/dope/resolvable/expression/unaliased/type/meta/MetaExpression.kt +++ b/core/src/main/kotlin/ch/ergon/dope/resolvable/expression/unaliased/type/meta/MetaExpression.kt @@ -5,34 +5,47 @@ import ch.ergon.dope.resolvable.expression.TypeExpression import ch.ergon.dope.resolvable.expression.unaliased.type.Field import ch.ergon.dope.resolvable.fromable.AliasedBucket import ch.ergon.dope.resolvable.fromable.Bucket +import ch.ergon.dope.resolvable.fromable.UnaliasedBucket +import ch.ergon.dope.resolvable.operator.FunctionOperator import ch.ergon.dope.validtype.NumberType import ch.ergon.dope.validtype.StringType +import ch.ergon.dope.validtype.ValidType -class MetaExpression(private val bucket: Bucket) : TypeExpression { +class MetaExpression(private val bucket: Bucket) : TypeExpression, FunctionOperator { override fun toDopeQuery(): DopeQuery { val bucketDopeQuery = bucket.toDopeQuery() return DopeQuery( - queryString = "META(${ - when (bucket) { - is AliasedBucket -> bucket.alias - else -> bucketDopeQuery.queryString - } - })", + queryString = toFunctionQueryString( + "META", + when (bucket) { + is AliasedBucket -> "`${bucket.alias}`" + is UnaliasedBucket -> bucketDopeQuery.queryString + }, + ), parameters = bucketDopeQuery.parameters, ) } - val cas: Field = Field("cas", toDopeQuery().queryString) + val cas: Field = getMetaField("cas") - val expiration: Field = Field("expiration", toDopeQuery().queryString) + val expiration: Field = getMetaField("expiration") - val flags: Field = Field("flags", toDopeQuery().queryString) + val flags: Field = getMetaField("flags") - val id: Field = Field("id", toDopeQuery().queryString) + val id: Field = getMetaField("id") - val type: Field = Field("type", toDopeQuery().queryString) + val type: Field = getMetaField("type") - val keyspace: Field = Field("keyspace", toDopeQuery().queryString) + val keyspace: Field = getMetaField("keyspace") + + private fun getMetaField(field: String): MetaField = MetaField(field, toDopeQuery().queryString) + + private class MetaField(private val name: String, private val queryString: String) : Field(name, "") { + override fun toDopeQuery(): DopeQuery = DopeQuery( + queryString = "$queryString.`$name`", + parameters = emptyMap(), + ) + } } fun meta(bucket: Bucket) = MetaExpression(bucket) diff --git a/core/src/main/kotlin/ch/ergon/dope/resolvable/fromable/AliasedSelectClause.kt b/core/src/main/kotlin/ch/ergon/dope/resolvable/fromable/AliasedSelectClause.kt index 8ca25f18..45c3075e 100644 --- a/core/src/main/kotlin/ch/ergon/dope/resolvable/fromable/AliasedSelectClause.kt +++ b/core/src/main/kotlin/ch/ergon/dope/resolvable/fromable/AliasedSelectClause.kt @@ -7,7 +7,7 @@ class AliasedSelectClause(private val alias: String, private val selectClause: I override fun toDopeQuery(): DopeQuery { val selectClauseDopeQuery = selectClause.toDopeQuery() return DopeQuery( - queryString = "(${selectClauseDopeQuery.queryString}) AS $alias", + queryString = "(${selectClauseDopeQuery.queryString}) AS `$alias`", parameters = selectClauseDopeQuery.parameters, ) } diff --git a/core/src/main/kotlin/ch/ergon/dope/resolvable/fromable/Bucket.kt b/core/src/main/kotlin/ch/ergon/dope/resolvable/fromable/Bucket.kt index eac2bf20..7c2c0383 100644 --- a/core/src/main/kotlin/ch/ergon/dope/resolvable/fromable/Bucket.kt +++ b/core/src/main/kotlin/ch/ergon/dope/resolvable/fromable/Bucket.kt @@ -4,7 +4,7 @@ import ch.ergon.dope.DopeQuery import ch.ergon.dope.resolvable.expression.AsteriskExpression sealed class Bucket(open val name: String) : Fromable { - override fun toDopeQuery(): DopeQuery = DopeQuery(name, emptyMap()) + override fun toDopeQuery(): DopeQuery = DopeQuery("`$name`", emptyMap()) } open class UnaliasedBucket(name: String) : Bucket(name) { @@ -13,7 +13,7 @@ open class UnaliasedBucket(name: String) : Bucket(name) { class AliasedBucket(name: String, val alias: String) : Bucket(name) { override fun toDopeQuery(): DopeQuery = DopeQuery( - queryString = "$name` AS `$alias", + queryString = "`$name` AS `$alias`", parameters = emptyMap(), ) } diff --git a/core/src/test/kotlin/ch/ergon/dope/JoinClauseTest.kt b/core/src/test/kotlin/ch/ergon/dope/JoinClauseTest.kt index 1418ecae..bfeabf85 100644 --- a/core/src/test/kotlin/ch/ergon/dope/JoinClauseTest.kt +++ b/core/src/test/kotlin/ch/ergon/dope/JoinClauseTest.kt @@ -29,7 +29,8 @@ class JoinClauseTest { @Test fun `should support join`() { - val expected = "SELECT * FROM `route` JOIN `airline` ON `route`.`airlineid` = META(`airline`).`id` WHERE `airline`.`country` = \"France\"" + val expected = + "SELECT * FROM `route` JOIN `airline` ON `route`.`airlineid` = META(`airline`).`id` WHERE `airline`.`country` = \"France\"" val actual = create .selectAsterisk() @@ -51,7 +52,8 @@ class JoinClauseTest { @Test fun `Should support left join`() { - val expected = "SELECT * FROM `route` LEFT JOIN `airline` ON `route`.`airlineid` = META(`airline`).`id` WHERE `route`.`sourceairport` = \"SFO\"" + val expected = + "SELECT * FROM `route` LEFT JOIN `airline` ON `route`.`airlineid` = META(`airline`).`id` WHERE `route`.`sourceairport` = \"SFO\"" val actual = create .selectAsterisk() @@ -71,7 +73,8 @@ class JoinClauseTest { @Test fun `Should support right outer join`() { - val expected = "SELECT * FROM `route` RIGHT JOIN `airline` ON `route`.`airlineid` = META(`airline`).`id` WHERE `route`.`sourceairport` = \"SFO\"" + val expected = + "SELECT * FROM `route` RIGHT JOIN `airline` ON `route`.`airlineid` = META(`airline`).`id` WHERE `route`.`sourceairport` = \"SFO\"" val actual = create .selectAsterisk() @@ -96,7 +99,7 @@ class JoinClauseTest { @Test fun `Should support complex inner join`() { val expected = "SELECT `route`.`airlineid`, `airline`.`iota`, `route`.`sourceairport`, " + - "`route``.destinationairport` FROM `route` INNER JOIN `airline` ON `route`.`airlineid` = " + + "`route`.`destinationairport` FROM `route` INNER JOIN `airline` ON `route`.`airlineid` = " + "META(`airline`).`id` WHERE `route`.`destinationairport` = \"SFO\" ORDER BY `sourceairport`" val actual = create.select( @@ -133,7 +136,7 @@ class JoinClauseTest { val lmark = someBucket("landmark").alias("lmark") val expected = - "SELECT DISTINCT MIN(`aport`.`airportname`) AS `Airport__Name, " + + "SELECT DISTINCT MIN(`aport`.`airportname`) AS `Airport__Name`, " + "MIN(`aport`.`tz`) AS `Airport__Time`, MIN(`lmark`.`name`) AS `Landmark_Name` " + "FROM `airport` AS `aport` LEFT JOIN `landmark` AS `lmark` ON (`aport`.`city` = " + "`lmark`.`city` AND `lmark`.`country` = \"United States\") GROUP BY " + @@ -307,7 +310,7 @@ class JoinClauseTest { fun `Use INDEX join to flip the direction`() { val expected = "SELECT DISTINCT `route`.`destinationairport`, " + "`route`.`stops`, `route`.`airline`, `airline`.`name`, `airline`.`callsign` " + - "FROM `route` RIGHT JOIN `airline` ON KEYS `route`.`airlineid` " + + "FROM `route` JOIN `airline` ON KEYS `route`.`airlineid` " + "WHERE `airline`.`icao` = \"SWA\" LIMIT 4" val actual = create.selectDistinct( diff --git a/core/src/test/kotlin/ch/ergon/dope/QueryBuilderTest.kt b/core/src/test/kotlin/ch/ergon/dope/QueryBuilderTest.kt index 48702bd0..eccbe841 100644 --- a/core/src/test/kotlin/ch/ergon/dope/QueryBuilderTest.kt +++ b/core/src/test/kotlin/ch/ergon/dope/QueryBuilderTest.kt @@ -126,7 +126,8 @@ class QueryBuilderTest { @Test fun `should Support Alias Mixed In First`() { - val expected = "SELECT `stringField` AS `FirstName`, `stringField`\n" + " FROM `someBucket`\n" + " WHERE `stringField` = \"Jackson\"" + val expected = + "SELECT `stringField` AS `FirstName`, `stringField` FROM `someBucket` WHERE `stringField` = \"Jackson\"" val actual: String = create.select( someStringField().alias("FirstName"), @@ -140,7 +141,8 @@ class QueryBuilderTest { @Test fun `should Support Alias Mixed In Last`() { - val expected = "SELECT `stringField`, `stringField` AS `LastName`\n" + " FROM `someBucket`\n" + " WHERE `stringField` = \"Jackson\"" + val expected = + "SELECT `stringField`, `stringField` AS `LastName` FROM `someBucket` WHERE `stringField` = \"Jackson\"" val actual: String = create.select( someStringField(), diff --git a/core/src/test/kotlin/ch/ergon/dope/UnnestClauseTest.kt b/core/src/test/kotlin/ch/ergon/dope/UnnestClauseTest.kt index 05078ab5..5a5165f0 100644 --- a/core/src/test/kotlin/ch/ergon/dope/UnnestClauseTest.kt +++ b/core/src/test/kotlin/ch/ergon/dope/UnnestClauseTest.kt @@ -76,7 +76,8 @@ class UnnestClauseTest { @Test fun `should support unnest s`() { val expected = - "SELECT `b`.* FROM `someBucket` AS `b` UNNEST `stringArrayField` AS `a` WHERE (`b`.`stringField` = \"something\" AND `a`.`stringField` = \$param)" + "SELECT `b`.* FROM `someBucket` AS `b` UNNEST `stringArrayField` AS `a` " + + "WHERE (`b`.`stringField` = \"something\" AND `a`.`stringField` = \$param)" val b = someBucket().alias("b") val actual: String = create diff --git a/crystal-map-connector/src/test/kotlin/ch/ergon/dope/CrystalMapAdapter.kt b/crystal-map-connector/src/test/kotlin/ch/ergon/dope/CrystalMapAdapter.kt index 567764c9..cb14cccc 100644 --- a/crystal-map-connector/src/test/kotlin/ch/ergon/dope/CrystalMapAdapter.kt +++ b/crystal-map-connector/src/test/kotlin/ch/ergon/dope/CrystalMapAdapter.kt @@ -17,7 +17,7 @@ class CrystalMapAdapter { val actual: Field = cmField.asField() - assertEquals("${cmField.path}.${cmField.name}", actual.toDopeQuery().queryString) + assertEquals("`${cmField.path}`.`${cmField.name}`", actual.toDopeQuery().queryString) } @Test @@ -26,7 +26,7 @@ class CrystalMapAdapter { val actual: Field = cmField.asField() - assertEquals("${cmField.path}.${cmField.name}", actual.toDopeQuery().queryString) + assertEquals("`${cmField.path}`.`${cmField.name}`", actual.toDopeQuery().queryString) } @Test @@ -35,7 +35,7 @@ class CrystalMapAdapter { val actual: Field = cmField.asField() - assertEquals("${cmField.path}.${cmField.name}", actual.toDopeQuery().queryString) + assertEquals("`${cmField.path}`.`${cmField.name}`", actual.toDopeQuery().queryString) } @Test @@ -44,7 +44,7 @@ class CrystalMapAdapter { val actual: Field> = cmList.asArrayField() - assertEquals("${cmList.path}.${cmList.name}", actual.toDopeQuery().queryString) + assertEquals("`${cmList.path}`.`${cmList.name}`", actual.toDopeQuery().queryString) } @Test @@ -53,7 +53,7 @@ class CrystalMapAdapter { val actual: Field> = cmList.asArrayField() - assertEquals("${cmList.path}.${cmList.name}", actual.toDopeQuery().queryString) + assertEquals("`${cmList.path}`.`${cmList.name}`", actual.toDopeQuery().queryString) } @Test @@ -62,6 +62,6 @@ class CrystalMapAdapter { val actual: Field> = cmList.asArrayField() - assertEquals("${cmList.path}.${cmList.name}", actual.toDopeQuery().queryString) + assertEquals("`${cmList.path}`.`${cmList.name}`", actual.toDopeQuery().queryString) } } From ebefa5a14e32bb5bee0bd9652c43041add0a9374 Mon Sep 17 00:00:00 2001 From: Jan Sigrist Date: Fri, 24 May 2024 14:07:38 +0200 Subject: [PATCH 3/3] DOPE-214: added named parameters --- .../expression/unaliased/type/meta/MetaExpression.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/core/src/main/kotlin/ch/ergon/dope/resolvable/expression/unaliased/type/meta/MetaExpression.kt b/core/src/main/kotlin/ch/ergon/dope/resolvable/expression/unaliased/type/meta/MetaExpression.kt index 36965920..0cece16a 100644 --- a/core/src/main/kotlin/ch/ergon/dope/resolvable/expression/unaliased/type/meta/MetaExpression.kt +++ b/core/src/main/kotlin/ch/ergon/dope/resolvable/expression/unaliased/type/meta/MetaExpression.kt @@ -16,7 +16,7 @@ class MetaExpression(private val bucket: Bucket) : TypeExpression, F val bucketDopeQuery = bucket.toDopeQuery() return DopeQuery( queryString = toFunctionQueryString( - "META", + symbol = "META", when (bucket) { is AliasedBucket -> "`${bucket.alias}`" is UnaliasedBucket -> bucketDopeQuery.queryString @@ -38,12 +38,12 @@ class MetaExpression(private val bucket: Bucket) : TypeExpression, F val keyspace: Field = getMetaField("keyspace") - private fun getMetaField(field: String): MetaField = MetaField(field, toDopeQuery().queryString) + private fun getMetaField(field: String): MetaField = MetaField(field, toDopeQuery()) - private class MetaField(private val name: String, private val queryString: String) : Field(name, "") { + private class MetaField(private val name: String, private val dopeQuery: DopeQuery) : Field(name, "") { override fun toDopeQuery(): DopeQuery = DopeQuery( - queryString = "$queryString.`$name`", - parameters = emptyMap(), + queryString = "${dopeQuery.queryString}.`$name`", + parameters = dopeQuery.parameters, ) } }