From 33fe39c70d4346acd197299656a7b32b434f9bde Mon Sep 17 00:00:00 2001 From: Andrew Golovashevich Date: Sun, 26 Jan 2025 17:43:40 +0300 Subject: [PATCH] Separating queries descriptors for strict applying '_Selectable' --- .../api/v0/{queries => misc}/_Selectable.kt | 2 +- .../serdha/api/v0/queries/DeleteQuery.kt | 25 ++++++++------- .../serdha/api/v0/queries/InsertQuery.kt | 7 +++-- .../serdha/api/v0/queries/SelectQuery.kt | 29 ++++++++++------- .../serdha/api/v0/queries/UpdateQuery.kt | 31 ++++++++++--------- 5 files changed, 53 insertions(+), 41 deletions(-) rename src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/{queries => misc}/_Selectable.kt (67%) diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/queries/_Selectable.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/misc/_Selectable.kt similarity index 67% rename from src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/queries/_Selectable.kt rename to src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/misc/_Selectable.kt index 89562dc..b35d507 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/queries/_Selectable.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/misc/_Selectable.kt @@ -1,4 +1,4 @@ -package ru.landgrafhomyak.serdha.api.v0.queries +package ru.landgrafhomyak.serdha.api.v0.misc @Suppress("ClassName") public interface _Selectable<@Suppress("unused") QueryUserExtension : Any> \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/queries/DeleteQuery.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/queries/DeleteQuery.kt index c1261ca..40d5a66 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/queries/DeleteQuery.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/queries/DeleteQuery.kt @@ -4,25 +4,28 @@ import ru.landgrafhomyak.serdha.api.v0.misc.Column import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseType import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseTypesProvider import ru.landgrafhomyak.serdha.api.v0.misc.QueryParam +import ru.landgrafhomyak.serdha.api.v0.misc._Selectable import ru.landgrafhomyak.serdha.api.v0.runtime.ParametersSetter import ru.landgrafhomyak.serdha.api.v0.table.Table -public interface DeleteQuery : _Selectable { +public interface DeleteQuery { public val userExtension: QueryUserExtension - public interface Creator { - public fun createDeleteWithReturning(table: Table, creator: Scope): QueryUserExtension + public interface FromSubquery : DeleteQuery, _Selectable { + public interface Creator { + public fun createDeleteWithReturning(table: Table, creator: Scope): QueryUserExtension - public interface Scope { - public val types: DatabaseTypesProvider - public fun > param(name: String, type: DT): QueryParam + public interface Scope { + public val types: DatabaseTypesProvider + public fun > param(name: String, type: DT): QueryParam - public val selectorParams: ParametersSetter.WithRedirect - public var selectorColumn: Column<*, DatabaseType.ROW_ID, SelectorTableUserExtension> + public val selectorParams: ParametersSetter.WithRedirect + public var selectorColumn: Column<*, DatabaseType.ROW_ID, SelectorTableUserExtension> - public fun > returnFromSubquery(name: String, column: Column): Column - public fun > returnRemovedValue(name: String, column: Column): Column - public fun > returnParam(name: String, column: QueryParam): Column + public fun > returnFromSubquery(name: String, column: Column): Column + public fun > returnRemovedValue(name: String, column: Column): Column + public fun > returnParam(name: String, column: QueryParam): Column + } } } } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/queries/InsertQuery.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/queries/InsertQuery.kt index 2afe727..d8d65e4 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/queries/InsertQuery.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/queries/InsertQuery.kt @@ -5,6 +5,7 @@ import ru.landgrafhomyak.serdha.api.v0.table.Table import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseType import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseTypesProvider import ru.landgrafhomyak.serdha.api.v0.misc.QueryParam +import ru.landgrafhomyak.serdha.api.v0.misc._Selectable import ru.landgrafhomyak.serdha.api.v0.runtime.ParametersSetter import ru.landgrafhomyak.serdha.api.v0.table.UniqueIndex @@ -29,7 +30,7 @@ public interface InsertQuery { } - public interface SingleRow : InsertQuery { + public interface SingleRow : InsertQuery, _Selectable { public interface Creator { public fun createInsertSingleRowWithReturning(table: Table, creator: Scope): QueryUserExtension @@ -47,7 +48,7 @@ public interface InsertQuery { } - public interface FromSubquery : InsertQuery { + public interface FromSubquery : InsertQuery, _Selectable { public interface Creator { public fun createInsertSingleRowWithReturning(table: Table, creator: Scope): QueryUserExtension @@ -68,7 +69,7 @@ public interface InsertQuery { } } - public interface MultipleRows : InsertQuery { + public interface MultipleRows : InsertQuery { public interface Creator { public fun createInsertMultipleRows(table: Table, creator: Scope): QueryUserExtension diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/queries/SelectQuery.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/queries/SelectQuery.kt index 852f1c4..80d38bf 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/queries/SelectQuery.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/queries/SelectQuery.kt @@ -6,6 +6,7 @@ import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseType import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseTypesProvider import ru.landgrafhomyak.serdha.api.v0.misc.Expression import ru.landgrafhomyak.serdha.api.v0.misc.QueryParam +import ru.landgrafhomyak.serdha.api.v0.misc._Selectable import ru.landgrafhomyak.serdha.api.v0.runtime.ParametersSetter public interface SelectQuery : _Selectable { @@ -37,25 +38,29 @@ public interface SelectQuery : _Selectable> returnColumn(name: String, column: IntermediateColumn): Column } - public interface JoinCreator : _CommonSelectCreatorScope { - public fun createSelectWithJoin(creator: Scope): QueryUserExtension + public interface WithJoin : SelectQuery { + public interface JoinCreator : _CommonSelectCreatorScope { + public fun createSelectWithJoin(creator: Scope): QueryUserExtension - public interface Scope { - public val leftSubqueryParams: ParametersSetter.WithRedirect - public val rightSubqueryParams: ParametersSetter.WithRedirect + public interface Scope { + public val leftSubqueryParams: ParametersSetter.WithRedirect + public val rightSubqueryParams: ParametersSetter.WithRedirect - public fun > selectColumnFromLeft(column: Column): IntermediateColumn - public fun > selectColumnFromRight(column: Column): IntermediateColumn + public fun > selectColumnFromLeft(column: Column): IntermediateColumn + public fun > selectColumnFromRight(column: Column): IntermediateColumn + } } } - public interface Creator { - public fun createSelect(creator: Scope): QueryUserExtension + public interface FromSubquery : InsertQuery { + public interface Creator { + public fun createSelect(creator: Scope): QueryUserExtension - public interface Scope : _CommonSelectCreatorScope { - public val subqueryParams: ParametersSetter.WithRedirect + public interface Scope : _CommonSelectCreatorScope { + public val subqueryParams: ParametersSetter.WithRedirect - public fun > selectColumnFromSubquery(param: Column): IntermediateColumn + public fun > selectColumnFromSubquery(param: Column): IntermediateColumn + } } } } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/queries/UpdateQuery.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/queries/UpdateQuery.kt index d1b4d10..1e131a7 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/queries/UpdateQuery.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/queries/UpdateQuery.kt @@ -5,29 +5,32 @@ import ru.landgrafhomyak.serdha.api.v0.table.Table import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseType import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseTypesProvider import ru.landgrafhomyak.serdha.api.v0.misc.QueryParam +import ru.landgrafhomyak.serdha.api.v0.misc._Selectable import ru.landgrafhomyak.serdha.api.v0.runtime.ParametersSetter public interface UpdateQuery : _Selectable { public val userExtension: QueryUserExtension - public interface Creator { - public fun createUpdateWithReturning(table: Table, creator: Scope): QueryUserExtension + public interface FromSubquery : _Selectable { + public interface Creator { + public fun createUpdateFromSubqueryWithReturning(table: Table, creator: Scope): QueryUserExtension - public interface Scope { - public val types: DatabaseTypesProvider - public fun > param(name: String, type: DT): QueryParam + public interface Scope { + public val types: DatabaseTypesProvider + public fun > param(name: String, type: DT): QueryParam - public val selectorParams: ParametersSetter.WithRedirect - public var selectorColumn: Column<*, DatabaseType.ROW_ID, SelectorTableUserExtension> + public val selectorParams: ParametersSetter.WithRedirect + public var selectorColumn: Column<*, DatabaseType.ROW_ID, SelectorTableUserExtension> - public fun > updateColumnWithSubquery(dst: Column, src: Column) - public fun > updateColumnWithOldValue(dst: Column, src: Column) - public fun > updateColumnWithParam(dst: Column, src: QueryParam) + public fun > updateColumnWithSubquery(dst: Column, src: Column) + public fun > updateColumnWithOldValue(dst: Column, src: Column) + public fun > updateColumnWithParam(dst: Column, src: QueryParam) - public fun > returnFromSubquery(name: String, column: Column): Column - public fun > returnOldValue(name: String, column: Column): Column - public fun > returnNewValue(name: String, column: Column): Column - public fun > returnParam(name: String, param: QueryParam): Column + public fun > returnFromSubquery(name: String, column: Column): Column + public fun > returnOldValue(name: String, column: Column): Column + public fun > returnNewValue(name: String, column: Column): Column + public fun > returnParam(name: String, param: QueryParam): Column + } } } } \ No newline at end of file