From a13a9858fb13828bab5815d2d02f8f9f69855a1a Mon Sep 17 00:00:00 2001 From: Andrew Golovashevich Date: Sat, 15 Feb 2025 23:19:34 +0300 Subject: [PATCH] Support for SQL 'UNION' operation --- .../db/serdha0/api/queries/SelectQuery.kt | 23 +++++++++++++++++++ .../db/serdha0/api/queries/_Query.kt | 1 + 2 files changed, 24 insertions(+) diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/SelectQuery.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/SelectQuery.kt index 2ce9d47..2b3c03d 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/SelectQuery.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/SelectQuery.kt @@ -147,4 +147,27 @@ public interface SelectQuery : _Query { } } } + + + public interface Union : SelectQuery, _Query.Params2Table { + public interface Constructor : _Query.Constructor> { + override fun createQuery(internalQueries: _Query.Constructor.Scope, outQueries: _Query.Constructor.Scope): Union = + outQueries.selectUnion(this) + + public val first: _Selectable + public val last: _Selectable + + public fun createSelectWithJoin(context: Scope): qUE + + public interface Scope : _CommonSelectCreatorScope { + public val fq: _Selectable + public val lq: _Selectable + + public val firstSubqueryParams: InputRow.WithRedirect + public val lastSubqueryParams: InputRow.WithRedirect + + public fun > uniteColumns(first: Column, last: Column): IntermediateColumn + } + } + } } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/_Query.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/_Query.kt index ca8a58f..2264aa5 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/_Query.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/_Query.kt @@ -22,6 +22,7 @@ public interface _Query { public fun selectWithJoin(constructor: SelectQuery.WithJoin.Constructor): SelectQuery.WithJoin public fun selectReducing(constructor: SelectQuery.Reducing.Constructor): SelectQuery.Reducing public fun selectFolding(constructor: SelectQuery.Folding.Constructor): SelectQuery.Folding + public fun selectUnion(constructor: SelectQuery.Union.Constructor): SelectQuery.Union } public interface Scope : _SelectsScope {