diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/DatabaseType.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/DatabaseType.kt index c5e7d86..190e1d9 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/DatabaseType.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/DatabaseType.kt @@ -7,7 +7,7 @@ public interface DatabaseType<@Suppress("unused") RUNTIME_TYPE : Any?> { public interface Scope { @Suppress("ERROR_SUPPRESSION", "BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER", "INCONSISTENT_TYPE_PARAMETER_BOUNDS") public fun addImplementation( - key: DriverType, type: DATABASE_TYPE + key: DriverType, type: DATABASE_TYPE ) where DATABASE_TYPE_UNBOUND : DatabaseType<*>, DATABASE_TYPE : DatabaseType, DATABASE_TYPE : DATABASE_TYPE_UNBOUND diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/DriverType.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/DriverType.kt index 5a27647..36dad2d 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/DriverType.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/DriverType.kt @@ -11,6 +11,7 @@ public interface DriverType< STATEMENT_CONSTRUCTOR__PARAMS_2_VOID : RawStatement.Params2Void.Constructor<*>, STATEMENT_CONSTRUCTOR__PARAMS_2_ROW : RawStatement.Params2Row.Constructor<*>, STATEMENT_CONSTRUCTOR__PARAMS_2_ROW_OR_NULL : RawStatement.Params2RowOrNull.Constructor<*>, - STATEMENT_CONSTRUCTOR__PARAMS_2_TABLE : RawStatement.Params2Table.Constructor<*> - > { + STATEMENT_CONSTRUCTOR__PARAMS_2_TABLE : RawStatement.Params2Table.Constructor<*>, + OBJECT_OPERATIONS : ObjectOperations<*> +> { } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/ObjectOperations.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/ObjectOperations.kt new file mode 100644 index 0000000..08472b4 --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/ObjectOperations.kt @@ -0,0 +1,16 @@ +package ru.landgrafhomyak.db.skeleton1.api + +public interface ObjectOperations<@Suppress("unused") UE : Any?> { + public fun interface ImplementationsProvider { + public fun provideStatementImplementations_databaseType(scope: Scope) + + public interface Scope { + @Suppress("ERROR_SUPPRESSION", "BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER", "INCONSISTENT_TYPE_PARAMETER_BOUNDS") + public fun addImplementation( + key: DriverType<*, *, *, *, *, *, *, *, *, OPERATIONS_UNBOUND>, type: OPERATIONS + ) where OPERATIONS_UNBOUND : ObjectOperations<*>, + OPERATIONS : ObjectOperations, + OPERATIONS : OPERATIONS_UNBOUND + } + } +} \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/errors/definition/EntityNotImplementedException.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/errors/definition/EntityNotImplementedException.kt index 40a1967..0e6284e 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/errors/definition/EntityNotImplementedException.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/errors/definition/EntityNotImplementedException.kt @@ -11,30 +11,30 @@ import ru.landgrafhomyak.db.skeleton1.api.errors.SchemaDefinitionException @OptIn(ExperimentalCoroutinesApi::class) public class EntityNotImplementedException : SchemaDefinitionException, CopyableThrowable { public val provider: Any - public val driver: DriverType<*, *, *, *, *, *, *, *, *> + public val driver: DriverType<*, *, *, *, *, *, *, *, *, *> - public constructor(provider: Any, driver: DriverType<*, *, *, *, *, *, *, *, *>) : super(formatMessage(provider, driver)) { + public constructor(provider: Any, driver: DriverType<*, *, *, *, *, *, *, *, *, *>) : super(formatMessage(provider, driver)) { this.provider = provider this.driver = driver } - public constructor(provider: Any, driver: DriverType<*, *, *, *, *, *, *, *, *>, customMessage: String) : super(customMessage) { + public constructor(provider: Any, driver: DriverType<*, *, *, *, *, *, *, *, *, *>, customMessage: String) : super(customMessage) { this.provider = provider this.driver = driver } - public constructor(provider: Any, driver: DriverType<*, *, *, *, *, *, *, *, *>, customMessage: String, cause: Throwable) : super(customMessage, cause) { + public constructor(provider: Any, driver: DriverType<*, *, *, *, *, *, *, *, *, *>, customMessage: String, cause: Throwable) : super(customMessage, cause) { this.provider = provider this.driver = driver } - public constructor(provider: Any, driver: DriverType<*, *, *, *, *, *, *, *, *>, cause: Throwable) : super(formatMessage(provider, driver), cause) { + public constructor(provider: Any, driver: DriverType<*, *, *, *, *, *, *, *, *, *>, cause: Throwable) : super(formatMessage(provider, driver), cause) { this.provider = provider this.driver = driver } public constructor( - provider: Any, driver: DriverType<*, *, *, *, *, *, *, *, *>, + provider: Any, driver: DriverType<*, *, *, *, *, *, *, *, *, *>, message: String?, cause: Throwable?, @Suppress("unused", "LocalVariableName") _marker: Unit ) : super(message, cause, _marker) { @@ -55,7 +55,7 @@ public class EntityNotImplementedException : SchemaDefinitionException, Copyable public companion object { @JvmStatic public fun formatMessage( - provider: Any, driver: DriverType<*, *, *, *, *, *, *, *, *> + provider: Any, driver: DriverType<*, *, *, *, *, *, *, *, *, *> ): String = "$provider doesn't provides implementation for driver $driver" } } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/CreateModuleScope.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/CreateModuleScope.kt index 52aab05..dba7b73 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/CreateModuleScope.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/CreateModuleScope.kt @@ -2,6 +2,7 @@ package ru.landgrafhomyak.db.skeleton1.api.module import kotlin.jvm.JvmName import ru.landgrafhomyak.db.skeleton1.api.LowLevelApi +import ru.landgrafhomyak.db.skeleton1.api.ObjectOperations import ru.landgrafhomyak.db.skeleton1.api.statement.RawStatement import ru.landgrafhomyak.db.skeleton1.api.statement._Statement import ru.landgrafhomyak.db.skeleton1.api.table.Table @@ -19,7 +20,7 @@ public interface CreateModuleScope { name: String, initializer: Table.Constructor ): Table - public fun moduleScopedObject(namespace: Namespace = this.rootNs, name: String): ModuleScopedObject + public fun moduleScopedObject(namespace: Namespace = this.rootNs, name: String, metadata: ObjectOperations.ImplementationsProvider): ModuleScopedObject public fun substituteModule(rootNs: Namespace, template: Module.Template): Module diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/ModuleScopedObject.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/ModuleScopedObject.kt index bef0678..8314cfd 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/ModuleScopedObject.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/ModuleScopedObject.kt @@ -2,7 +2,8 @@ package ru.landgrafhomyak.db.skeleton1.api.module import ru.landgrafhomyak.db.skeleton1.api.DebugApi -public interface ModuleScopedObject { +public interface ModuleScopedObject { + public val uExt: oUE @DebugApi public val name: String diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/statement/RawStatement.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/statement/RawStatement.kt index 48b8caf..c7954cd 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/statement/RawStatement.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/statement/RawStatement.kt @@ -16,7 +16,7 @@ public interface RawStatement : _Statement { @Suppress("ERROR_SUPPRESSION", "BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER", "INCONSISTENT_TYPE_PARAMETER_BOUNDS") public fun addImplementation( - driverType: DriverType<*, STATEMENT_CONSTRUCTOR_UNBOUND, *, *, *, *, *, *, *>, + driverType: DriverType<*, STATEMENT_CONSTRUCTOR_UNBOUND, *, *, *, *, *, *, *, *>, constructor: STATEMENT_CONSTRUCTOR ) where STATEMENT_CONSTRUCTOR_UNBOUND : Constructor<*>, STATEMENT_CONSTRUCTOR : Constructor, @@ -36,7 +36,7 @@ public interface RawStatement : _Statement { @Suppress("ERROR_SUPPRESSION", "BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER", "INCONSISTENT_TYPE_PARAMETER_BOUNDS") public fun addImplementation( - driverType: DriverType<*, *, STATEMENT_CONSTRUCTOR_UNBOUND, *, *, *, *, *, *>, + driverType: DriverType<*, *, STATEMENT_CONSTRUCTOR_UNBOUND, *, *, *, *, *, *, *>, constructor: STATEMENT_CONSTRUCTOR ) where STATEMENT_CONSTRUCTOR_UNBOUND : Constructor<*>, STATEMENT_CONSTRUCTOR : Constructor, @@ -56,7 +56,7 @@ public interface RawStatement : _Statement { @Suppress("ERROR_SUPPRESSION", "BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER", "INCONSISTENT_TYPE_PARAMETER_BOUNDS") public fun addImplementation( - driverType: DriverType<*, *, *, STATEMENT_CONSTRUCTOR_UNBOUND, *, *, *, *, *>, + driverType: DriverType<*, *, *, STATEMENT_CONSTRUCTOR_UNBOUND, *, *, *, *, *, *>, constructor: STATEMENT_CONSTRUCTOR ) where STATEMENT_CONSTRUCTOR_UNBOUND : Constructor<*>, STATEMENT_CONSTRUCTOR : Constructor, @@ -77,7 +77,7 @@ public interface RawStatement : _Statement { @Suppress("ERROR_SUPPRESSION", "BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER", "INCONSISTENT_TYPE_PARAMETER_BOUNDS") public fun addImplementation( - driverType: DriverType<*, *, *, *, STATEMENT_CONSTRUCTOR_UNBOUND, *, *, *, *>, + driverType: DriverType<*, *, *, *, STATEMENT_CONSTRUCTOR_UNBOUND, *, *, *, *, *>, constructor: STATEMENT_CONSTRUCTOR ) where STATEMENT_CONSTRUCTOR_UNBOUND : Constructor<*>, STATEMENT_CONSTRUCTOR : Constructor, @@ -97,7 +97,7 @@ public interface RawStatement : _Statement { @Suppress("ERROR_SUPPRESSION", "BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER", "INCONSISTENT_TYPE_PARAMETER_BOUNDS") public fun addImplementation( - driverType: DriverType<*, *, *, *, *, STATEMENT_CONSTRUCTOR_UNBOUND, *, *, *>, + driverType: DriverType<*, *, *, *, *, STATEMENT_CONSTRUCTOR_UNBOUND, *, *, *, *>, constructor: STATEMENT_CONSTRUCTOR ) where STATEMENT_CONSTRUCTOR_UNBOUND : Constructor<*>, STATEMENT_CONSTRUCTOR : Constructor, @@ -117,7 +117,7 @@ public interface RawStatement : _Statement { @Suppress("ERROR_SUPPRESSION", "BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER", "INCONSISTENT_TYPE_PARAMETER_BOUNDS") public fun addImplementation( - driverType: DriverType<*, *, *, *, *, *, STATEMENT_CONSTRUCTOR_UNBOUND, *, *>, + driverType: DriverType<*, *, *, *, *, *, STATEMENT_CONSTRUCTOR_UNBOUND, *, *, *>, constructor: STATEMENT_CONSTRUCTOR ) where STATEMENT_CONSTRUCTOR_UNBOUND : Constructor<*>, STATEMENT_CONSTRUCTOR : Constructor, @@ -137,7 +137,7 @@ public interface RawStatement : _Statement { @Suppress("ERROR_SUPPRESSION", "BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER", "INCONSISTENT_TYPE_PARAMETER_BOUNDS") public fun addImplementation( - driverType: DriverType<*, *, *, *, *, *, *, STATEMENT_CONSTRUCTOR_UNBOUND, *>, + driverType: DriverType<*, *, *, *, *, *, *, STATEMENT_CONSTRUCTOR_UNBOUND, *, *>, constructor: STATEMENT_CONSTRUCTOR ) where STATEMENT_CONSTRUCTOR_UNBOUND : Constructor<*>, STATEMENT_CONSTRUCTOR : Constructor, @@ -157,7 +157,7 @@ public interface RawStatement : _Statement { @Suppress("ERROR_SUPPRESSION", "BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER", "INCONSISTENT_TYPE_PARAMETER_BOUNDS") public fun addImplementation( - driverType: DriverType<*, *, *, *, *, *, *, *, STATEMENT_CONSTRUCTOR_UNBOUND>, + driverType: DriverType<*, *, *, *, *, *, *, *, STATEMENT_CONSTRUCTOR_UNBOUND, *>, constructor: STATEMENT_CONSTRUCTOR ) where STATEMENT_CONSTRUCTOR_UNBOUND : Constructor<*>, STATEMENT_CONSTRUCTOR : Constructor, diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/TableConstructorScope.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/TableConstructorScope.kt index a5c9bdf..02e4c45 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/TableConstructorScope.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/TableConstructorScope.kt @@ -2,6 +2,7 @@ package ru.landgrafhomyak.db.skeleton1.api.table import ru.landgrafhomyak.db.skeleton1.api.LowLevelApi import ru.landgrafhomyak.db.skeleton1.api.DatabaseType +import ru.landgrafhomyak.db.skeleton1.api.ObjectOperations import ru.landgrafhomyak.db.skeleton1.api.statement.RawStatement import ru.landgrafhomyak.db.skeleton1.api.statement._Statement import ru.landgrafhomyak.db.skeleton1.api.runtime.InputRow @@ -11,7 +12,7 @@ public interface TableConstructorScope { public fun column(name: String, type: DatabaseType.ImplementationsProvider, manualCreate: Boolean = false): Column public fun columnWithBoundType(name: String, foreign: Column): Column - public fun tableScopedObject(name: String): TableScopedObject + public fun tableScopedObject(name: String, metadata: ObjectOperations.ImplementationsProvider): TableScopedObject public fun addAlterStatement(stmt: _Statement.Void2Void<*, RK>) public fun addAlterStatement(stmt: RawStatement.Void2Void.ImplementationsProvider<*>) diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/TableScopedObject.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/TableScopedObject.kt index a4463a1..c2c5863 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/TableScopedObject.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/TableScopedObject.kt @@ -2,7 +2,9 @@ package ru.landgrafhomyak.db.skeleton1.api.table import ru.landgrafhomyak.db.skeleton1.api.DebugApi -public interface TableScopedObject { +public interface TableScopedObject { + public val uExt: oUE + @DebugApi public val name: String diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/TableUpgradeScope.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/TableUpgradeScope.kt index 57c5d9f..0353924 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/TableUpgradeScope.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/TableUpgradeScope.kt @@ -1,6 +1,7 @@ package ru.landgrafhomyak.db.skeleton1.api.table import ru.landgrafhomyak.db.skeleton1.api.LowLevelApi +import ru.landgrafhomyak.db.skeleton1.api.ObjectOperations import ru.landgrafhomyak.db.skeleton1.api.statement.RawStatement import ru.landgrafhomyak.db.skeleton1.api.statement._Statement import ru.landgrafhomyak.db.skeleton1.api.runtime.InputRow @@ -18,9 +19,9 @@ public interface TableUpgradeScope : TableCons public fun removeColumnWithBoundType(c: Column<*, toUE, RK>) public fun removeColumnWithBoundTypeAfterUpgrade(c: Column): Column - public fun keepTableScopedObject(obj: TableScopedObject): TableScopedObject - public fun renameTableScopedObject(obj: TableScopedObject, newName: String): TableScopedObject - public fun removeTableScopedObject(obj: TableScopedObject): TableScopedObject + public fun keepTableScopedObject(obj: TableScopedObject): TableScopedObject + public fun renameTableScopedObject(obj: TableScopedObject, newName: String): TableScopedObject + public fun removeTableScopedObject(obj: TableScopedObject): TableScopedObject public fun addAlterStatementAfterUpgrade(stmt: _Statement.Void2Void<*, RK>)