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 index 8198f46..f1fa1ca 100644 --- 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 @@ -26,7 +26,7 @@ public interface CreateModuleScope { * @see CreateModuleScope.createTable * @see CreateModuleScope.createSessionScopeTemporaryTable * @see CreateModuleScope.createTransactionScopeTemporaryTable - * @see CreateModuleScope.UpdateTable + * @see UpgradeModuleScope.TableUpgrade */ public interface TableCreator<TableUserExtension : Any> { /** @@ -38,7 +38,7 @@ public interface CreateModuleScope { * @see CreateModuleScope.createTable * @see CreateModuleScope.createSessionScopeTemporaryTable * @see CreateModuleScope.createTransactionScopeTemporaryTable - * @see CreateModuleScope.UpdateTable + * @see UpgradeModuleScope.TableUpgrade */ public fun createTable(creator: ru.landgrafhomyak.serdha.api.v0.ddl.table.TableCreator<TableUserExtension>): TableUserExtension } @@ -47,7 +47,7 @@ public interface CreateModuleScope { * 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][CreateModuleScope.updateTable] (or [renamed][CreateModuleScope.renameTable]) or [deleted][CreateModuleScope.deleteTable]. + * 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. @@ -97,7 +97,7 @@ public interface CreateModuleScope { * Scope method that uses [creator] to create a query. * * @param creator Object with descriptor providers and factories. - * @return User's object with updated descriptors for future access. + * @return User's object with query-related descriptors for future access. * * @see CreateModuleScope.createSelectQuery */ @@ -118,7 +118,7 @@ public interface CreateModuleScope { public fun <QueryUserWrapper : Any> createSelectQuery(initializer: SelectQueryCreator<QueryUserWrapper>): Select<QueryUserWrapper> /** - * Creates 'SELECT' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpdater]. + * 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. @@ -147,7 +147,7 @@ public interface CreateModuleScope { * * @param table Descriptor of table to which values will be inserted. * @param creator Object with descriptor providers and factories. - * @return User's object with updated descriptors for future access. + * @return User's object with query-related descriptors for future access. * * @see CreateModuleScope.createInsertParamsQuery */ @@ -169,7 +169,7 @@ public interface CreateModuleScope { public fun <TableUserExtension : Any, QueryUserWrapper : Any> createInsertParamsQuery(table: Table<TableUserExtension, *>, initializer: InsertParamsQueryCreator<TableUserExtension, QueryUserWrapper>): Insert.InsertParams<QueryUserWrapper> /** - * Creates 'INSERT ... VALUES' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpdater]. + * Creates 'INSERT ... VALUES' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpgrade]. * Using this function instead of [CreateModuleScope.createInsertParamsQuery] may help the driver to optimize caches and runtime indexes. * * On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] must be recreated if needed. @@ -199,7 +199,7 @@ public interface CreateModuleScope { * * @param table Descriptor of table to which values will be inserted. * @param creator Object with descriptor providers and factories. - * @return User's object with updated descriptors for future access. + * @return User's object with query-related descriptors for future access. * * @see CreateModuleScope.createInsertFromQueryQuery */ @@ -220,7 +220,7 @@ public interface CreateModuleScope { public fun <TableUserExtension : Any, QueryUserWrapper : Any> createInsertFromQueryQuery(table: Table<TableUserExtension, *>, initializer: InsertFromQueryQueryCreator<TableUserExtension, QueryUserWrapper>): Insert.InsertFromQuery<QueryUserWrapper> /** - * Creates 'INSERT ... FROM' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpdater]. + * Creates 'INSERT ... FROM' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpgrade]. * Using this function instead of [CreateModuleScope.createInsertFromQueryQuery] may help the driver to optimize caches and runtime indexes. * * On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] must be recreated if needed. @@ -249,7 +249,7 @@ public interface CreateModuleScope { * * @param table Descriptor of table which rows will be updated. * @param creator Object with descriptor providers and factories. - * @return User's object with updated descriptors for future access. + * @return User's object with query-related descriptors for future access. * * @see CreateModuleScope.createUpdateQuery */ @@ -270,7 +270,7 @@ public interface CreateModuleScope { public fun <TableUserExtension : Any, QueryUserWrapper : Any> createUpdateQuery(table: Table<TableUserExtension, *>, initializer: UpdateQueryCreator<TableUserExtension, QueryUserWrapper>): Update<QueryUserWrapper> /** - * Creates 'UPDATE' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpdater]. + * 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. @@ -299,7 +299,7 @@ public interface CreateModuleScope { * * @param table Descriptor of table from which data will be deleted. * @param creator Object with descriptor providers and factories. - * @return User's object with updated descriptors for future access. + * @return User's object with query-related descriptors for future access. * * @see CreateModuleScope.createDeleteQuery */ @@ -320,8 +320,8 @@ public interface CreateModuleScope { public fun <TableUserExtension : Any, QueryUserWrapper : Any> createDeleteQuery(table: Table<TableUserExtension, *>, initializer: DeleteQueryCreator<TableUserExtension, QueryUserWrapper>): Delete<QueryUserWrapper> /** - * Creates 'DELETE' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpdater]. - * Using this function instead of [CreateModuleScope.createUpdateQuery] may help the driver to optimize caches and runtime indexes. + * 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. * diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/module/ModuleTemplate.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/module/ModuleTemplate.kt index 038dc18..5be54e6 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/module/ModuleTemplate.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/module/ModuleTemplate.kt @@ -4,18 +4,18 @@ import ru.landgrafhomyak.serdha.api.v0.runtime.Transaction public interface ModuleTemplate<@Suppress("unused") ModuleUserExtension : Any> { public interface Provider<UserExtension : Any> { - public fun createModuleTemplates(creator: CreateModuleTemplatesScope): UserExtension + public fun createModuleTemplates(scope: CreateModuleTemplatesScope): UserExtension } public interface CreateModuleTemplatesScope { public fun <NewModuleUserExtension : Any> createTemplate( versionKey: String, - updater: ModuleCreator<NewModuleUserExtension>, + creator: ModuleCreator<NewModuleUserExtension>, ): ModuleTemplate<NewModuleUserExtension> public fun <OldModuleUserExtension : Any, NewModuleUserExtension : Any> upgradeTemplate( versionKey: String, - updater: ModuleUpdater<OldModuleUserExtension, NewModuleUserExtension>, + upgrade: ModuleUpgrade<OldModuleUserExtension, NewModuleUserExtension>, ): ModuleTemplate<NewModuleUserExtension> } @@ -25,8 +25,8 @@ public interface ModuleTemplate<@Suppress("unused") ModuleUserExtension : Any> { public suspend fun initData(ext: ModuleUserExtension, transaction: Transaction) {} } - public interface ModuleUpdater<OldModuleUserExtension : Any, NewModuleUserExtension : Any> { - public fun upgradeSchema(oldModule: Module<OldModuleUserExtension>, rootNs: Namespace, updater: CreateModuleScope): NewModuleUserExtension + public interface ModuleUpgrade<OldModuleUserExtension : Any, NewModuleUserExtension : Any> { + public fun upgradeSchema(oldModule: Module<OldModuleUserExtension>, rootNs: Namespace, upgrader: CreateModuleScope): NewModuleUserExtension public suspend fun upgradeData(ext: NewModuleUserExtension, transaction: Transaction) {} } diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/module/UpdateModuleScope.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/module/UpgradeModuleScope.kt similarity index 68% rename from src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/module/UpdateModuleScope.kt rename to src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/module/UpgradeModuleScope.kt index 4e1ae41..f5e02b5 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/module/UpdateModuleScope.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/module/UpgradeModuleScope.kt @@ -1,53 +1,42 @@ package ru.landgrafhomyak.serdha.api.v0.ddl.module import ru.landgrafhomyak.serdha.api.v0.ddl.table.Table -import ru.landgrafhomyak.serdha.api.v0.ddl.table.TableCreator import ru.landgrafhomyak.serdha.api.v0.ddl.table.TableUpdater -import ru.landgrafhomyak.serdha.api.v0.dml.Delete -import ru.landgrafhomyak.serdha.api.v0.dml.DeleteCreator -import ru.landgrafhomyak.serdha.api.v0.dml.Insert -import ru.landgrafhomyak.serdha.api.v0.dml.InsertCreator -import ru.landgrafhomyak.serdha.api.v0.dml.Select -import ru.landgrafhomyak.serdha.api.v0.dml.SelectCreator -import ru.landgrafhomyak.serdha.api.v0.dml.Update -import ru.landgrafhomyak.serdha.api.v0.dml.UpdateCreator -import ru.landgrafhomyak.serdha.api.v0.runtime.SynchronizedDatabase -import ru.landgrafhomyak.serdha.api.v0.runtime.Transaction /** * Scope methods for upgrading [module template][ModuleTemplate]. * * @see ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate - * @see ModuleTemplate.ModuleUpdater.upgradeSchema + * @see ModuleTemplate.ModuleUpgrade.upgradeSchema */ -public interface UpdateModuleScope : CreateModuleScope { +public interface UpgradeModuleScope : CreateModuleScope { /** * Functional interface for updating table. * * Can be implemented like a companion object that just calls [TableNewUserExtension]'s constructor with the same or similar signature. * * @param TableNewUserExtension User's type with table's descriptors from the previous table version. - * @param TableOldUserExtension User's type with descriptors of updated table. + * @param TableOldUserExtension User's type with descriptors of upgraded table. * - * @see UpdateModuleScope.updateTable - * @see UpdateModuleScope.renameTable - * @see UpdateModuleScope.updateAndRenameTable - * @see UpdateModuleScope.CreateTable + * @see UpgradeModuleScope.upgradeTable + * @see UpgradeModuleScope.renameTable + * @see UpgradeModuleScope.upgradeAndRenameTable + * @see UpgradeModuleScope.CreateTable */ - public interface UpdateTable<TableNewUserExtension : Any, TableOldUserExtension : Any> { + public interface TableUpgrade<TableNewUserExtension : Any, TableOldUserExtension : Any> { /** - * Scope method that uses [updater] to update table schema. + * Scope method that uses [upgrader] to update table schema. * * @param oldTable Descriptor to the previous version of table from which can be got user's extension with old descriptors. - * @param updater Object with descriptor providers and factories. - * @return User's object with updated descriptors for future access. + * @param upgrader Object with descriptor providers and factories. + * @return User's object with upgraded descriptors for future access. * - * @see UpdateModuleScope.updateTable - * @see UpdateModuleScope.renameTable - * @see UpdateModuleScope.updateAndRenameTable - * @see UpdateModuleScope.CreateTable + * @see UpgradeModuleScope.upgradeTable + * @see UpgradeModuleScope.renameTable + * @see UpgradeModuleScope.upgradeAndRenameTable + * @see UpgradeModuleScope.CreateTable */ - public fun updateTable(oldTable: Table<TableOldUserExtension, *>, updater: TableUpdater<TableNewUserExtension, TableOldUserExtension>): TableNewUserExtension + public fun upgradeTable(oldTable: Table<TableOldUserExtension, *>, upgrader: TableUpdater<TableNewUserExtension, TableOldUserExtension>): TableNewUserExtension } @@ -79,37 +68,37 @@ public interface UpdateModuleScope : CreateModuleScope { ): Table<TableUserExtension, *> /** - * Updates table's descriptors without changing its [name][Table.name] or [namespace][Table.namespacesFromModuleRoot]. + * Upgrade table's descriptors without changing its [name][Table.name] or [namespace][Table.namespacesFromModuleRoot]. * - * @param TableNewUserExtension User's type with descriptors of updated table. + * @param TableNewUserExtension User's type with descriptors of upgraded table. * @param TableOldUserExtension User's type with table's descriptors from the previous table version. * @param oldTable Descriptor to the previous version of table from which can be got user's extension with old descriptors. - * @param updater Object with descriptor providers and factories. + * @param upgrade Object with descriptor providers and factories. * @return New table descriptor. */ - public fun <TableNewUserExtension : Any, TableOldUserExtension : Any> updateTable( + public fun <TableNewUserExtension : Any, TableOldUserExtension : Any> upgradeTable( oldTable: Table<TableOldUserExtension, *>, - updater: UpdateTable<TableNewUserExtension, TableOldUserExtension> + upgrade: TableUpgrade<TableNewUserExtension, TableOldUserExtension> ): Table<TableNewUserExtension, TableOldUserExtension> /** - * Both updates table's schema and renames or moves table. + * Both upgrade table's schema and renames or moves table. * - * @param TableNewUserExtension User's type with descriptors of updated table. + * @param TableNewUserExtension User's type with descriptors of upgraded table. * @param TableOldUserExtension User's type with table's descriptors from the previous table version. - * @param oldTable Descriptor of table which should be renamed and updated. + * @param oldTable Descriptor of table which should be renamed and upgraded. * @param newNamespace New namespace of the table. May be `null` if not changed. * @param newName New namespace of the table. May be `null` if not changed. - * @param updater Object with descriptor providers and factories. + * @param upgrade Object with descriptor providers and factories. * @return New table descriptor. * @throws IllegalArgumentException If both [newName] and [newNamespace] are same as old or `null`. */ - public fun <TableNewUserExtension : Any, TableOldUserExtension : Any> updateAndRenameTable( + public fun <TableNewUserExtension : Any, TableOldUserExtension : Any> upgradeAndRenameTable( oldTable: Table<TableNewUserExtension, TableOldUserExtension>, newNamespace: Namespace? = null, newName: String? = null, - updater: UpdateTable<TableNewUserExtension, TableOldUserExtension> + upgrade: TableUpgrade<TableNewUserExtension, TableOldUserExtension> ): Table<TableNewUserExtension, TableOldUserExtension> /** @@ -117,23 +106,23 @@ public interface UpdateModuleScope : CreateModuleScope { * * @param table Descriptor of table which should be deleted. * - * @see UpdateModuleScope.deleteTableAfterModuleUpgraded + * @see UpgradeModuleScope.deleteTableAfterModuleUpgraded */ public fun deleteTable(table: Table<*, *>) /** - * Keeps table while module upgrading and deletes it after [ModuleTemplate.ModuleUpdater.upgradeData]. + * Keeps table while module upgrading and deletes it after [ModuleTemplate.ModuleUpgrade.upgradeData]. * [Table's][table] name become free and can be used for another table. * * @param table Descriptor of table which should be deleted. * - * @see UpdateModuleScope.deleteTable + * @see UpgradeModuleScope.deleteTable */ public fun deleteTableAfterModuleUpgraded(table: Table<*, *>) /** - * Creates a temporary table that exits only while module upgrading and auto-deleted after [ModuleTemplate.ModuleUpdater.upgradeData]. + * Creates a temporary table that exits only while module upgrading and auto-deleted after [ModuleTemplate.ModuleUpgrade.upgradeData]. * * @param TableUserExtension User's type for containing table-related descriptors. * @param namespace Way to group tables if there is a lot. @@ -141,7 +130,7 @@ public interface UpdateModuleScope : CreateModuleScope { * @param initializer Table-related descriptors initializer. * @return Table descriptor. * - * @see UpdateModuleScope.deleteTableAfterModuleUpgraded + * @see UpgradeModuleScope.deleteTableAfterModuleUpgraded * @see CreateModuleScope.createTable * @see CreateModuleScope.createSessionScopeTemporaryTable * @see CreateModuleScope.createTransactionScopeTemporaryTable