From 332c2d75f2742a5033a87fc57f5fc3407f804cfb Mon Sep 17 00:00:00 2001 From: Andrew Golovashevich Date: Fri, 31 Jan 2025 06:24:00 +0300 Subject: [PATCH] [history/serdha] Reorganizing packaes --- .../api/v0/ddl/module/CreateModuleScope.kt | 347 ------------------ .../serdha/api/v0/ddl/table/Index.kt | 7 - .../ddl/table => serdha0/api/misc}/Column.kt | 7 +- .../serdha0/api/module/CreateModuleScope.kt | 102 +++++ .../v0/ddl => serdha0/api}/module/Module.kt | 6 +- .../api}/module/ModuleTemplate.kt | 4 +- .../ddl => serdha0/api}/module/Namespace.kt | 2 +- .../api}/table/CreateTableScope.kt | 16 +- .../landgrafhomyak/serdha0/api/table/Index.kt | 10 + .../api/v0/ddl => serdha0/api}/table/Table.kt | 8 +- .../ddl => serdha0/api}/table/UniqueIndex.kt | 2 +- 11 files changed, 134 insertions(+), 377 deletions(-) delete mode 100644 src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/module/CreateModuleScope.kt delete mode 100644 src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/Index.kt rename src/commonMain/kotlin/ru/landgrafhomyak/{serdha/api/v0/ddl/table => serdha0/api/misc}/Column.kt (54%) create mode 100644 src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/module/CreateModuleScope.kt rename src/commonMain/kotlin/ru/landgrafhomyak/{serdha/api/v0/ddl => serdha0/api}/module/Module.kt (56%) rename src/commonMain/kotlin/ru/landgrafhomyak/{serdha/api/v0/ddl => serdha0/api}/module/ModuleTemplate.kt (92%) rename src/commonMain/kotlin/ru/landgrafhomyak/{serdha/api/v0/ddl => serdha0/api}/module/Namespace.kt (77%) rename src/commonMain/kotlin/ru/landgrafhomyak/{serdha/api/v0/ddl => serdha0/api}/table/CreateTableScope.kt (65%) create mode 100644 src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/table/Index.kt rename src/commonMain/kotlin/ru/landgrafhomyak/{serdha/api/v0/ddl => serdha0/api}/table/Table.kt (58%) rename src/commonMain/kotlin/ru/landgrafhomyak/{serdha/api/v0/ddl => serdha0/api}/table/UniqueIndex.kt (72%) diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/module/CreateModuleScope.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/module/CreateModuleScope.kt deleted file mode 100644 index c3b578c..0000000 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/module/CreateModuleScope.kt +++ /dev/null @@ -1,347 +0,0 @@ -package ru.landgrafhomyak.serdha.api.v0.ddl.module - -import ru.landgrafhomyak.serdha.api.v0.ddl.table.Table -import ru.landgrafhomyak.serdha.api.v0.dml.CopyQuery -import ru.landgrafhomyak.serdha.api.v0.dml.CreateCopyQueryScope -import ru.landgrafhomyak.serdha.api.v0.dml.CreateInsertQueryScope -import ru.landgrafhomyak.serdha.api.v0.dml.DeleteQuery -import ru.landgrafhomyak.serdha.api.v0.dml.InsertQuery -import ru.landgrafhomyak.serdha.api.v0.dml.SelectQuery -import ru.landgrafhomyak.serdha.api.v0.dml.UpdateQuery -import ru.landgrafhomyak.serdha.api.v0.runtime.SynchronizedDatabase -import ru.landgrafhomyak.serdha.api.v0.runtime.Transaction - -/** - * Scope methods for creating new [module template][ModuleTemplate]. - * - * @see ModuleTemplate.CreateModuleTemplatesScope.createTemplate - * @see ModuleTemplate.ModuleCreator.createSchema - */ -public interface CreateModuleScope { - /** - * Functional interface for creating table. - * - * Can be implemented like a companion object that just calls [TableUserExtension]'s constructor with the same or similar signature. - * - * @param TableUserExtension User's type for containing table-related descriptors. - * - * @see CreateModuleScope.createTable - * @see CreateModuleScope.createSessionScopeTemporaryTable - * @see CreateModuleScope.createTransactionScopeTemporaryTable - * @see UpgradeModuleScope.TableUpgrade - */ - public interface TableCreator { - /** - * Scope method that uses [creator] to initialize table schema. - * - * @param creator Object with descriptor providers and factories. - * @return User's object with descriptors for future access. - * - * @see CreateModuleScope.createTable - * @see CreateModuleScope.createSessionScopeTemporaryTable - * @see CreateModuleScope.createTransactionScopeTemporaryTable - * @see UpgradeModuleScope.TableUpgrade - */ - public fun createTable(creator: ru.landgrafhomyak.serdha.api.v0.ddl.table.CreateTableScope): TableUserExtension - } - - /** - * Creates table in [specified namespace][namespace] with [specified name][name] and stores it in the database. - * If table was created by previous synchronizations, asserts that table at the specified path in the database is same as table provided by [initializer]. - * - * On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] this table must be [kept][UpgradeModuleScope.upgradeTable] (or [renamed][CreateModuleScope.renameTable]) or [deleted][CreateModuleScope.deleteTable]. - * - * @param TableUserExtension User's type for containing table-related descriptors. - * @param namespace Way to group tables if there is a lot. - * @param name Name of table for debugging. - * @param initializer Table-related descriptors initializer. - * @return Table descriptor. - */ - public fun createTable(namespace: Namespace, name: String, initializer: TableCreator): Table - - /** - * Creates a temporary table that exits only until connection to the database not [closed][SynchronizedDatabase._close]. - * - * On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] must be recreated if needed. - * - * @param TableUserExtension User's type for containing table-related descriptors. - * @param namespace Way to group tables if there is a lot. - * @param name Name of table for debugging. - * @param initializer Table-related descriptors initializer. - * @return Table descriptor. - */ - public fun createSessionScopeTemporaryTable(namespace: Namespace, name: String, initializer: TableCreator): Table - - /** - * Creates a temporary table that exits only inside [transaction][Transaction] and auto-deleted (or cleared, depends on driver implementation) when it [finished][Transaction._assertTransactionFinishedAndReleaseResources]. - * - * On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] must be recreated if needed. - * - * @param TableUserExtension User's type for containing table-related descriptors. - * @param namespace Way to group tables if there is a lot. - * @param name Name of table for debugging. - * @param initializer Table-related descriptors initializer. - * @return Table descriptor. - */ - public fun createTransactionScopeTemporaryTable(namespace: Namespace, name: String, initializer: TableCreator): Table - - /** - * Functional interface for creating 'SELECT' query. - * - * Can be implemented like a companion object that just calls [QueryUserWrapper]'s constructor with the same or similar signature. - * - * @param QueryUserWrapper User's type with descriptors related to query. - * - * @see CreateModuleScope.createSelectQuery - */ - public interface SelectQueryCreator { - /** - * Scope method that uses [creator] to create a query. - * - * @param creator Object with descriptor providers and factories. - * @return User's object with query-related descriptors for future access. - * - * @see CreateModuleScope.createSelectQuery - */ - public fun createSelect(creator: ru.landgrafhomyak.serdha.api.v0.dml.CreateSelectQueryScope): QueryUserWrapper - } - - /** - * Creates 'SELECT' query. - * - * On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] must be recreated if needed. - * - * @param QueryUserWrapper User's type for containing query-related descriptors. - * @param initializer Query-related descriptors initializer. - * @return Query descriptor. - * - * @see CreateModuleScope.createTemporarySelectQuery - */ - public fun createSelectQuery(initializer: SelectQueryCreator): SelectQuery - - /** - * Creates 'SELECT' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpgrade]. - * Using this function instead of [CreateModuleScope.createSelectQuery] may help the driver to optimize caches and runtime indexes. - * - * On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] must be recreated if needed. - * - * @param QueryUserWrapper User's type for containing query-related descriptors. - * @param initializer Query-related descriptors initializer. - * @return Query descriptor. - * - * @see CreateModuleScope.createSelectQuery - */ - public fun createTemporarySelectQuery(initializer: SelectQueryCreator): SelectQuery - - /** - * Functional interface for creating 'INSERT ... VALUES' query. - * - * Can be implemented like a companion object that just calls [QueryUserWrapper]'s constructor with the same or similar signature. - * - * @param TableUserExtension User's type with descriptors related to table to which values will be inserted. - * @param QueryUserWrapper User's type with descriptors related to query. - * - * @see CreateModuleScope.createInsertQuery - */ - public interface InsertQueryCreator { - /** - * Scope method that uses [creator] to create a query. - * - * @param table Descriptor of table to which values will be inserted. - * @param creator Object with descriptor providers and factories. - * @return User's object with query-related descriptors for future access. - * - * @see CreateModuleScope.createInsertQuery - */ - public fun createInsert(table: Table, creator: CreateInsertQueryScope): QueryUserWrapper - } - - /** - * Creates 'INSERT ... VALUES' query. - * - * On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] must be recreated if needed. - * - * @param TableUserExtension User's type with descriptors related to table to which values will be inserted. - * @param QueryUserWrapper User's type for containing query-related descriptors. - * @param initializer Query-related descriptors initializer. - * @return Query descriptor. - * - * @see CreateModuleScope.createTemporaryInsertQuery - */ - public fun createInsertQuery(table: Table, initializer: InsertQueryCreator): InsertQuery - - /** - * Creates 'INSERT ... VALUES' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpgrade]. - * Using this function instead of [CreateModuleScope.createInsertQuery] may help the driver to optimize caches and runtime indexes. - * - * On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] must be recreated if needed. - * - * @param TableUserExtension User's type with descriptors related to table to which values will be inserted. - * @param QueryUserWrapper User's type for containing query-related descriptors. - * @param initializer Query-related descriptors initializer. - * @return Query descriptor. - * - * @see CreateModuleScope.createInsertQuery - */ - public fun createTemporaryInsertQuery(table: Table, initializer: InsertQueryCreator): InsertQuery - - /** - * Functional interface for creating 'INSERT ... FROM' query. - * - * Can be implemented like a companion object that just calls [QueryUserWrapper]'s constructor with the same or similar signature. - * - * @param TableUserExtension User's type with descriptors related to table to which values will be inserted. - * @param QueryUserWrapper User's type with descriptors related to query. - * - * @see CreateModuleScope.createCopyQuery - */ - public interface CopyQueryCreator { - /** - * Scope method that uses [creator] to create a query. - * - * @param table Descriptor of table to which values will be inserted. - * @param creator Object with descriptor providers and factories. - * @return User's object with query-related descriptors for future access. - * - * @see CreateModuleScope.createCopyQuery - */ - public fun createCopy(table: Table, creator: CreateCopyQueryScope): QueryUserWrapper - } - - /** - * Creates 'INSERT ... FROM' query. - * - * On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] must be recreated if needed. - * - * @param TableUserExtension User's type with descriptors related to table to which values will be inserted. - * @param initializer Query-related descriptors initializer. - * @return Query descriptor. - * - * @see CreateModuleScope.createTemporaryCopyQuery - */ - public fun createCopyQuery(table: Table, initializer: CopyQueryCreator): CopyQuery - - /** - * Creates 'INSERT ... FROM' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpgrade]. - * Using this function instead of [CreateModuleScope.createCopyQuery] may help the driver to optimize caches and runtime indexes. - * - * On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] must be recreated if needed. - * - * @param TableUserExtension User's type with descriptors related to table to which values will be inserted. - * @param initializer Query-related descriptors initializer. - * @return Query descriptor. - * - * @see CreateModuleScope.createCopyQuery - */ - public fun createTemporaryCopyQuery(table: Table, initializer: CopyQueryCreator): CopyQuery - - /** - * Functional interface for creating 'UPDATE' query. - * - * Can be implemented like a companion object that just calls [QueryUserWrapper]'s constructor with the same or similar signature. - * - * @param TableUserExtension User's type with descriptors related to table, whose rows will be updated. - * @param QueryUserWrapper User's type with descriptors related to query. - * - * @see CreateModuleScope.createUpdateQuery - */ - public interface UpdateQueryCreator { - /** - * Scope method that uses [creator] to create a query. - * - * @param table Descriptor of table which rows will be updated. - * @param creator Object with descriptor providers and factories. - * @return User's object with query-related descriptors for future access. - * - * @see CreateModuleScope.createUpdateQuery - */ - public fun createUpdate(table: Table, creator: ru.landgrafhomyak.serdha.api.v0.dml.CreateUpdateQueryScope): QueryUserWrapper - } - - /** - * Creates 'UPDATE' query. - * - * On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] must be recreated if needed. - * - * @param TableUserExtension User's type with descriptors related to table to which values will be inserted. - * @param initializer Query-related descriptors initializer. - * @return Query descriptor. - * - * @see CreateModuleScope.createTemporaryUpdateQuery - */ - public fun createUpdateQuery(table: Table, initializer: UpdateQueryCreator): UpdateQuery - - /** - * Creates 'UPDATE' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpgrade]. - * Using this function instead of [CreateModuleScope.createUpdateQuery] may help the driver to optimize caches and runtime indexes. - * - * On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] must be recreated if needed. - * - * @param TableUserExtension User's type with descriptors related to table to which values will be inserted. - * @param initializer Query-related descriptors initializer. - * @return Query descriptor. - * - * @see CreateModuleScope.createUpdateQuery - */ - public fun createTemporaryUpdateQuery(table: Table, initializer: UpdateQueryCreator): UpdateQuery - - /** - * Functional interface for creating 'DELETE' query. - * - * Can be implemented like a companion object that just calls [QueryUserWrapper]'s constructor with the same or similar signature. - * - * @param TableUserExtension User's type with descriptors related to table from which data will be deleted. - * @param QueryUserWrapper User's type with descriptors related to query. - * - * @see CreateModuleScope.createDeleteQuery - */ - public interface DeleteQueryCreator { - /** - * Scope method that uses [creator] to create a query. - * - * @param table Descriptor of table from which data will be deleted. - * @param creator Object with descriptor providers and factories. - * @return User's object with query-related descriptors for future access. - * - * @see CreateModuleScope.createDeleteQuery - */ - public fun createDelete(table: Table, creator: ru.landgrafhomyak.serdha.api.v0.dml.CreateDeleteQueryScope): QueryUserWrapper - } - - /** - * Creates 'DELETE' query. - * - * On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] must be recreated if needed. - * - * @param TableUserExtension User's type with descriptors related to table from which data will be deleted. - * @param initializer Query-related descriptors initializer. - * @return Query descriptor. - * - * @see CreateModuleScope.createTemporaryDeleteQuery - */ - public fun createDeleteQuery(table: Table, initializer: DeleteQueryCreator): DeleteQuery - - /** - * Creates 'DELETE' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpgrade]. - * Using this function instead of [CreateModuleScope.createDeleteQuery] may help the driver to optimize caches and runtime indexes. - * - * On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] must be recreated if needed. - * - * @param TableUserExtension User's type with descriptors related to table from which data will be deleted. - * @param initializer Query-related descriptors initializer. - * @return Query descriptor. - * - * @see CreateModuleScope.createDeleteQuery - */ - public fun createTemporaryDeleteQuery(table: Table, initializer: DeleteQueryCreator): DeleteQuery - - /** - * Replaces [specified namespace][rootNs] with schema provided by [template]. - * [This namespace][rootNs] will be root namespace for module and shouldn't contain any other definitions. - * - * @param rootNs Namespace where the new module will be located. - * @param template Schema template. - * @return Module descriptor. - */ - public fun substituteModule(rootNs: Namespace, template: ModuleTemplate): Module -} \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/Index.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/Index.kt deleted file mode 100644 index 8e9d2d3..0000000 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/Index.kt +++ /dev/null @@ -1,7 +0,0 @@ -package ru.landgrafhomyak.serdha.api.v0.ddl.table - -public interface Index { - public val name: String - public val table: Table - public val columns: List> -} \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/Column.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/misc/Column.kt similarity index 54% rename from src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/Column.kt rename to src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/misc/Column.kt index 049271a..d05bbdf 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/Column.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/misc/Column.kt @@ -1,13 +1,10 @@ -package ru.landgrafhomyak.serdha.api.v0.ddl.table +package ru.landgrafhomyak.db.serdha0.api.misc import kotlin.jvm.JvmName -import ru.landgrafhomyak.serdha.api.v0.ddl.types.DatabaseType -import ru.landgrafhomyak.serdha.api.v0.dml.SelectedTable +import ru.landgrafhomyak.db.serdha0.api.table.Table public interface Column, TableUserExtension : Any> { public val name: String - public val type: DT - public val table: Table } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/module/CreateModuleScope.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/module/CreateModuleScope.kt new file mode 100644 index 0000000..6c67991 --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/module/CreateModuleScope.kt @@ -0,0 +1,102 @@ +package ru.landgrafhomyak.db.serdha0.api.module + +import ru.landgrafhomyak.db.serdha0.api.table.Table +import ru.landgrafhomyak.db.serdha0.api.queries.QueryCreator +import ru.landgrafhomyak.db.serdha0.api.runtime.SynchronizedDatabase +import ru.landgrafhomyak.db.serdha0.api.runtime.Transaction +import ru.landgrafhomyak.db.serdha0.api.table.CreateTableScope + +/** + * Scope methods for creating new [module template][ModuleTemplate]. + * + * @see ModuleTemplate.CreateModuleTemplatesScope.createTemplate + * @see ModuleTemplate.ModuleCreator.createSchema + */ +public interface CreateModuleScope { + /** + * Functional interface for creating table. + * + * Can be implemented like a companion object that just calls [TableUserExtension]'s constructor with the same or similar signature. + * + * @param TableUserExtension User's type for containing table-related descriptors. + * + * @see CreateModuleScope.createTable + * @see CreateModuleScope.createSessionScopeTemporaryTable + * @see CreateModuleScope.createTransactionScopeTemporaryTable + * @see UpgradeModuleScope.TableUpgrade + */ + public interface TableCreator { + /** + * Scope method that uses [creator] to initialize table schema. + * + * @param creator Object with descriptor providers and factories. + * @return User's object with descriptors for future access. + * + * @see CreateModuleScope.createTable + * @see CreateModuleScope.createSessionScopeTemporaryTable + * @see CreateModuleScope.createTransactionScopeTemporaryTable + * @see UpgradeModuleScope.TableUpgrade + */ + public fun createTable(creator: CreateTableScope): TableUserExtension + } + + /** + * Creates table in [specified namespace][namespace] with [specified name][name] and stores it in the database. + * If table was created by previous synchronizations, asserts that table at the specified path in the database is same as table provided by [initializer]. + * + * On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] this table must be [kept][UpgradeModuleScope.upgradeTable] (or [renamed][UpgradeModuleScope.renameTable]) or [deleted][UpgradeModuleScope.deleteTable]. + * + * @param TableUserExtension User's type for containing table-related descriptors. + * @param namespace Way to group tables if there is a lot. + * @param name Name of table for debugging. + * @param initializer Table-related descriptors initializer. + * @return Table descriptor. + */ + public fun createTable(namespace: Namespace, name: String, initializer: TableCreator): Table + + /** + * Creates a temporary table that exits only until connection to the database not [closed][SynchronizedDatabase._close]. + * + * On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] must be recreated if needed. + * + * @param TableUserExtension User's type for containing table-related descriptors. + * @param namespace Way to group tables if there is a lot. + * @param name Name of table for debugging. + * @param initializer Table-related descriptors initializer. + * @return Table descriptor. + */ + public fun createSessionScopeTemporaryTable(namespace: Namespace, name: String, initializer: TableCreator): Table + + /** + * Creates a temporary table that exits only inside [transaction][Transaction] and auto-deleted (or cleared, depends on driver implementation) when it [finished][Transaction._assertTransactionFinishedAndReleaseResources]. + * + * On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] must be recreated if needed. + * + * @param TableUserExtension User's type for containing table-related descriptors. + * @param namespace Way to group tables if there is a lot. + * @param name Name of table for debugging. + * @param initializer Table-related descriptors initializer. + * @return Table descriptor. + */ + public fun createTransactionScopeTemporaryTable(namespace: Namespace, name: String, initializer: TableCreator): Table + + public val queries: QueryCreator.Scope + + public val temporarySubqueries: QueryCreator.Scope + + public val moduleConfiguringTemporaryQueries: QueryCreator.Scope + + public fun createQuery(creator: QueryCreator): qUE + + public fun createModuleConfiguringTemporaryQuery(creator: QueryCreator): qUE + + /** + * Replaces [specified namespace][rootNs] with schema provided by [template]. + * [This namespace][rootNs] will be root namespace for module and shouldn't contain any other definitions. + * + * @param rootNs Namespace where the new module will be located. + * @param template Schema template. + * @return Module descriptor. + */ + public fun substituteModule(rootNs: Namespace, template: ModuleTemplate): Module +} \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/module/Module.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/module/Module.kt similarity index 56% rename from src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/module/Module.kt rename to src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/module/Module.kt index bdb66d1..2bfd17c 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/module/Module.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/module/Module.kt @@ -1,8 +1,10 @@ -package ru.landgrafhomyak.serdha.api.v0.ddl.module +package ru.landgrafhomyak.db.serdha0.api.module -import ru.landgrafhomyak.serdha.api.v0.runtime.SynchronizedDatabase +import kotlin.jvm.JvmName +import ru.landgrafhomyak.db.serdha0.api.runtime.SynchronizedDatabase public interface Module { + public val userExtension: ModuleUserExtension public val versionKey: String diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/module/ModuleTemplate.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/module/ModuleTemplate.kt similarity index 92% rename from src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/module/ModuleTemplate.kt rename to src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/module/ModuleTemplate.kt index 5be54e6..23741d7 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/module/ModuleTemplate.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/module/ModuleTemplate.kt @@ -1,6 +1,6 @@ -package ru.landgrafhomyak.serdha.api.v0.ddl.module +package ru.landgrafhomyak.db.serdha0.api.module -import ru.landgrafhomyak.serdha.api.v0.runtime.Transaction +import ru.landgrafhomyak.db.serdha0.api.runtime.Transaction public interface ModuleTemplate<@Suppress("unused") ModuleUserExtension : Any> { public interface Provider { diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/module/Namespace.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/module/Namespace.kt similarity index 77% rename from src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/module/Namespace.kt rename to src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/module/Namespace.kt index 58f0e7e..40f935f 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/module/Namespace.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/module/Namespace.kt @@ -1,4 +1,4 @@ -package ru.landgrafhomyak.serdha.api.v0.ddl.module +package ru.landgrafhomyak.db.serdha0.api.module public interface Namespace { @Suppress("SpellCheckingInspection") diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/CreateTableScope.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/table/CreateTableScope.kt similarity index 65% rename from src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/CreateTableScope.kt rename to src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/table/CreateTableScope.kt index 3dc898b..9e417a2 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/CreateTableScope.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/table/CreateTableScope.kt @@ -1,22 +1,18 @@ -package ru.landgrafhomyak.serdha.api.v0.ddl.table +package ru.landgrafhomyak.db.serdha0.api.table -import ru.landgrafhomyak.serdha.api.v0.Expression -import ru.landgrafhomyak.serdha.api.v0.ddl.types.DatabaseType -import ru.landgrafhomyak.serdha.api.v0.ddl.types.DatabaseTypesProvider -import ru.landgrafhomyak.serdha.api.v0.ddl.types.RowId +import ru.landgrafhomyak.db.serdha0.api.misc.Column +import ru.landgrafhomyak.db.serdha0.api.misc.DatabaseType public interface CreateTableScope { - public val expressionBuilder: Expression.Builder - - public val types: DatabaseTypesProvider + public val types: DatabaseType.Provider public fun > column(name: String, type: DT): Column public fun index(name: String, vararg columns: Column<*, *, TableUserExtension>): Index public fun uniqueIndex(name: String, distinctNulls: Boolean, vararg columns: Column<*, *, TableUserExtension>): UniqueIndex - public fun checkConstraint(name: String, constraint: Expression): CheckConstraint - public fun > defaultValue(c: Column, expr: Expression): DefaultConstraint + public fun checkConstraint(name: String, creator: CheckConstraint.Creator, recheckExistingRows: Boolean = false): CheckConstraint + public fun > defaultValue(c: Column, creator: DefaultConstraint.Creator): DefaultConstraint @Suppress("PropertyName") public val rowId_column: Column, DatabaseType>, TableUserExtension> diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/table/Index.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/table/Index.kt new file mode 100644 index 0000000..0306c89 --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/table/Index.kt @@ -0,0 +1,10 @@ +package ru.landgrafhomyak.db.serdha0.api.table + +import kotlin.jvm.JvmName +import ru.landgrafhomyak.db.serdha0.api.misc.Column + +public interface Index { + public val name: String + public val table: Table + public val columns: List> +} \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/Table.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/table/Table.kt similarity index 58% rename from src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/Table.kt rename to src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/table/Table.kt index f9dc17e..7f506da 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/Table.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/table/Table.kt @@ -1,6 +1,9 @@ -package ru.landgrafhomyak.serdha.api.v0.ddl.table +package ru.landgrafhomyak.db.serdha0.api.table -public interface Table { +import ru.landgrafhomyak.db.serdha0.api.misc._Selectable +import ru.landgrafhomyak.db.serdha0.api.module.Module + +public interface Table : _Selectable { public val userExtension: UserExtension public val name: String public val module: Module<*> @@ -12,5 +15,6 @@ public interface Table { public val temporaryType: TemporaryType? + // todo make nullable for temp tables public val namespacesFromModuleRoot: List } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/UniqueIndex.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/table/UniqueIndex.kt similarity index 72% rename from src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/UniqueIndex.kt rename to src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/table/UniqueIndex.kt index 105dc32..2f58e41 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/UniqueIndex.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/table/UniqueIndex.kt @@ -1,4 +1,4 @@ -package ru.landgrafhomyak.serdha.api.v0.ddl.table +package ru.landgrafhomyak.db.serdha0.api.table public interface UniqueIndex : Index { public val areNullsDistinct: Boolean