'UPDATE' and 'DELETE' queries with set by-hand rowid

This commit is contained in:
Andrew Golovashevich 2025-01-27 02:48:15 +03:00
parent 472fbc895f
commit 50723c8811
2 changed files with 86 additions and 1 deletions

View File

@ -5,12 +5,33 @@ import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseType
import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseTypesProvider import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseTypesProvider
import ru.landgrafhomyak.serdha.api.v0.misc.QueryParam import ru.landgrafhomyak.serdha.api.v0.misc.QueryParam
import ru.landgrafhomyak.serdha.api.v0.runtime.InputRow import ru.landgrafhomyak.serdha.api.v0.runtime.InputRow
import ru.landgrafhomyak.serdha.api.v0.table.RowId
import ru.landgrafhomyak.serdha.api.v0.table.Table import ru.landgrafhomyak.serdha.api.v0.table.Table
public interface DeleteQuery<QueryUserExtension : Any> : _Query<QueryUserExtension> { public interface DeleteQuery<QueryUserExtension : Any> : _Query<QueryUserExtension> {
public interface SingleRow<QueryUserExtension : Any> : DeleteQuery<QueryUserExtension>, _Query.Params2Table<QueryUserExtension> {
public interface Creator<QueryUserExtension : Any, TargetTableUserExtension : Any> {
public fun createDeleteSingleRowWithReturning(table: Table<TargetTableUserExtension, *>, creator: Scope<QueryUserExtension, TargetTableUserExtension>): QueryUserExtension
public interface Scope<QueryUserExtension : Any, TargetTableUserExtension : Any> {
public val types: DatabaseTypesProvider
public fun <RT, DT : DatabaseType<RT>> param(name: String, type: DT): QueryParam<RT, DT, QueryUserExtension>
public var rowToRemove: QueryParam<*, DatabaseType.ROW_ID<TargetTableUserExtension>, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> returnRemovedValue(name: String, column: Column<RT, DT, TargetTableUserExtension>): Column<RT, DT, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> returnParam(name: String, column: QueryParam<RT, DT, TargetTableUserExtension>): Column<RT, DT, QueryUserExtension>
public fun ifNoRowSkip()
public fun ifNoRowJustReturn()
public fun ifNoRowThrow()
}
}
}
public interface FromSubquery<QueryUserExtension : Any> : DeleteQuery<QueryUserExtension>, _Query.Params2Table<QueryUserExtension> { public interface FromSubquery<QueryUserExtension : Any> : DeleteQuery<QueryUserExtension>, _Query.Params2Table<QueryUserExtension> {
public interface Creator<QueryUserExtension : Any, TargetTableUserExtension : Any, SelectorTableUserExtension : Any> { public interface Creator<QueryUserExtension : Any, TargetTableUserExtension : Any, SelectorTableUserExtension : Any> {
public fun createDeleteWithReturning(table: Table<TargetTableUserExtension, *>, creator: Scope<QueryUserExtension, TargetTableUserExtension, SelectorTableUserExtension>): QueryUserExtension public fun createDeleteFromSubqueryWithReturning(table: Table<TargetTableUserExtension, *>, creator: Scope<QueryUserExtension, TargetTableUserExtension, SelectorTableUserExtension>): QueryUserExtension
public interface Scope<QueryUserExtension : Any, TargetTableUserExtension : Any, SelectorTableUserExtension : Any> { public interface Scope<QueryUserExtension : Any, TargetTableUserExtension : Any, SelectorTableUserExtension : Any> {
public val types: DatabaseTypesProvider public val types: DatabaseTypesProvider
@ -22,6 +43,23 @@ public interface DeleteQuery<QueryUserExtension : Any> : _Query<QueryUserExtensi
public fun <RT, DT : DatabaseType<RT>> returnFromSubquery(name: String, column: Column<RT, DT, SelectorTableUserExtension>): Column<RT, DT, QueryUserExtension> public fun <RT, DT : DatabaseType<RT>> returnFromSubquery(name: String, column: Column<RT, DT, SelectorTableUserExtension>): Column<RT, DT, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> returnRemovedValue(name: String, column: Column<RT, DT, TargetTableUserExtension>): Column<RT, DT, QueryUserExtension> public fun <RT, DT : DatabaseType<RT>> returnRemovedValue(name: String, column: Column<RT, DT, TargetTableUserExtension>): Column<RT, DT, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> returnParam(name: String, column: QueryParam<RT, DT, TargetTableUserExtension>): Column<RT, DT, QueryUserExtension> public fun <RT, DT : DatabaseType<RT>> returnParam(name: String, column: QueryParam<RT, DT, TargetTableUserExtension>): Column<RT, DT, QueryUserExtension>
public fun ifNoRowSkip()
public fun ifNoRowJustReturn()
public fun ifNoRowThrow()
}
}
}
public interface MultipleRows<QueryUserExtension : Any> : DeleteQuery<QueryUserExtension>, _Query.Table2Void<QueryUserExtension> {
public interface Creator<QueryUserExtension : Any, TargetTableUserExtension : Any> {
public fun createMultipleRows(table: Table<TargetTableUserExtension, *>, creator: Scope<QueryUserExtension, TargetTableUserExtension>): QueryUserExtension
public interface Scope<QueryUserExtension : Any, TargetTableUserExtension : Any> {
public val rowsToRemove: QueryParam<RowId<TargetTableUserExtension>, DatabaseType.ROW_ID<TargetTableUserExtension>, QueryUserExtension>
public fun ifNoRowSkip()
public fun ifNoRowThrow()
} }
} }
} }

View File

@ -8,6 +8,30 @@ import ru.landgrafhomyak.serdha.api.v0.misc.QueryParam
import ru.landgrafhomyak.serdha.api.v0.runtime.InputRow import ru.landgrafhomyak.serdha.api.v0.runtime.InputRow
public interface UpdateQuery<QueryUserExtension : Any> : _Query<QueryUserExtension> { public interface UpdateQuery<QueryUserExtension : Any> : _Query<QueryUserExtension> {
public interface SingleRow<QueryUserExtension : Any> : UpdateQuery<QueryUserExtension>, _Query.Params2Table<QueryUserExtension> {
public interface Creator<QueryUserExtension : Any, TargetTableUserExtension : Any> {
public fun createUpdateSingleWithReturning(table: Table<TargetTableUserExtension, *>, creator: Scope<QueryUserExtension, TargetTableUserExtension>): QueryUserExtension
public interface Scope<QueryUserExtension : Any, TargetTableUserExtension : Any> {
public val types: DatabaseTypesProvider
public fun <RT, DT : DatabaseType<RT>> param(name: String, type: DT): QueryParam<RT, DT, QueryUserExtension>
public var rowToUpdate: QueryParam<*, DatabaseType.ROW_ID<TargetTableUserExtension>, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> updateColumnWithOldValue(dst: Column<RT, DT, TargetTableUserExtension>, src: Column<RT, DT, TargetTableUserExtension>)
public fun <RT, DT : DatabaseType<RT>> updateColumnWithParam(dst: Column<RT, DT, TargetTableUserExtension>, src: QueryParam<RT, DT, QueryUserExtension>)
public fun <RT, DT : DatabaseType<RT>> returnOldValue(name: String, column: Column<RT, DT, TargetTableUserExtension>): Column<RT, DT, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> returnNewValue(name: String, column: Column<RT, DT, TargetTableUserExtension>): Column<RT, DT, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> returnParam(name: String, param: QueryParam<RT, DT, TargetTableUserExtension>): Column<RT, DT, QueryUserExtension>
public fun ifNoRowSkip()
public fun ifNoRowJustReturn()
public fun ifNoRowThrow()
}
}
}
public interface FromSubquery<QueryUserExtension : Any> : UpdateQuery<QueryUserExtension>, _Query.Params2Table<QueryUserExtension> { public interface FromSubquery<QueryUserExtension : Any> : UpdateQuery<QueryUserExtension>, _Query.Params2Table<QueryUserExtension> {
public interface Creator<QueryUserExtension : Any, TargetTableUserExtension : Any, SelectorTableUserExtension : Any> { public interface Creator<QueryUserExtension : Any, TargetTableUserExtension : Any, SelectorTableUserExtension : Any> {
public fun createUpdateFromSubqueryWithReturning(table: Table<TargetTableUserExtension, *>, creator: Scope<QueryUserExtension, TargetTableUserExtension, SelectorTableUserExtension>): QueryUserExtension public fun createUpdateFromSubqueryWithReturning(table: Table<TargetTableUserExtension, *>, creator: Scope<QueryUserExtension, TargetTableUserExtension, SelectorTableUserExtension>): QueryUserExtension
@ -27,6 +51,29 @@ public interface UpdateQuery<QueryUserExtension : Any> : _Query<QueryUserExtensi
public fun <RT, DT : DatabaseType<RT>> returnOldValue(name: String, column: Column<RT, DT, TargetTableUserExtension>): Column<RT, DT, QueryUserExtension> public fun <RT, DT : DatabaseType<RT>> returnOldValue(name: String, column: Column<RT, DT, TargetTableUserExtension>): Column<RT, DT, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> returnNewValue(name: String, column: Column<RT, DT, TargetTableUserExtension>): Column<RT, DT, QueryUserExtension> public fun <RT, DT : DatabaseType<RT>> returnNewValue(name: String, column: Column<RT, DT, TargetTableUserExtension>): Column<RT, DT, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> returnParam(name: String, param: QueryParam<RT, DT, TargetTableUserExtension>): Column<RT, DT, QueryUserExtension> public fun <RT, DT : DatabaseType<RT>> returnParam(name: String, param: QueryParam<RT, DT, TargetTableUserExtension>): Column<RT, DT, QueryUserExtension>
public fun ifNoRowSkip()
public fun ifNoRowJustReturn()
public fun ifNoRowThrow()
}
}
}
public interface MultipleRows<QueryUserExtension : Any> : UpdateQuery<QueryUserExtension>, _Query.Table2Void<QueryUserExtension> {
public interface Creator<QueryUserExtension : Any, TargetTableUserExtension : Any> {
public fun createUpdateMultipleRows(table: Table<TargetTableUserExtension, *>, creator: Scope<QueryUserExtension, TargetTableUserExtension>): QueryUserExtension
public interface Scope<QueryUserExtension : Any, TargetTableUserExtension : Any> {
public val types: DatabaseTypesProvider
public fun <RT, DT : DatabaseType<RT>> param(name: String, type: DT): QueryParam<RT, DT, QueryUserExtension>
public var rowToUpdate: QueryParam<*, DatabaseType.ROW_ID<TargetTableUserExtension>, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> updateColumnWithOldValue(dst: Column<RT, DT, TargetTableUserExtension>, src: Column<RT, DT, TargetTableUserExtension>)
public fun <RT, DT : DatabaseType<RT>> updateColumnWithParam(dst: Column<RT, DT, TargetTableUserExtension>, src: QueryParam<RT, DT, QueryUserExtension>)
public fun ifNoRowSkip()
public fun ifNoRowThrow()
} }
} }
} }