Deep refactoring of handlers and scopes (except transaction-related)

This commit is contained in:
Andrew Golovashevich 2025-05-06 17:54:16 +03:00
parent d777d124ab
commit ac4ff46640
31 changed files with 221 additions and 563 deletions

View File

@ -1,17 +1,18 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.misc
import kotlin.jvm.JvmName
import ru.landgrafhomyak.db.sql_skeleton_0.api.table.Table
public interface Column<RT, DT : DatabaseType<RT>, tUE : Any> {
public interface Column<RUNTIME_TYPE, TABLE_USER_EXTENSION : Any, RUNTIME_KEY : Any> {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("name")
public val name: String
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("type")
public val type: DT
public val type: DatabaseType<RUNTIME_TYPE>
@Suppress("INAPPLICABLE_JVM_NAME", "PropertyName")
@get:JvmName("_getOwner")
public val _owner: _Selectable<tUE>
public val _owner: Table<TABLE_USER_EXTENSION, *, RUNTIME_KEY>
}

View File

@ -1,29 +1,4 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.misc
import kotlin.jvm.JvmName
import ru.landgrafhomyak.db.sql_skeleton_0.api.raw.DialectResolver
public interface DatabaseType<RUNTIME_TYPE : Any?> {
public val nullable: DatabaseType<RUNTIME_TYPE?>
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("getName")
public val name: String
public interface DefaultTypes {
@Suppress("INAPPLICABLE_JVM_NAME", "PropertyName")
@get:JvmName("BOOLEAN")
public val BOOLEAN: DatabaseType<Boolean>
@OptIn(ExperimentalUnsignedTypes::class)
@Suppress("INAPPLICABLE_JVM_NAME", "PropertyName")
@get:JvmName("BINARY_DATA")
public val BINARY_DATA: DatabaseType<UByteArray>
@OptIn(ExperimentalUnsignedTypes::class)
public fun BINARY_DATA(size: UInt, isFixedSize: Boolean): DatabaseType<UByteArray>
public fun <RUNTIME_TYPE> custom(resolver: DialectResolver.Type<RUNTIME_TYPE>): DatabaseType<RUNTIME_TYPE>
}
}
public interface DatabaseType<RUNTIME_TYPE : Any?>

View File

@ -1,24 +0,0 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.misc
public interface FiltersScope<oqUE : Any> {
public fun <RT : Any, DT : DatabaseType<RT>> filterNotNull(nullable: IntermediateColumn<RT?, DatabaseType.Nullable<RT, DT>, oqUE>): IntermediateColumn<RT, DT, oqUE>
public fun <RT : Any, DT : DatabaseType<RT>> filterIsNull(nullable: IntermediateColumn<RT?, DatabaseType.Nullable<RT, DT>, oqUE>)
public enum class ComparisonOperator {
EQUALS,
NOT_EQUALS,
LESS,
LESS_OR_EQUALS,
GREATER,
GREATER_OR_EQUALS,
}
public fun <RT, DT : DatabaseType<RT>> compareWithParam(column: IntermediateColumn<RT, DT, oqUE>, operator: ComparisonOperator, param: QueryParam<RT, DT, oqUE>)
public fun <RT, DT : DatabaseType<RT>> compareWithConstant(column: IntermediateColumn<RT, DT, oqUE>, operator: ComparisonOperator, constant: RT)
public fun ifTrue(column: IntermediateColumn<Boolean, DatabaseType.BOOLEAN, oqUE>)
public fun ifFalse(column: IntermediateColumn<Boolean, DatabaseType.BOOLEAN, oqUE>)
}

View File

@ -1,3 +0,0 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.misc
public interface IntermediateColumn<RT, DT : DatabaseType<RT>, OwnerBuilderUserExtension : Any>

View File

@ -1,56 +0,0 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.misc
import kotlin.jvm.JvmName
import ru.landgrafhomyak.db.sql_skeleton_0.api.runtime.InputRow
import ru.landgrafhomyak.db.sql_skeleton_0.api.runtime.OutputRow
public interface Mapper<mUE : Any> {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("uExt")
public val uExt: mUE
public interface InputColumn<RT, DT : DatabaseType<RT>, mUE : Any> : Column<RT, DT, mUE>
public interface OutputColumn<RT, DT : DatabaseType<RT>, mUE : Any> : QueryParam<RT, DT, mUE>
public fun interface InputLinker<mUE : Any, qUE : Any> {
public fun link(linker: Scope<mUE, qUE>)
public interface Scope<mUE : Any, qUE : Any> {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("uExt")
public val uExt: mUE
public operator fun <RT, DT : DatabaseType<RT>> set(p: InputColumn<RT, DT, mUE>, e: IntermediateColumn<RT, DT, qUE>)
}
}
public fun interface OutputLinker<mUE : Any, qUE : Any, oUE : Any> {
public fun link(linker: Scope<mUE, qUE>): oUE
public interface Scope<mUE : Any, qUE : Any> {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("uExt")
public val uExt: mUE
public operator fun <RT, DT : DatabaseType<RT>> get(p: OutputColumn<RT, DT, mUE>): IntermediateColumn<RT, DT, qUE>
}
}
public interface Constructor<mUE : Any> {
public fun createMapper(context: Scope<mUE>): Action<mUE>
public interface Scope<mUE : Any> {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("types")
public val types: DatabaseType.Provider
public fun <RT, DT : DatabaseType<RT>> input(name: String, type: DT): InputColumn<RT, DT, mUE>
public fun <RT, DT : DatabaseType<RT>> output(name: String, type: DT): OutputColumn<RT, DT, mUE>
}
}
public interface Action<mUE : Any> {
public fun calculate(input: OutputRow<mUE>, output: InputRow<mUE>)
}
}

View File

@ -2,12 +2,8 @@ package ru.landgrafhomyak.db.sql_skeleton_0.api.misc
import kotlin.jvm.JvmName
public interface QueryParam<RT, DT : DatabaseType<RT>, oqUE : Any> {
public interface QueryParam<RT, oqUE : Any> {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("getName")
public val name: String
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("getType")
public val type: DT
}

View File

@ -1,52 +0,0 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.misc
import kotlin.jvm.JvmName
import ru.landgrafhomyak.db.sql_skeleton_0.api.runtime.InputRow
import ru.landgrafhomyak.db.sql_skeleton_0.api.runtime.OutputRow
public interface Reducer<rUE : Any> {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("uExt")
public val uExt: rUE
public interface BidirectionalColumn<RT, DT : DatabaseType<RT>, rUE : Any> : Column<RT, DT, rUE>, QueryParam<RT, DT, rUE>
public interface OutputColumn<RT, DT : DatabaseType<RT>, rUE : Any> : Column<RT, DT, rUE>, QueryParam<RT, DT, rUE>
public fun interface Linker<_rUE : Any, qUE : Any, oUE : Any> {
public fun link(linker: Scope<_rUE, qUE>): oUE
public interface Scope<rUE : Any, qUE : Any> {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("uExt")
public val uExt: rUE
public fun <RT, DT : DatabaseType<RT>> link(red: BidirectionalColumn<RT, DT, rUE>, src: IntermediateColumn<RT, DT, qUE>): IntermediateColumn<RT, DT, qUE>
public fun <RT, DT : DatabaseType<RT>> linkAndInitialize(red: BidirectionalColumn<RT, DT, rUE>, src: IntermediateColumn<RT, DT, qUE>, initial: RT): IntermediateColumn<RT, DT, qUE>
public fun <RT, DT : DatabaseType<RT>> linkAndInitialize(red: BidirectionalColumn<RT, DT, rUE>, src: IntermediateColumn<RT, DT, qUE>, initial: QueryParam<RT, DT, qUE>): IntermediateColumn<RT, DT, qUE>
public fun <RT, DT : DatabaseType<RT>> link(red: OutputColumn<RT, DT, rUE>): IntermediateColumn<RT, DT, qUE>
public fun <RT, DT : DatabaseType<RT>> linkAndInitialize(red: OutputColumn<RT, DT, rUE>, initial: RT): IntermediateColumn<RT, DT, qUE>
public fun <RT, DT : DatabaseType<RT>> linkAndInitialize(red: OutputColumn<RT, DT, rUE>, initial: QueryParam<RT, DT, qUE>): IntermediateColumn<RT, DT, qUE>
}
}
public interface Constructor<rUE : Any> {
public fun createReducer(context: Scope<rUE>): Action<rUE>
public interface Scope<rUE : Any> {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("types")
public val types: DatabaseType.Provider
public fun <RT, DT : DatabaseType<RT>> outputColumn(name: String, type: DT): OutputColumn<RT, DT, rUE>
public fun <RT, DT : DatabaseType<RT>> outputColumn(name: String, type: DT, defaultInitialValue: RT): OutputColumn<RT, DT, rUE>
public fun <RT, DT : DatabaseType<RT>> bidirectionalColumn(name: String, type: DT): BidirectionalColumn<RT, DT, rUE>
public fun <RT, DT : DatabaseType<RT>> bidirectionalColumn(name: String, type: DT, defaultInitialValue: RT): BidirectionalColumn<RT, DT, rUE>
}
}
public interface Action<rUE : Any> {
public fun calculate(acc: OutputRow<rUE>, row: OutputRow<rUE>, newAcc: InputRow<rUE>)
}
}

View File

@ -1,48 +0,0 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.misc
import kotlin.jvm.JvmName
import ru.landgrafhomyak.db.sql_skeleton_0.api.queries._Query
import ru.landgrafhomyak.db.sql_skeleton_0.api.runtime.OutputRow
import ru.landgrafhomyak.db.sql_skeleton_0.api.runtime.Transaction
import ru.landgrafhomyak.db.sql_skeleton_0.api.table.RowId
import ru.landgrafhomyak.db.sql_skeleton_0.api.table.Table
public interface RowExpression<ttUE : Any, @Suppress("unused") R> {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("getTargetTable")
public val targetTable: Table<ttUE, *>
public interface RowExportsConstructor<rUE : Any, ttUE : Any> {
public fun createRowExports(context: Scope<rUE, ttUE>): rUE
public interface Scope<rUE : Any, ttUE : Any> {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("tt")
public val tt: Table<ttUE, *>
public fun <RT, DT : DatabaseType<RT>> selectFromTargetTable(column: Column<RT, DT, ttUE>): Column<RT, DT, rUE>
public fun <rtUE : Any, RT, DT : DatabaseType<RT>> followReference(
ref: Column<*, *, rUE>,
column: Column<RT, DT, rtUE>
): Column<RT, DT, rUE>
public fun <rtUE : Any, RT : Any, DT : DatabaseType<RT>> followReferenceNullable(
ref: Column<RowId<rtUE>, DatabaseType.ROW_ID<rtUE>, rUE>,
column: Column<RT, DT, rtUE>
): Column<RT?, DatabaseType.Nullable<RT, DT>, rUE>
}
}
public interface Constructor<ttUE : Any, rUE : Any, R> {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("rowExports")
public val rowExports: RowExportsConstructor<rUE, ttUE>
public fun createRowExpression(internalQueries: _Query.Constructor._SelectsScope, runtimeQueries: _Query.Constructor._SelectsScope): Action<rUE, R>
}
public interface Action<rUE : Any, R> {
public suspend fun calculateRow(rowUE: rUE, row: OutputRow<rUE>, transaction: Transaction): R
}
}

View File

@ -1,28 +0,0 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.misc
import kotlin.jvm.JvmName
import ru.landgrafhomyak.db.sql_skeleton_0.api.queries.SelectQuery
import ru.landgrafhomyak.db.sql_skeleton_0.api.queries.InsertQuery
import ru.landgrafhomyak.db.sql_skeleton_0.api.queries.UpdateQuery
import ru.landgrafhomyak.db.sql_skeleton_0.api.queries.DeleteQuery
/**
* Utility interface to mark queries (and table) that can be used as the source for other queries.
*
* @param UE Type of extension provided by user ([about user extensions](https://git.landgrafhomyak.ru/SERDHA/serdha-0-api.kt/wiki/User-extensions)).
*
* @see SelectQuery
* @see InsertQuery.FromSubquery.Constructor.selector
* @see UpdateQuery.FromSubquery.Constructor.selector
* @see DeleteQuery.FromSubquery.Constructor.selector
*/
@Suppress("ClassName")
public interface _Selectable<out UE : Any> {
/**
* Getter of an extension provided by user ([about user extensions](https://git.landgrafhomyak.ru/SERDHA/serdha-0-api.kt/wiki/User-extensions)).
*/
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("uExt")
public val uExt: UE
}

View File

@ -1,29 +1,34 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.module
import kotlin.jvm.JvmName
import ru.landgrafhomyak.db.sql_skeleton_0.api.LowLevelApi
import ru.landgrafhomyak.db.sql_skeleton_0.api.table.Table
import ru.landgrafhomyak.db.sql_skeleton_0.api.queries._Query
import ru.landgrafhomyak.db.sql_skeleton_0.api.runtime.Executor
import ru.landgrafhomyak.db.sql_skeleton_0.api.runtime.Transaction
import ru.landgrafhomyak.db.sql_skeleton_0.api.queries._Statement
import ru.landgrafhomyak.db.sql_skeleton_0.api.raw.DialectResolver
import ru.landgrafhomyak.db.sql_skeleton_0.api.runtime.InputRow
import ru.landgrafhomyak.db.sql_skeleton_0.api.table.TableConstructor
import ru.landgrafhomyak.db.sql_skeleton_0.api.table.TableScopedObject
public interface CreateModuleScope {
public interface CreateModuleScope<mUE : Any, RUNTIME_KEY : Any> {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("rootNs")
public val rootNs: Namespace
public val rootNs: Namespace<mUE>
public fun <tUE : Any> createTable(namespace: Namespace = this.rootNs, name: String, initializer: TableConstructor<tUE>): Table<tUE, Nothing>
public fun <tUE : Any> createTable(
lifeTime: Table.LifeTime = Table.LifeTime.DATABASE_SCOPE,
namespace: Namespace<mUE> = this.rootNs,
name: String, initializer: TableConstructor<tUE, RUNTIME_KEY>
): Table<tUE, mUE, RUNTIME_KEY>
public fun <tUE : Any> createSessionScopeTemporaryTable(namespace: Namespace = this.rootNs, name: String, initializer: TableConstructor<tUE>): Table<tUE, Nothing>
public fun moduleScopedObject(namespace: Namespace<mUE> = this.rootNs, name: String): ModuleScopedObject<mUE, RUNTIME_KEY>
public fun <tUE : Any> createTransactionScopeTemporaryTable(namespace: Namespace = this.rootNs, name: String, initializer: TableConstructor<tUE>): Table<tUE, Nothing>
public fun <mUE : Any> substituteModule(rootNs: Namespace<mUE>, template: ModuleTemplate<mUE>): Module<mUE>
public fun <tUE : Any> createModuleConfiguringScopeTemporaryTable(namespace: Namespace = this.rootNs, name: String, initializer: TableConstructor<tUE>): Table<tUE, Nothing>
public fun namespace(parent: Namespace<mUE>, name: String): Namespace<mUE>
public fun <R : Any> createQuery(creator: _Query.Constructor<R>): R
public fun addStatement(stmt: DialectResolver.Statement_Void2Void<*>)
public fun <R : Any> createModuleConfiguringScopeTemporaryQuery(creator: _Query.Constructor<R>): R
public fun <mUE : Any> substituteModule(rootNs: Namespace, template: ModuleTemplate<mUE>): Module<mUE>
@LowLevelApi
public fun <sUE : Any> addStatement(stmt: DialectResolver.Statement_Params2Void<sUE>): InputRow._Scope<sUE, Unit>
}

View File

@ -1,7 +1,7 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.module
import kotlin.jvm.JvmName
import ru.landgrafhomyak.db.sql_skeleton_0.api.queries._Query
import ru.landgrafhomyak.db.sql_skeleton_0.api.queries._Statement
import ru.landgrafhomyak.db.sql_skeleton_0.api.runtime.Executor
import ru.landgrafhomyak.db.sql_skeleton_0.api.table.Table
import ru.landgrafhomyak.db.sql_skeleton_0.api.table.TableConstructor
@ -16,7 +16,7 @@ public interface Module<mUE : Any> {
@get:JvmName("getVersionKey")
public val versionKey: String
public fun <R : Any> createQuery(c: _Query.Constructor<R>): R
public fun <R : Any> createQuery(c: _Statement.Constructor<R>): R
public fun <tUE : Any> createSessionScopeTemporaryTable(name: String, initializer: TableConstructor<tUE>): Table<tUE, Nothing>

View File

@ -0,0 +1,8 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.module
import ru.landgrafhomyak.db.sql_skeleton_0.api.table.Table
public interface ModuleScopedObject<mUE : Any, RUNTIME_KEY : Any> {
public val module: Module<mUE, RUNTIME_KEY>
public val namespace
}

View File

@ -2,10 +2,7 @@ package ru.landgrafhomyak.db.sql_skeleton_0.api.module
import kotlin.jvm.JvmName
public interface Namespace {
@Suppress("SpellCheckingInspection")
public fun subnamespace(name: String): Namespace
public interface Namespace<mUE: Any> {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("getName")
public val name: String

View File

@ -1,46 +1,63 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.module
import kotlin.jvm.JvmName
import ru.landgrafhomyak.db.sql_skeleton_0.api.table.Table
import ru.landgrafhomyak.db.sql_skeleton_0.api.table.TableConstructor
import ru.landgrafhomyak.db.sql_skeleton_0.api.table.TableUpgrade
public interface UpgradeModuleScope<omUE : Any> : CreateModuleScope {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("oldModule")
public val oldModule: omUE
public interface UpgradeModuleScope<nmUE : Any, omUE : Any, RUNTIME_KEY : Any> : CreateModuleScope<nmUE, RUNTIME_KEY> {
public fun <tUE : Any> keepTable(table: Table<tUE, omUE, RUNTIME_KEY>): Table<tUE, nmUE, RUNTIME_KEY>
public interface TableUpgrade<tnUE : Any, toUE : Any> {
public fun upgradeTable(oldTable: Table<toUE, *>, upgrade: TableUpgrade<tnUE, toUE>): tnUE
}
public fun <tUE : Any> keepAndRenameTable(table: Table<tUE, omUE, RUNTIME_KEY>, newName: String): Table<tUE, nmUE, RUNTIME_KEY>
public fun <tUE : Any> keepAndRenameTable(table: Table<tUE, omUE, RUNTIME_KEY>, newNamespace: Namespace<nmUE>): Table<tUE, nmUE, RUNTIME_KEY>
public fun <tUE : Any> keepTable(
table: Table<tUE, *>,
): Table<tUE, *>
public fun <tUE : Any> keepAndRenameTable(table: Table<tUE, omUE, RUNTIME_KEY>, newNamespace: Namespace<nmUE>, newName: String): Table<tUE, nmUE, RUNTIME_KEY>
public fun <tUE : Any> renameTable(
table: Table<tUE, *>,
newNamespace: Namespace? = null,
newName: String? = null
): Table<tUE, *>
public fun <ntUE : Any, otUE : Any> upgradeTable(oldTable: Table<otUE, omUE, RUNTIME_KEY>, upgrade: TableUpgrade<ntUE, otUE, RUNTIME_KEY>): Table<ntUE, nmUE, RUNTIME_KEY>
public fun <tnUE : Any, toUE : Any> upgradeTable(
oldTable: Table<toUE, *>,
upgrade: TableUpgrade<tnUE, toUE>
): Table<tnUE, toUE>
public fun <ntUE : Any, otUE : Any> upgradeAndRenameTable(
table: Table<otUE, omUE, RUNTIME_KEY>,
newName: String,
upgrade: TableUpgrade<ntUE, otUE, RUNTIME_KEY>
): Table<ntUE, nmUE, RUNTIME_KEY>
public fun <ntUE : Any, otUE : Any> upgradeAndRenameTable(
table: Table<otUE, omUE, RUNTIME_KEY>,
newNamespace: Namespace<nmUE>,
upgrade: TableUpgrade<ntUE, otUE, RUNTIME_KEY>
): Table<ntUE, nmUE, RUNTIME_KEY>
public fun <tnUE : Any, toUE : Any> upgradeAndRenameTable(
oldTable: Table<tnUE, toUE>,
newNamespace: Namespace? = null,
newName: String? = null,
upgrade: TableUpgrade<tnUE, toUE>
): Table<tnUE, toUE>
public fun <ntUE : Any, otUE : Any> upgradeAndRenameTable(
table: Table<otUE, omUE, RUNTIME_KEY>,
newNamespace: Namespace<nmUE>,
upgrade: TableUpgrade<ntUE, otUE, RUNTIME_KEY>,
newName: String
): Table<ntUE, nmUE, RUNTIME_KEY>
public fun deleteTable(table: Table<*, *>)
public fun deleteTable(table: Table<*, omUE, RUNTIME_KEY>)
public fun deleteTableAfterModuleUpgraded(table: Table<*, *>)
public fun <tUE : Any> deleteTableAfterModuleUpgraded(table: Table<tUE, omUE, RUNTIME_KEY>): Table<tUE, nmUE, RUNTIME_KEY>
public fun <smUE : Any> upgradeModule(oldModule: Module<*>, rootNs: Namespace, template: ModuleTemplate<smUE>): Module<smUE>
public fun exportTable(table: Table<*, omUE, RUNTIME_KEY>)
public fun <tUE : Any> importTable(
namespace: Namespace<nmUE> = this.rootNs, name: String,
table: Table<tUE, *, RUNTIME_KEY>
): Table<tUE, nmUE, RUNTIME_KEY>
public fun <ntUE : Any, otUE : Any> importAndUpgradeTable(
namespace: Namespace<nmUE> = this.rootNs, name: String,
table: Table<otUE, *, RUNTIME_KEY>,
upgrade: TableUpgrade<ntUE, otUE, RUNTIME_KEY>
): Table<ntUE, nmUE, RUNTIME_KEY>
public fun <smUE : Any> keepModule(module: Module<smUE>): Module<smUE>
public fun <smUE : Any> keepAndMoveModule(oldModule: Module<smUE>, newNs: Namespace<nmUE>): Module<smUE>
public fun <smUE : Any> upgradeModule(oldModule: Module<*>, template: ModuleTemplate<smUE>): Module<smUE>
public fun <smUE : Any> upgradeAndMoveModule(oldModule: Module<*>, newNs: Namespace<nmUE>, template: ModuleTemplate<smUE>): Module<smUE>
public fun removeModule(oldModule: Module<*>)
public fun <smUE : Any> removeModuleAfterUpgrade(oldModule: Module<smUE>): Module<smUE>
}

View File

@ -1,51 +1,53 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.queries
public interface RawStatement<qUE : Any?> : _Statement<qUE> {
import ru.landgrafhomyak.db.sql_skeleton_0.api.raw.DialectKey
public interface RawStatement<qUE : Any?, DIALECT : DialectKey<*, *, *, *, *, *, *, *, *>> : _Statement<qUE, DIALECT> {
public override val uExt: qUE
public interface Void2Void<qUE : Any?> : RawStatement<qUE>, _Statement.Void2Void<qUE> {
public interface Void2Void<qUE : Any?, DIALECT : DialectKey<*, *, *, *, *, *, *, *, *>> : RawStatement<qUE, DIALECT>, _Statement.Void2Void<qUE, DIALECT> {
override val uExt: qUE
public interface Constructor<qUE: Any?>
public interface Constructor<qUE : Any?>
}
public interface Void2Row<qUE : Any> : RawStatement<qUE>, _Statement.Void2Row<qUE> {
public interface Void2Row<qUE : Any, DIALECT : DialectKey<*, *, *, *, *, *, *, *, *>> : RawStatement<qUE, DIALECT>, _Statement.Void2Row<qUE, DIALECT> {
override val uExt: qUE
public interface Constructor<qUE : Any>
}
public interface Void2RowOrNull<qUE : Any> : RawStatement<qUE>, _Statement.Void2RowOrNull<qUE> {
public interface Void2RowOrNull<qUE : Any, DIALECT : DialectKey<*, *, *, *, *, *, *, *, *>> : RawStatement<qUE, DIALECT>, _Statement.Void2RowOrNull<qUE, DIALECT> {
override val uExt: qUE
public interface Constructor<qUE : Any>
}
public interface Void2Table<qUE : Any> : RawStatement<qUE>, _Statement.Void2Table<qUE> {
public interface Void2Table<qUE : Any, DIALECT : DialectKey<*, *, *, *, *, *, *, *, *>> : RawStatement<qUE, DIALECT>, _Statement.Void2Table<qUE, DIALECT> {
override val uExt: qUE
public interface Constructor<qUE : Any>
}
public interface Params2Void<qUE : Any> : RawStatement<qUE>, _Statement.Params2Void<qUE> {
public interface Params2Void<qUE : Any, DIALECT : DialectKey<*, *, *, *, *, *, *, *, *>> : RawStatement<qUE, DIALECT>, _Statement.Params2Void<qUE, DIALECT> {
override val uExt: qUE
public interface Constructor<qUE : Any>
}
public interface Params2Row<qUE : Any> : RawStatement<qUE>, _Statement.Params2Row<qUE> {
public interface Params2Row<qUE : Any, DIALECT : DialectKey<*, *, *, *, *, *, *, *, *>> : RawStatement<qUE, DIALECT>, _Statement.Params2Row<qUE, DIALECT> {
override val uExt: qUE
public interface Constructor<qUE : Any>
}
public interface Params2RowOrNull<qUE : Any> : RawStatement<qUE>, _Statement.Params2RowOrNull<qUE> {
public interface Params2RowOrNull<qUE : Any, DIALECT : DialectKey<*, *, *, *, *, *, *, *, *>> : RawStatement<qUE, DIALECT>, _Statement.Params2RowOrNull<qUE, DIALECT> {
override val uExt: qUE
public interface Constructor<qUE : Any>
}
public interface Params2Table<qUE : Any> : RawStatement<qUE>, _Statement.Params2Table<qUE> {
public interface Params2Table<qUE : Any, DIALECT : DialectKey<*, *, *, *, *, *, *, *, *>> : RawStatement<qUE, DIALECT>, _Statement.Params2Table<qUE, DIALECT> {
override val uExt: qUE
public interface Constructor<qUE : Any>

View File

@ -1,20 +1,21 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.queries
import kotlin.jvm.JvmName
import ru.landgrafhomyak.db.sql_skeleton_0.api.raw.DialectKey
@Suppress("ClassName")
public interface _Statement<qUE : Any?> {
public interface _Statement<STATEMENT_USER_EXTENSION : Any?, DIALECT : DialectKey<*, *, *, *, *, *, *, *, *>> {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("uExt")
public val uExt: qUE
public val uExt: STATEMENT_USER_EXTENSION
public interface Void2Void<qUE : Any?> : _Statement<qUE>
public interface Void2Row<qUE : Any> : _Statement<qUE>
public interface Void2RowOrNull<qUE : Any> : _Statement<qUE>
public interface Void2Table<qUE : Any> : _Statement<qUE>
public interface Params2Void<qUE : Any> : _Statement<qUE>
public interface Params2Row<qUE : Any> : _Statement<qUE>
public interface Params2RowOrNull<qUE : Any> : _Statement<qUE>
public interface Params2Table<qUE : Any> : _Statement<qUE>
public interface Void2Void<qUE : Any?, DIALECT : DialectKey<*, *, *, *, *, *, *, *, *>> : _Statement<qUE, DIALECT>
public interface Void2Row<qUE : Any, DIALECT : DialectKey<*, *, *, *, *, *, *, *, *>> : _Statement<qUE, DIALECT>
public interface Void2RowOrNull<qUE : Any, DIALECT : DialectKey<*, *, *, *, *, *, *, *, *>> : _Statement<qUE, DIALECT>
public interface Void2Table<qUE : Any, DIALECT : DialectKey<*, *, *, *, *, *, *, *, *>> : _Statement<qUE, DIALECT>
public interface Params2Void<qUE : Any, DIALECT : DialectKey<*, *, *, *, *, *, *, *, *>> : _Statement<qUE, DIALECT>
public interface Params2Row<qUE : Any, DIALECT : DialectKey<*, *, *, *, *, *, *, *, *>> : _Statement<qUE, DIALECT>
public interface Params2RowOrNull<qUE : Any, DIALECT : DialectKey<*, *, *, *, *, *, *, *, *>> : _Statement<qUE, DIALECT>
public interface Params2Table<qUE : Any, DIALECT : DialectKey<*, *, *, *, *, *, *, *, *>> : _Statement<qUE, DIALECT>
}

View File

@ -5,115 +5,117 @@ import ru.landgrafhomyak.db.sql_skeleton_0.api.queries.RawStatement
public interface DialectResolver {
public fun interface Type<RUNTIME_TYPE> {
public fun interface Type<RUNTIME_TYPE> : DialectResolver {
public fun resolveByDialect_databaseType(selector: Selector<RUNTIME_TYPE>)
public interface Selector<RUNTIME_TYPE> {
@Suppress("BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER")
public fun <DATABASE_TYPE, DATABASE_TYPE_UNBOUND> bind(
key: DialectKey<DATABASE_TYPE_UNBOUND, *, *, *, *, *, *, *, *>, type: DATABASE_TYPE
public fun <DATABASE_TYPE, DATABASE_TYPE_UNBOUND, DIALECT : DialectKey<DATABASE_TYPE_UNBOUND, *, *, *, *, *, *, *, *>> bind(
key: DIALECT, type: DATABASE_TYPE
) where DATABASE_TYPE_UNBOUND : DatabaseType<*>,
DATABASE_TYPE : DatabaseType<RUNTIME_TYPE>,
DATABASE_TYPE : DATABASE_TYPE_UNBOUND
}
}
public fun interface Statement_Void2Void<USER_EXTENSION> {
public fun interface Statement_Void2Void<USER_EXTENSION : Any?> {
public fun resolveByDialect_statement_void2void(selector: Selector<USER_EXTENSION>)
public interface Selector<USER_EXTENSION> {
public interface Selector<USER_EXTENSION : Any?> {
@Suppress("BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER")
public fun <STATEMENT_CONSTRUCTOR, STATEMENT_CONSTRUCTOR_UNBOUND> bind(
key: DialectKey<*, STATEMENT_CONSTRUCTOR_UNBOUND, *, *, *, *, *, *, *>, constructor: STATEMENT_CONSTRUCTOR
public fun <STATEMENT_CONSTRUCTOR, STATEMENT_CONSTRUCTOR_UNBOUND, DIALECT : DialectKey<*, STATEMENT_CONSTRUCTOR_UNBOUND, *, *, *, *, *, *, *>> bind(
key: DIALECT, constructor: STATEMENT_CONSTRUCTOR
) where STATEMENT_CONSTRUCTOR_UNBOUND : RawStatement.Void2Void.Constructor<*>,
STATEMENT_CONSTRUCTOR : RawStatement.Void2Void.Constructor<USER_EXTENSION>,
STATEMENT_CONSTRUCTOR : STATEMENT_CONSTRUCTOR_UNBOUND
}
}
public fun interface Statement_Void2Row<USER_EXTENSION> {
public fun interface Statement_Void2Row<USER_EXTENSION : Any> {
public fun resolveByDialect_statement_void2row(selector: Selector<USER_EXTENSION>)
public interface Selector<USER_EXTENSION> {
public interface Selector<USER_EXTENSION : Any> {
@Suppress("BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER")
public fun <STATEMENT_CONSTRUCTOR, STATEMENT_CONSTRUCTOR_UNBOUND> bind(
key: DialectKey<*, *, STATEMENT_CONSTRUCTOR_UNBOUND, *, *, *, *, *, *>, constructor: STATEMENT_CONSTRUCTOR
public fun <STATEMENT_CONSTRUCTOR, STATEMENT_CONSTRUCTOR_UNBOUND, DIALECT : DialectKey<*, *, STATEMENT_CONSTRUCTOR_UNBOUND, *, *, *, *, *, *>> bind(
key: DIALECT, constructor: STATEMENT_CONSTRUCTOR
) where STATEMENT_CONSTRUCTOR_UNBOUND : RawStatement.Void2Row.Constructor<*>,
STATEMENT_CONSTRUCTOR : RawStatement.Void2Row.Constructor<USER_EXTENSION>,
STATEMENT_CONSTRUCTOR : STATEMENT_CONSTRUCTOR_UNBOUND
}
}
public fun interface Statement_Void2RowOrNull<USER_EXTENSION> {
public fun interface Statement_Void2RowOrNull<USER_EXTENSION : Any> {
public fun resolveByDialect_statement_void2rowOrNull(selector: Selector<USER_EXTENSION>)
public interface Selector<USER_EXTENSION> {
public interface Selector<USER_EXTENSION : Any> {
@Suppress("BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER")
public fun <STATEMENT_CONSTRUCTOR, STATEMENT_CONSTRUCTOR_UNBOUND> bind(
key: DialectKey<*, *, *, STATEMENT_CONSTRUCTOR_UNBOUND, *, *, *, *, *>, constructor: STATEMENT_CONSTRUCTOR
public fun <STATEMENT_CONSTRUCTOR, STATEMENT_CONSTRUCTOR_UNBOUND, DIALECT : DialectKey<*, *, *, STATEMENT_CONSTRUCTOR_UNBOUND, *, *, *, *, *>> bind(
key: DIALECT, constructor: STATEMENT_CONSTRUCTOR
) where STATEMENT_CONSTRUCTOR_UNBOUND : RawStatement.Void2RowOrNull.Constructor<*>,
STATEMENT_CONSTRUCTOR : RawStatement.Void2RowOrNull.Constructor<USER_EXTENSION>,
STATEMENT_CONSTRUCTOR : STATEMENT_CONSTRUCTOR_UNBOUND
}
}
public fun interface Statement_Void2Table<USER_EXTENSION> {
public fun interface Statement_Void2Table<USER_EXTENSION : Any> {
public fun resolveByDialect_statement_void2table(selector: Selector<USER_EXTENSION>)
public interface Selector<USER_EXTENSION> {
public interface Selector<USER_EXTENSION : Any> {
@Suppress("BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER")
public fun <STATEMENT_CONSTRUCTOR, STATEMENT_CONSTRUCTOR_UNBOUND> bind(
key: DialectKey<*, *, *, *, STATEMENT_CONSTRUCTOR_UNBOUND, *, *, *, *>, constructor: STATEMENT_CONSTRUCTOR
public fun <STATEMENT_CONSTRUCTOR, STATEMENT_CONSTRUCTOR_UNBOUND, DIALECT : DialectKey<*, *, *, *, STATEMENT_CONSTRUCTOR_UNBOUND, *, *, *, *>> bind(
key: DIALECT, constructor: STATEMENT_CONSTRUCTOR
) where STATEMENT_CONSTRUCTOR_UNBOUND : RawStatement.Void2Table.Constructor<*>,
STATEMENT_CONSTRUCTOR : RawStatement.Void2Table.Constructor<USER_EXTENSION>,
STATEMENT_CONSTRUCTOR : STATEMENT_CONSTRUCTOR_UNBOUND
}
}
public fun interface Statement_Params2Void<USER_EXTENSION> {
public fun interface Statement_Params2Void<USER_EXTENSION : Any> {
public fun resolveByDialect_statement_params2void(selector: Selector<USER_EXTENSION>)
public interface Selector<USER_EXTENSION> {
public interface Selector<USER_EXTENSION : Any> {
@Suppress("BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER")
public fun <STATEMENT_CONSTRUCTOR, STATEMENT_CONSTRUCTOR_UNBOUND> bind(
key: DialectKey<*, *, *, *, *, STATEMENT_CONSTRUCTOR_UNBOUND, *, *, *>, constructor: STATEMENT_CONSTRUCTOR
public fun <STATEMENT_CONSTRUCTOR, STATEMENT_CONSTRUCTOR_UNBOUND, DIALECT : DialectKey<*, *, *, *, *, STATEMENT_CONSTRUCTOR_UNBOUND, *, *, *>> bind(
key: DIALECT, constructor: STATEMENT_CONSTRUCTOR
) where STATEMENT_CONSTRUCTOR_UNBOUND : RawStatement.Params2Void.Constructor<*>,
STATEMENT_CONSTRUCTOR : RawStatement.Params2Void.Constructor<USER_EXTENSION>,
STATEMENT_CONSTRUCTOR : STATEMENT_CONSTRUCTOR_UNBOUND
}
}
public fun interface Statement_Params2Row<USER_EXTENSION> {
public fun interface Statement_Params2Row<USER_EXTENSION : Any> {
public fun resolveByDialect_statement_params2row(selector: Selector<USER_EXTENSION>)
public interface Selector<USER_EXTENSION> {
public interface Selector<USER_EXTENSION : Any> {
@Suppress("BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER")
public fun <STATEMENT_CONSTRUCTOR, STATEMENT_CONSTRUCTOR_UNBOUND> bind(
key: DialectKey<*, *, *, *, *, *, STATEMENT_CONSTRUCTOR_UNBOUND, *, *>, constructor: STATEMENT_CONSTRUCTOR
public fun <STATEMENT_CONSTRUCTOR, STATEMENT_CONSTRUCTOR_UNBOUND, DIALECT : DialectKey<*, *, *, *, *, *, STATEMENT_CONSTRUCTOR_UNBOUND, *, *>> bind(
key: DIALECT, constructor: STATEMENT_CONSTRUCTOR
) where STATEMENT_CONSTRUCTOR_UNBOUND : RawStatement.Params2Row.Constructor<*>,
STATEMENT_CONSTRUCTOR : RawStatement.Params2Row.Constructor<USER_EXTENSION>,
STATEMENT_CONSTRUCTOR : STATEMENT_CONSTRUCTOR_UNBOUND
}
}
public fun interface Statement_Params2RowOrNull<USER_EXTENSION> {
public fun interface Statement_Params2RowOrNull<USER_EXTENSION : Any> {
public fun resolveByDialect_statement_params2rowOrNull(selector: Selector<USER_EXTENSION>)
public interface Selector<USER_EXTENSION> {
public interface Selector<USER_EXTENSION : Any> {
@Suppress("BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER")
public fun <STATEMENT_CONSTRUCTOR, STATEMENT_CONSTRUCTOR_UNBOUND> bind(
key: DialectKey<*, *, *, *, *, *, *, STATEMENT_CONSTRUCTOR_UNBOUND, *>, constructor: STATEMENT_CONSTRUCTOR
public fun <STATEMENT_CONSTRUCTOR, STATEMENT_CONSTRUCTOR_UNBOUND, DIALECT : DialectKey<*, *, *, *, *, *, *, STATEMENT_CONSTRUCTOR_UNBOUND, *>> bind(
key: DIALECT, constructor: STATEMENT_CONSTRUCTOR
) where STATEMENT_CONSTRUCTOR_UNBOUND : RawStatement.Params2RowOrNull.Constructor<*>,
STATEMENT_CONSTRUCTOR : RawStatement.Params2RowOrNull.Constructor<USER_EXTENSION>,
STATEMENT_CONSTRUCTOR : STATEMENT_CONSTRUCTOR_UNBOUND
}
}
public fun interface Statement_Params2Table<USER_EXTENSION> {
public fun interface Statement_Params2Table<USER_EXTENSION : Any> {
public fun resolveByDialect_statement_params2table(selector: Selector<USER_EXTENSION>)
public interface Selector<USER_EXTENSION> {
public interface Selector<USER_EXTENSION : Any> {
@Suppress("BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER")
public fun <STATEMENT_CONSTRUCTOR, STATEMENT_CONSTRUCTOR_UNBOUND> bind(
key: DialectKey<*, *, *, *, *, *, *, *, STATEMENT_CONSTRUCTOR_UNBOUND>, constructor: STATEMENT_CONSTRUCTOR
public fun <STATEMENT_CONSTRUCTOR, STATEMENT_CONSTRUCTOR_UNBOUND, DIALECT : DialectKey<*, *, *, *, *, *, *, *, STATEMENT_CONSTRUCTOR_UNBOUND>> bind(
key: DIALECT, constructor: STATEMENT_CONSTRUCTOR
) where STATEMENT_CONSTRUCTOR_UNBOUND : RawStatement.Params2Table.Constructor<*>,
STATEMENT_CONSTRUCTOR : RawStatement.Params2Table.Constructor<USER_EXTENSION>,
STATEMENT_CONSTRUCTOR : STATEMENT_CONSTRUCTOR_UNBOUND

View File

@ -1,10 +1,9 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.runtime
import ru.landgrafhomyak.db.sql_skeleton_0.api.LowLevelApi
import ru.landgrafhomyak.db.sql_skeleton_0.api.module.Module
import ru.landgrafhomyak.db.sql_skeleton_0.api.table.RowId
import ru.landgrafhomyak.db.sql_skeleton_0.api.table.Table
import ru.landgrafhomyak.db.sql_skeleton_0.api.queries._Query
import ru.landgrafhomyak.db.sql_skeleton_0.api.queries._Statement
public interface Executor {
@Suppress("FunctionName")
@ -13,19 +12,19 @@ public interface Executor {
@Suppress("FunctionName")
@LowLevelApi
public suspend fun <QueryUserExtension : Any> _executeAutoTransactedQuery(compiledQuery: _Query.Void2Table<QueryUserExtension>): OutputRow._Iterator<QueryUserExtension, Unit>
public suspend fun <QueryUserExtension : Any> _executeAutoTransactedQuery(compiledQuery: _Statement.Void2Table<QueryUserExtension>): OutputRow._Iterator<QueryUserExtension, Unit>
@Suppress("FunctionName")
@LowLevelApi
public suspend fun <QueryUserExtension : Any> _executeAutoTransactedQuery(compiledQuery: _Query.Params2Table<QueryUserExtension>): InputRow._Scope<QueryUserExtension, OutputRow._Iterator<QueryUserExtension, Unit>>
public suspend fun <QueryUserExtension : Any> _executeAutoTransactedQuery(compiledQuery: _Statement.Params2Table<QueryUserExtension>): InputRow._Scope<QueryUserExtension, OutputRow._Iterator<QueryUserExtension, Unit>>
@Suppress("FunctionName")
@LowLevelApi
public suspend fun <QueryUserExtension : Any> _executeAutoTransactedQuery(compiledQuery: _Query.Table2Void<QueryUserExtension>): InputRow._Iterator<QueryUserExtension, Unit>
public suspend fun <QueryUserExtension : Any> _executeAutoTransactedQuery(compiledQuery: _Statement.Table2Void<QueryUserExtension>): InputRow._Iterator<QueryUserExtension, Unit>
@Suppress("FunctionName")
@LowLevelApi
public suspend fun <QueryUserExtension : Any> _executeAutoTransactedQuery(compiledQuery: _Query.Params2Void<QueryUserExtension>): InputRow._Scope<QueryUserExtension, Unit>
public suspend fun <QueryUserExtension : Any> _executeAutoTransactedQuery(compiledQuery: _Statement.Params2Void<QueryUserExtension>): InputRow._Scope<QueryUserExtension, Unit>
public fun <TableUserException : Any, V> mapOfRowIds(
table: Table<TableUserException, *>,

View File

@ -2,7 +2,6 @@ package ru.landgrafhomyak.db.sql_skeleton_0.api.runtime
import kotlin.jvm.JvmName
import ru.landgrafhomyak.db.sql_skeleton_0.api.LowLevelApi
import ru.landgrafhomyak.db.sql_skeleton_0.api.misc.DatabaseType
import ru.landgrafhomyak.db.sql_skeleton_0.api.misc.QueryParam
public interface InputRow<qUE : Any> {
@ -10,21 +9,21 @@ public interface InputRow<qUE : Any> {
@get:JvmName("uExt")
public val uExt: qUE
public operator fun <RuntimeType> set(c: QueryParam<RuntimeType, *, qUE>, value: RuntimeType)
public operator fun <RuntimeType> set(c: QueryParam<RuntimeType, qUE>, value: RuntimeType)
public operator fun set(c: QueryParam<Byte, *, qUE>, value: Byte): Unit = this.set<Byte>(c, value)
public operator fun set(c: QueryParam<UByte, *, qUE>, value: UByte): Unit = this.set<UByte>(c, value)
public operator fun set(c: QueryParam<Short, *, qUE>, value: Short): Unit = this.set<Short>(c, value)
public operator fun set(c: QueryParam<UShort, *, qUE>, value: UShort): Unit = this.set<UShort>(c, value)
public operator fun set(c: QueryParam<Int, *, qUE>, value: Int): Unit = this.set<Int>(c, value)
public operator fun set(c: QueryParam<UInt, *, qUE>, value: UInt): Unit = this.set<UInt>(c, value)
public operator fun set(c: QueryParam<Long, *, qUE>, value: Long): Unit = this.set<Long>(c, value)
public operator fun set(c: QueryParam<ULong, *, qUE>, value: ULong): Unit = this.set<ULong>(c, value)
public operator fun set(c: QueryParam<Char, *, qUE>, value: Char): Unit = this.set<Char>(c, value)
public operator fun set(c: QueryParam<Boolean, *, qUE>, value: Boolean): Unit = this.set<Boolean>(c, value)
public operator fun set(c: QueryParam<Byte, qUE>, value: Byte): Unit = this.set<Byte>(c, value)
public operator fun set(c: QueryParam<UByte, qUE>, value: UByte): Unit = this.set<UByte>(c, value)
public operator fun set(c: QueryParam<Short, qUE>, value: Short): Unit = this.set<Short>(c, value)
public operator fun set(c: QueryParam<UShort, qUE>, value: UShort): Unit = this.set<UShort>(c, value)
public operator fun set(c: QueryParam<Int, qUE>, value: Int): Unit = this.set<Int>(c, value)
public operator fun set(c: QueryParam<UInt, qUE>, value: UInt): Unit = this.set<UInt>(c, value)
public operator fun set(c: QueryParam<Long, qUE>, value: Long): Unit = this.set<Long>(c, value)
public operator fun set(c: QueryParam<ULong, qUE>, value: ULong): Unit = this.set<ULong>(c, value)
public operator fun set(c: QueryParam<Char, qUE>, value: Char): Unit = this.set<Char>(c, value)
public operator fun set(c: QueryParam<Boolean, qUE>, value: Boolean): Unit = this.set<Boolean>(c, value)
public interface WithRedirect<QueryUserExtension : Any, ParentQueryUserExtension : Any> : InputRow<QueryUserExtension> {
public fun <RT, DT : DatabaseType<RT>> redirect(c: QueryParam<RT, DT, QueryUserExtension>, value: QueryParam<RT, DT, ParentQueryUserExtension>)
public fun <RT> redirect(c: QueryParam<RT, QueryUserExtension>, value: QueryParam<RT, ParentQueryUserExtension>)
}
@Suppress("ClassName")

View File

@ -9,18 +9,18 @@ public interface OutputRow<qUE : Any> {
@get:JvmName("uExt")
public val uExt: qUE
public operator fun <RuntimeType> get(c: Column<RuntimeType, *, qUE>): RuntimeType
public operator fun <RuntimeType> get(c: Column<RuntimeType, qUE, *>): RuntimeType
public operator fun get(c: Column<Byte, *, qUE>): Byte = this.get<Byte>(c)
public operator fun get(c: Column<UByte, *, qUE>): UByte = this.get<UByte>(c)
public operator fun get(c: Column<Short, *, qUE>): Short = this.get<Short>(c)
public operator fun get(c: Column<UShort, *, qUE>): UShort = this.get<UShort>(c)
public operator fun get(c: Column<Int, *, qUE>): Int = this.get<Int>(c)
public operator fun get(c: Column<UInt, *, qUE>): UInt = this.get<UInt>(c)
public operator fun get(c: Column<Long, *, qUE>): Long = this.get<Long>(c)
public operator fun get(c: Column<ULong, *, qUE>): ULong = this.get<ULong>(c)
public operator fun get(c: Column<Char, *, qUE>): Char = this.get<Char>(c)
public operator fun get(c: Column<Boolean, *, qUE>): Boolean = this.get<Boolean>(c)
public operator fun get(c: Column<Byte, qUE, *>): Byte = this.get<Byte>(c)
public operator fun get(c: Column<UByte, qUE, *>): UByte = this.get<UByte>(c)
public operator fun get(c: Column<Short, qUE, *>): Short = this.get<Short>(c)
public operator fun get(c: Column<UShort, qUE, *>): UShort = this.get<UShort>(c)
public operator fun get(c: Column<Int, qUE, *>): Int = this.get<Int>(c)
public operator fun get(c: Column<UInt, qUE, *>): UInt = this.get<UInt>(c)
public operator fun get(c: Column<Long, qUE, *>): Long = this.get<Long>(c)
public operator fun get(c: Column<ULong, qUE, *>): ULong = this.get<ULong>(c)
public operator fun get(c: Column<Char, qUE, *>): Char = this.get<Char>(c)
public operator fun get(c: Column<Boolean, qUE, *>): Boolean = this.get<Boolean>(c)
@Suppress("ClassName")
@LowLevelApi

View File

@ -1,24 +1,24 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.runtime
import ru.landgrafhomyak.db.sql_skeleton_0.api.LowLevelApi
import ru.landgrafhomyak.db.sql_skeleton_0.api.queries._Query
import ru.landgrafhomyak.db.sql_skeleton_0.api.queries._Statement
public interface Transaction {
@Suppress("FunctionName")
@LowLevelApi
public suspend fun <QueryUserExtension : Any> _executeQuery(compiledQuery: _Query.Void2Table<QueryUserExtension>): OutputRow._Iterator<QueryUserExtension, Unit>
public suspend fun <QueryUserExtension : Any> _executeQuery(compiledQuery: _Statement.Void2Table<QueryUserExtension>): OutputRow._Iterator<QueryUserExtension, Unit>
@Suppress("FunctionName")
@LowLevelApi
public suspend fun <QueryUserExtension : Any> _executeQuery(compiledQuery: _Query.Params2Table<QueryUserExtension>): InputRow._Scope<QueryUserExtension, OutputRow._Iterator<QueryUserExtension, Unit>>
public suspend fun <QueryUserExtension : Any> _executeQuery(compiledQuery: _Statement.Params2Table<QueryUserExtension>): InputRow._Scope<QueryUserExtension, OutputRow._Iterator<QueryUserExtension, Unit>>
@Suppress("FunctionName")
@LowLevelApi
public suspend fun <QueryUserExtension : Any> _executeQuery(compiledQuery: _Query.Table2Void<QueryUserExtension>): InputRow._Iterator<QueryUserExtension, Unit>
public suspend fun <QueryUserExtension : Any> _executeQuery(compiledQuery: _Statement.Table2Void<QueryUserExtension>): InputRow._Iterator<QueryUserExtension, Unit>
@Suppress("FunctionName")
@LowLevelApi
public suspend fun <QueryUserExtension : Any> _executeQuery(compiledQuery: _Query.Params2Void<QueryUserExtension>): InputRow._Scope<QueryUserExtension, Unit>
public suspend fun <QueryUserExtension : Any> _executeQuery(compiledQuery: _Statement.Params2Void<QueryUserExtension>): InputRow._Scope<QueryUserExtension, Unit>
public suspend fun rollback()

View File

@ -1,10 +0,0 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.table
import kotlin.jvm.JvmName
import ru.landgrafhomyak.db.sql_skeleton_0.api.misc.RowExpression
public interface CheckConstraint<ttUE : Any> : RowExpression<ttUE, Boolean> {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("getName")
public val name: String
}

View File

@ -1,6 +0,0 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.table
import ru.landgrafhomyak.db.sql_skeleton_0.api.misc.RowExpression
public interface ColumnDefaultValue<ttUE : Any, R> : RowExpression<ttUE, R> {
}

View File

@ -1,24 +0,0 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.table
import kotlin.jvm.JvmName
import ru.landgrafhomyak.db.sql_skeleton_0.api.misc.Column
import ru.landgrafhomyak.db.sql_skeleton_0.api.misc.DatabaseType
public interface ForeignRowReference<ctUE : Any, ttUE : Any, RT, DT : DatabaseType<RT>> : Column<RT, DT, ctUE> {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("fromTable")
public val fromTable: Table<ctUE, *>
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("toTable")
public val toTable: Table<ttUE, *>
public enum class OnDelete {
RESTRICT,
SET_NULL,
CASCADE
}
}

View File

@ -1,18 +0,0 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.table
import kotlin.jvm.JvmName
import ru.landgrafhomyak.db.sql_skeleton_0.api.misc.Column
public interface Index<OwnerTableUserExtension : Any> {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("getName")
public val name: String
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("getTable")
public val table: Table<OwnerTableUserExtension, *>
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("getColumns")
public val columns: List<Column<*, *, OwnerTableUserExtension>>
}

View File

@ -1,4 +0,0 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.table
public interface RowId<@Suppress("unused") OwnerTableUserExtension: Any>

View File

@ -1,27 +1,29 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.table
import kotlin.jvm.JvmName
import ru.landgrafhomyak.db.sql_skeleton_0.api.misc._Selectable
import ru.landgrafhomyak.db.sql_skeleton_0.api.module.Module
public interface Table<out UE : Any, pUE : Any> : _Selectable<UE> {
public interface Table<UE : Any, mUE : Any, RUNTIME_KEY : Any> {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("uExt")
public override val uExt: UE
public val uExt: UE
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("getName")
public val name: String
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("getModule")
public val module: Module<*>
public enum class TemporaryType {
public enum class LifeTime {
DATABASE_SCOPE,
TRANSACTION_SCOPE,
CONNECTION_SCOPE,
MODULE_UPGRADE_SCOPE
}
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("getTemporaryType")
public val temporaryType: TemporaryType?
@get:JvmName("getLifeTime")
public val lifeTime: LifeTime
}

View File

@ -1,56 +1,23 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.table
import kotlin.jvm.JvmName
import ru.landgrafhomyak.db.sql_skeleton_0.api.LowLevelApi
import ru.landgrafhomyak.db.sql_skeleton_0.api.misc.Column
import ru.landgrafhomyak.db.sql_skeleton_0.api.misc.DatabaseType
import ru.landgrafhomyak.db.sql_skeleton_0.api.misc.RowExpression
import ru.landgrafhomyak.db.sql_skeleton_0.api.raw.DialectResolver
import ru.landgrafhomyak.db.sql_skeleton_0.api.runtime.InputRow
public interface TableConstructor<tUE : Any> {
public fun createTable(context: Scope<tUE>): tUE
public interface TableConstructor<tUE : Any, RUNTIME_KEY: Any> {
public fun createTable(context: Scope<tUE, RUNTIME_KEY>): tUE
public interface Scope<tUE : Any, RUNTIME_KEY: Any> {
public fun <RT> column(name: String, type: DialectResolver.Type<RT>, manualCreate: Boolean = false): Column<RT, tUE, RUNTIME_KEY>
public fun <RT, ttUE : Any> columnWithBoundType(name: String, foreign: Column<RT, ttUE, RUNTIME_KEY>): Column<RT, tUE, RUNTIME_KEY>
public interface Scope<tUE : Any> {
public fun tableScopedObject(name: String): TableScopedObject<tUE, RUNTIME_KEY>
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("types")
public val types: DatabaseType.Provider
public fun addAlterStatement(stmt: DialectResolver.Statement_Void2Void<*>)
public fun <RT, DT : DatabaseType<RT>> column(name: String, type: DT): Column<RT, DT, tUE>
public fun index(name: String, vararg columns: Column<*, *, tUE>): Index<tUE>
public fun uniqueIndex(name: String, distinctNulls: Boolean, vararg columns: Column<*, *, tUE>): UniqueIndex<tUE>
public fun checkConstraint(name: String, constructor: RowExpression.Constructor<tUE, *, Boolean>, recheckExistingRows: Boolean = false): CheckConstraint<tUE>
public fun <RT : Any, DT : DatabaseType<RT>> defaultValue(c: Column<RT, DT, tUE>, value: RT): ColumnDefaultValue<tUE, RT>
public fun <RT : Any, DT : DatabaseType<RT>> defaultValue(c: Column<RT, DT, tUE>, creator: RowExpression.Constructor<tUE, *, RT>): ColumnDefaultValue<tUE, RT>
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("rowIdColumn")
public val rowIdColumn: Column<RowId<tUE>, DatabaseType.ROW_ID<tUE>, tUE>
public fun selfRowReference(
columnName: String,
onDelete: ForeignRowReference.OnDelete,
): ForeignRowReference<tUE, tUE, RowId<tUE>, DatabaseType.ROW_ID<tUE>>
public fun <RT, DT : DatabaseType<RT>> selfRowReference(
columnName: String,
type: DT,
onDelete: ForeignRowReference.OnDelete,
): ForeignRowReference<tUE, tUE, RT, DT>
public fun <ttUE : Any> foreignRowReference(
columnName: String,
toTable: Table<ttUE, *>,
onDelete: ForeignRowReference.OnDelete,
): ForeignRowReference<tUE, ttUE, RowId<ttUE>, DatabaseType.ROW_ID<ttUE>>
public fun <ttUE : Any, RT, DT : DatabaseType<RT>> foreignRowReference(
columnName: String,
type: DT,
toTable: Table<ttUE, *>,
onDelete: ForeignRowReference.OnDelete,
): ForeignRowReference<tUE, ttUE, RT, DT>
@LowLevelApi
public fun <sUE : Any> addAlterStatement(stmt: DialectResolver.Statement_Params2Void<sUE>): InputRow._Scope<sUE, Unit>
}
}

View File

@ -0,0 +1,5 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.table
public interface TableScopedObject<tUE : Any, RUNTIME_KEY : Any> {
public val table: Table<tUE, RUNTIME_KEY>
}

View File

@ -1,71 +1,35 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.table
import ru.landgrafhomyak.db.sql_skeleton_0.api.LowLevelApi
import ru.landgrafhomyak.db.sql_skeleton_0.api.misc.Column
import ru.landgrafhomyak.db.sql_skeleton_0.api.misc.DatabaseType
import ru.landgrafhomyak.db.sql_skeleton_0.api.raw.DialectResolver
import ru.landgrafhomyak.db.sql_skeleton_0.api.runtime.InputRow
public interface TableUpgrade<tnUE : Any, toUE : Any> {
public fun upgradeTable(context: Scope<tnUE, toUE>): tnUE
public interface TableUpgrade<tnUE : Any, toUE : Any, RUNTIME_KEY : Any> {
public fun upgradeTable(oldTable: toUE, context: Scope<tnUE, toUE, RUNTIME_KEY>): tnUE
public interface Scope<tnUE : Any, toUE : Any> : TableConstructor.Scope<tnUE> {
public fun <RT, DT : DatabaseType<RT>> keepColumn(c: Column<RT, DT, toUE>): Column<RT, DT, tnUE>
public fun <RT, DT : DatabaseType<RT>> keepColumnUntilUpgraded(c: Column<RT, DT, toUE>): Column<RT, DT, tnUE>
public fun <RT, DT : DatabaseType<RT>> renameAndKeepColumn(c: Column<RT, DT, toUE>, newName: String): Column<RT, DT, tnUE>
public fun deleteColumn(c: Column<*, *, toUE>)
public interface Scope<tnUE : Any, toUE : Any, RUNTIME_KEY : Any> : TableConstructor.Scope<tnUE, RUNTIME_KEY> {
public fun <RT> keepColumn(c: Column<RT, toUE, RUNTIME_KEY>): Column<RT, tnUE, RUNTIME_KEY>
public fun <RT> renameColumn(c: Column<RT, toUE, RUNTIME_KEY>, newName: String): Column<RT, tnUE, RUNTIME_KEY>
public fun removeColumn(c: Column<*, toUE, RUNTIME_KEY>)
public fun <RT> removeColumnAfterUpgrade(c: Column<RT, toUE, RUNTIME_KEY>): Column<RT, tnUE, RUNTIME_KEY>
public fun keepIndex(i: Index<toUE>): Index<tnUE>
public fun renameAndKeepIndex(i: Index<toUE>, newName: String): Index<tnUE>
public fun deleteIndex(i: Index<toUE>)
public fun <RT> keepColumnWithBoundType(c: Column<RT, toUE, RUNTIME_KEY>): Column<RT, tnUE, RUNTIME_KEY>
public fun <RT> unbindAndKeepColumnWithBoundType(c: Column<RT, toUE, RUNTIME_KEY>): Column<RT, tnUE, RUNTIME_KEY>
public fun <RT> renameColumnWithBoundType(c: Column<RT, toUE, RUNTIME_KEY>, newName: String): Column<RT, tnUE, RUNTIME_KEY>
public fun <RT> unbindAndRenameColumnWithBoundType(c: Column<RT, toUE, RUNTIME_KEY>, newName: String): Column<RT, tnUE, RUNTIME_KEY>
public fun removeColumnWithBoundType(c: Column<*, toUE, RUNTIME_KEY>)
public fun <RT> removeColumnWithBoundTypeAfterUpgrade(c: Column<RT, toUE, RUNTIME_KEY>): Column<RT, tnUE, RUNTIME_KEY>
public fun keepCheck(i: CheckConstraint<toUE>): CheckConstraint<tnUE>
public fun renameAndKeepCheck(i: CheckConstraint<toUE>, newName: String): CheckConstraint<tnUE>
public fun deleteCheck(i: CheckConstraint<toUE>)
public fun keepTableScopedObject(obj: TableScopedObject<toUE, RUNTIME_KEY>): TableScopedObject<tnUE, RUNTIME_KEY>
public fun renameTableScopedObject(obj: TableScopedObject<toUE, RUNTIME_KEY>, newName: String): TableScopedObject<tnUE, RUNTIME_KEY>
public fun removeTableScopedObject(obj: TableScopedObject<toUE, RUNTIME_KEY>): TableScopedObject<tnUE, RUNTIME_KEY>
public fun keepUniqueIndex(i: UniqueIndex<toUE>): UniqueIndex<tnUE>
public fun renameAndKeepUniqueIndex(i: UniqueIndex<toUE>, newName: String): UniqueIndex<tnUE>
public fun deleteUniqueIndex(i: UniqueIndex<toUE>)
public fun <RT, DT : DatabaseType<RT>> keepDefaultValue(c: Column<RT, DT, tnUE>, d: ColumnDefaultValue<toUE, RT>): ColumnDefaultValue<tnUE, RT>
public fun <RT, DT : DatabaseType<RT>> changeDefaultValue(c: Column<RT, DT, tnUE>, d: ColumnDefaultValue<toUE, RT>): ColumnDefaultValue<tnUE, RT>
public fun <RT, DT : DatabaseType<RT>> changeDefaultValue(c: Column<RT, DT, tnUE>, d: RT): ColumnDefaultValue<tnUE, RT>
public fun deleteDefaultValue(i: ColumnDefaultValue<toUE, *>)
public fun addAlterStatementAfterUpgrade(stmt: DialectResolver.Statement_Void2Void<*>)
public fun <ttUE : Any, RT, DT : DatabaseType<RT>> keepForeignRowReference(
frr: ForeignRowReference<toUE, ttUE, RT, DT>,
onDelete: ForeignRowReference.OnDelete? = null
): ForeignRowReference<toUE, ttUE, RT, DT>
public fun <ttoUE : Any, oRT, oDT : DatabaseType<oRT>, ttnUE : Any, nRT, nDT : DatabaseType<nRT>> keepForeignRowReferenceToUpdatedTable(
frr: ForeignRowReference<toUE, ttoUE, oRT, oDT>,
updatedType: nDT,
updatedTable: Table<ttnUE, ttoUE>,
onDelete: ForeignRowReference.OnDelete? = null
): ForeignRowReference<tnUE, ttnUE, nRT, nDT>
public fun <ttUE : Any, RT, DT : DatabaseType<RT>> renameAndKeepForeignRowReference(
frr: ForeignRowReference<toUE, ttUE, RT, DT>,
onDelete: ForeignRowReference.OnDelete? = null
): ForeignRowReference<tnUE, ttUE, RT, DT>
public fun <ttoUE : Any, oRT, oDT : DatabaseType<oRT>, ttnUE : Any, nRT, nDT : DatabaseType<nRT>> renameAndKeepForeignRowReferenceToUpdatedTable(
frr: ForeignRowReference<toUE, ttoUE, oRT, oDT>,
updatedType: nDT,
updatedTable: Table<ttnUE, ttoUE>,
onDelete: ForeignRowReference.OnDelete? = null
): ForeignRowReference<tnUE, ttnUE, nRT, nDT>
public fun deleteForeignRowReference(frr: ForeignRowReference<toUE, *, *, *>)
public fun <ttUE : Any, RT, DT : DatabaseType<RT>> keepForeignRowReferenceUntilUpgraded(
frr: ForeignRowReference<toUE, ttUE, RT, DT>,
onDelete: ForeignRowReference.OnDelete? = null
): ForeignRowReference<tnUE, ttUE, RT, DT>
public fun <ttoUE : Any, oRT, oDT : DatabaseType<oRT>, ttnUE : Any, nRT, nDT : DatabaseType<nRT>> keepForeignRowReferenceToUpdatedTableUntilUpgraded(
frr: ForeignRowReference<toUE, ttoUE, oRT, oDT>,
updatedType: nDT,
updatedTable: Table<ttnUE, ttoUE>,
onDelete: ForeignRowReference.OnDelete? = null
): ForeignRowReference<tnUE, ttnUE, nRT, nDT>
@LowLevelApi
public fun <sUE : Any> addAlterStatementAfterUpgrade(stmt: DialectResolver.Statement_Params2Void<sUE>): InputRow._Scope<sUE, Unit>
}
}

View File

@ -1,9 +0,0 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.table
import kotlin.jvm.JvmName
public interface UniqueIndex<OwnerTableUserExtension : Any> : Index<OwnerTableUserExtension> {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("areNullsDistinct")
public val areNullsDistinct: Boolean
}