From f747cc6f0e07c0c87540fe4722fa5cfb7ba76cfe Mon Sep 17 00:00:00 2001 From: Andrew Golovashevich Date: Mon, 24 Feb 2025 16:52:19 +0300 Subject: [PATCH] Some shortcuts for constructing queries and fix in executors mangling --- .../construction/param_from_subquery.kt | 113 ++++++++++++++++++ .../user_commons/construction/query_param.kt | 76 ++++++++++++ .../construction/return_column.kt | 20 ++++ .../construction/upsert_column.kt | 71 +++++++++++ .../serdha0/user_commons/executors/row2row.kt | 2 +- .../user_commons/executors/row2table.kt | 2 +- .../user_commons/executors/row2void.kt | 2 +- .../user_commons/executors/table2void.kt | 3 +- 8 files changed, 285 insertions(+), 4 deletions(-) create mode 100644 src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/construction/param_from_subquery.kt create mode 100644 src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/construction/query_param.kt create mode 100644 src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/construction/return_column.kt create mode 100644 src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/construction/upsert_column.kt diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/construction/param_from_subquery.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/construction/param_from_subquery.kt new file mode 100644 index 0000000..06b29ec --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/construction/param_from_subquery.kt @@ -0,0 +1,113 @@ +@file:JvmName("_ParamsForRedirectKt") + +package ru.landgrafhomyak.db.serdha0.user_commons.construction + +import kotlin.jvm.JvmName +import ru.landgrafhomyak.db.serdha0.api.misc.DatabaseType +import ru.landgrafhomyak.db.serdha0.api.misc.QueryParam +import ru.landgrafhomyak.db.serdha0.api.queries.DeleteQuery +import ru.landgrafhomyak.db.serdha0.api.queries.InsertQuery +import ru.landgrafhomyak.db.serdha0.api.queries.SelectQuery +import ru.landgrafhomyak.db.serdha0.api.queries.UpdateQuery + + +public fun > SelectQuery.Simple.Constructor.Scope.paramFromSubquery( + name: String, subParam0: QueryParam, vararg subParamsN: QueryParam +): QueryParam { + val param = this.queryParam(name, subParam0.type) + this.subqueryParams.redirect(subParam0, param) + for (subParam in subParamsN) + this.subqueryParams.redirect(subParam, param) + return param +} + +public fun > SelectQuery.WithJoin.Constructor.Scope.paramFromLeftSubquery( + name: String, leftSubParams0: QueryParam, vararg leftSubParamsN: QueryParam +): QueryParam { + val param = this.queryParam(name, leftSubParams0.type) + this.leftSubqueryParams.redirect(leftSubParams0, param) + for (subParam in leftSubParamsN) + this.leftSubqueryParams.redirect(subParam, param) + return param +} + +public fun > SelectQuery.WithJoin.Constructor.Scope.paramFromRightSubquery( + name: String, rightSubParams0: QueryParam, vararg rightSubParamsN: QueryParam +): QueryParam { + val param = this.queryParam(name, rightSubParams0.type) + this.rightSubqueryParams.redirect(rightSubParams0, param) + for (subParam in rightSubParamsN) + this.rightSubqueryParams.redirect(subParam, param) + return param +} + +public fun > SelectQuery.Reducing.Constructor.Scope.paramFromSubquery( + name: String, subParam0: QueryParam, vararg subParamsN: QueryParam +): QueryParam { + val param = this.queryParam(name, subParam0.type) + this.sourceParams.redirect(subParam0, param) + for (subParam in subParamsN) + this.sourceParams.redirect(subParam, param) + return param +} + +public fun > SelectQuery.Folding.Constructor.Scope.paramFromSubquery( + name: String, subParam0: QueryParam, vararg subParamsN: QueryParam +): QueryParam { + val param = this.queryParam(name, subParam0.type) + this.sourceParams.redirect(subParam0, param) + for (subParam in subParamsN) + this.sourceParams.redirect(subParam, param) + return param +} + +public fun > SelectQuery.Union.Constructor.Scope.paramFromFirstSubquery( + name: String, firstSubParams0: QueryParam, vararg firstSubParamsN: QueryParam +): QueryParam { + val param = this.queryParam(name, firstSubParams0.type) + this.firstSubqueryParams.redirect(firstSubParams0, param) + for (subParam in firstSubParamsN) + this.firstSubqueryParams.redirect(subParam, param) + return param +} + +public fun > SelectQuery.Union.Constructor.Scope.paramFromLastSubquery( + name: String, lastSubParams0: QueryParam, vararg lastSubParamsN: QueryParam +): QueryParam { + val param = this.queryParam(name, lastSubParams0.type) + this.lastSubqueryParams.redirect(lastSubParams0, param) + for (subParam in lastSubParamsN) + this.lastSubqueryParams.redirect(subParam, param) + return param +} + + +public fun > InsertQuery.FromSubquery.Constructor.Scope.paramFromSubquery( + name: String, subParam0: QueryParam, vararg subParamsN: QueryParam +): QueryParam { + val param = this.queryParam(name, subParam0.type) + this.sourceQueryParams.redirect(subParam0, param) + for (subParam in subParamsN) + this.sourceQueryParams.redirect(subParam, param) + return param +} + +public fun > UpdateQuery.FromSubquery.Constructor.Scope.paramFromSubquery( + name: String, subParam0: QueryParam, vararg subParamsN: QueryParam +): QueryParam { + val param = this.queryParam(name, subParam0.type) + this.selectorParams.redirect(subParam0, param) + for (subParam in subParamsN) + this.selectorParams.redirect(subParam, param) + return param +} + +public fun > DeleteQuery.FromSubquery.Constructor.Scope.paramFromSubquery( + name: String, subParam0: QueryParam, vararg subParamsN: QueryParam +): QueryParam { + val param = this.queryParam(name, subParam0.type) + this.selectorParams.redirect(subParam0, param) + for (subParam in subParamsN) + this.selectorParams.redirect(subParam, param) + return param +} \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/construction/query_param.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/construction/query_param.kt new file mode 100644 index 0000000..d506ae2 --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/construction/query_param.kt @@ -0,0 +1,76 @@ +@file:JvmName("_QueryParamKt") + +package ru.landgrafhomyak.db.serdha0.user_commons.construction + +import kotlin.jvm.JvmName +import ru.landgrafhomyak.db.serdha0.api.misc.Column +import ru.landgrafhomyak.db.serdha0.api.misc.DatabaseType +import ru.landgrafhomyak.db.serdha0.api.misc.QueryParam +import ru.landgrafhomyak.db.serdha0.api.queries.DeleteQuery +import ru.landgrafhomyak.db.serdha0.api.queries.InsertQuery +import ru.landgrafhomyak.db.serdha0.api.queries.SelectQuery +import ru.landgrafhomyak.db.serdha0.api.queries.UpdateQuery + +public fun > SelectQuery.Simple.Constructor.Scope.queryParamLike( + name: String, column: Column +): QueryParam = this.queryParam(name, column.type) + +@JvmName("queryParamLike\$left") +public fun > SelectQuery.WithJoin.Constructor.Scope.queryParamLike( + name: String, column: Column +): QueryParam = this.queryParam(name, column.type) + +@JvmName("queryParamLike\$right") +public fun > SelectQuery.WithJoin.Constructor.Scope.queryParamLike( + name: String, column: Column +): QueryParam = this.queryParam(name, column.type) + +public fun > SelectQuery.Reducing.Constructor.Scope.queryParamLike( + name: String, column: Column +): QueryParam = this.queryParam(name, column.type) + +public fun > SelectQuery.Folding.Constructor.Scope.queryParamLike( + name: String, column: Column +): QueryParam = this.queryParam(name, column.type) + +@JvmName("queryParamLike\$first") +public fun > SelectQuery.Union.Constructor.Scope.queryParamLike( + name: String, column: Column +): QueryParam = this.queryParam(name, column.type) + +@JvmName("queryParamLike\$last") +public fun > SelectQuery.Union.Constructor.Scope.queryParamLike( + name: String, column: Column +): QueryParam = this.queryParam(name, column.type) + +public fun > InsertQuery.SingleRow.Constructor.Scope.queryParamLike( + name: String, column: Column +): QueryParam = this.queryParam(name, column.type) + +public fun > InsertQuery.FromSubquery.Constructor.Scope.queryParamLike( + name: String, column: Column +): QueryParam = this.queryParam(name, column.type) + +public fun > InsertQuery.MultipleRows.Constructor.Scope.inputColumnLike( + name: String, column: Column +): QueryParam = this.inputColumn(name, column.type) + +public fun > UpdateQuery.SingleRow.Constructor.Scope.queryParamLike( + name: String, column: Column +): QueryParam = this.queryParam(name, column.type) + +public fun > UpdateQuery.FromSubquery.Constructor.Scope.queryParamLike( + name: String, column: Column +): QueryParam = this.queryParam(name, column.type) + +public fun > UpdateQuery.MultipleRows.Constructor.Scope.inputColumnLike( + name: String, column: Column +): QueryParam = this.inputColumn(name, column.type) + +public fun > DeleteQuery.SingleRow.Constructor.Scope.queryParamLike( + name: String, column: Column +): QueryParam = this.queryParam(name, column.type) + +public fun > DeleteQuery.FromSubquery.Constructor.Scope.queryParamLike( + name: String, column: Column +): QueryParam = this.queryParam(name, column.type) \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/construction/return_column.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/construction/return_column.kt new file mode 100644 index 0000000..0bdbf27 --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/construction/return_column.kt @@ -0,0 +1,20 @@ +@file:JvmName("_ReturnColumnKt") + +package ru.landgrafhomyak.db.serdha0.user_commons.construction + +import kotlin.jvm.JvmName +import ru.landgrafhomyak.db.serdha0.api.misc.Column +import ru.landgrafhomyak.db.serdha0.api.misc.DatabaseType +import ru.landgrafhomyak.db.serdha0.api.queries.SelectQuery + +public fun > SelectQuery.Simple.Constructor.Scope.returnColumnFromSubquery( + name: String, column: Column +): Column = this.returnColumn(name, this.selectColumnFromSubquery(column)) + +public fun > SelectQuery.WithJoin.Constructor.Scope.returnColumnFromLeft( + name: String, column: Column +): Column = this.returnColumn(name, this.selectColumnFromLeft(column)) + +public fun > SelectQuery.WithJoin.Constructor.Scope.returnColumnFromRight( + name: String, column: Column +): Column = this.returnColumn(name, this.selectColumnFromRight(column)) \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/construction/upsert_column.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/construction/upsert_column.kt new file mode 100644 index 0000000..db60a48 --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/construction/upsert_column.kt @@ -0,0 +1,71 @@ +@file:JvmName("_UpsertColumnKt") + +package ru.landgrafhomyak.db.serdha0.user_commons.construction + +import kotlin.jvm.JvmName +import ru.landgrafhomyak.db.serdha0.api.misc.Column +import ru.landgrafhomyak.db.serdha0.api.misc.DatabaseType +import ru.landgrafhomyak.db.serdha0.api.misc.QueryParam +import ru.landgrafhomyak.db.serdha0.api.queries.InsertQuery +import ru.landgrafhomyak.db.serdha0.api.queries.UpdateQuery + + +public fun > InsertQuery.SingleRow.Constructor.Scope.insertParamToColumn( + paramName: String, column0: Column, vararg columnN: Column +): QueryParam { + val param = this.queryParam(paramName, column0.type) + this.insertParam(column0, param) + for (column in columnN) + this.insertParam(column, param) + return param +} + +public fun > InsertQuery.FromSubquery.Constructor.Scope.insertParamToColumn( + paramName: String, column0: Column, vararg columnN: Column +): QueryParam { + val param = this.queryParam(paramName, column0.type) + this.insertParam(column0, param) + for (column in columnN) + this.insertParam(column, param) + return param +} + +public fun > InsertQuery.MultipleRows.Constructor.Scope.insertParamToColumn( + paramName: String, column0: Column, vararg columnN: Column +): QueryParam { + val param = this.inputColumn(paramName, column0.type) + this.insertColumn(column0, param) + for (column in columnN) + this.insertColumn(column, param) + return param +} + +public fun > UpdateQuery.SingleRow.Constructor.Scope.updateColumnWithParam( + paramName: String, column0: Column, vararg columnN: Column +): QueryParam { + val param = this.queryParam(paramName, column0.type) + this.updateColumnWithParam(column0, param) + for (column in columnN) + this.updateColumnWithParam(column, param) + return param +} + +public fun > UpdateQuery.FromSubquery.Constructor.Scope.updateColumnWithParam( + paramName: String, column0: Column, vararg columnN: Column +): QueryParam { + val param = this.queryParam(paramName, column0.type) + this.updateColumnWithParam(column0, param) + for (column in columnN) + this.updateColumnWithParam(column, param) + return param +} + +public fun > UpdateQuery.MultipleRows.Constructor.Scope.updateColumnWithParam( + paramName: String, column0: Column, vararg columnN: Column +): QueryParam { + val param = this.inputColumn(paramName, column0.type) + this.updateColumnWithParam(column0, param) + for (column in columnN) + this.updateColumnWithParam(column, param) + return param +} diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/executors/row2row.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/executors/row2row.kt index 816f6a0..8563a3e 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/executors/row2row.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/executors/row2row.kt @@ -1,5 +1,5 @@ @file:OptIn(LowLevelApi::class) -@file:JvmName("Row2Void") +@file:JvmName("_Row2RowKt") @file:Suppress("DuplicatedCode") package ru.landgrafhomyak.db.serdha0.user_commons.executors diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/executors/row2table.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/executors/row2table.kt index 8a9a883..e33d572 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/executors/row2table.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/executors/row2table.kt @@ -1,5 +1,5 @@ @file:OptIn(LowLevelApi::class) -@file:JvmName("Row2Void") +@file:JvmName("_Row2Table") @file:Suppress("DuplicatedCode") package ru.landgrafhomyak.db.serdha0.user_commons.executors diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/executors/row2void.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/executors/row2void.kt index 4daf8b3..574c924 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/executors/row2void.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/executors/row2void.kt @@ -1,5 +1,5 @@ @file:OptIn(LowLevelApi::class) -@file:JvmName("Row2Void") +@file:JvmName("_Row2VoidKt") @file:Suppress("DuplicatedCode") package ru.landgrafhomyak.db.serdha0.user_commons.executors diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/executors/table2void.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/executors/table2void.kt index af332b8..8fe0fc5 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/executors/table2void.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/user_commons/executors/table2void.kt @@ -1,9 +1,10 @@ @file:OptIn(LowLevelApi::class) -@file:JvmName("Rows2VoidKt") +@file:JvmName("_Rows2VoidKt") @file:Suppress("DuplicatedCode") package ru.landgrafhomyak.db.serdha0.user_commons.executors +import kotlin.contracts.contract import kotlin.jvm.JvmName import ru.landgrafhomyak.db.serdha0.api.LowLevelApi import ru.landgrafhomyak.db.serdha0.api.queries._Query