Temporary tables and queries for module creating/upgrading scope

This commit is contained in:
Andrew Golovashevich 2025-01-03 14:25:23 +03:00
parent 3b1fa8a562
commit 797ab51c58
2 changed files with 111 additions and 0 deletions

View File

@ -112,9 +112,25 @@ public interface CreateModuleScope {
* @param QueryUserWrapper User's type for containing query-related descriptors.
* @param initializer Query-related descriptors initializer.
* @return Query descriptor.
*
* @see CreateModuleScope.createTemporarySelectQuery
*/
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].
* 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 <QueryUserWrapper : Any> createTemporarySelectQuery(initializer: SelectQueryCreator<QueryUserWrapper>): Select<QueryUserWrapper>
/**
* Functional interface for creating 'INSERT ... VALUES' query.
*
@ -147,9 +163,26 @@ public interface CreateModuleScope {
* @param QueryUserWrapper User's type for containing query-related descriptors.
* @param initializer Query-related descriptors initializer.
* @return Query descriptor.
*
* @see CreateModuleScope.createTemporaryInsertParamsQuery
*/
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].
* 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.
*
* @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.createInsertParamsQuery
*/
public fun <TableUserExtension : Any, QueryUserWrapper : Any> createTemporaryInsertParamsQuery(table: Table<TableUserExtension, *>, initializer: InsertParamsQueryCreator<TableUserExtension, QueryUserWrapper>): Insert.InsertParams<QueryUserWrapper>
/**
* Functional interface for creating 'INSERT ... FROM' query.
*
@ -181,9 +214,25 @@ public interface CreateModuleScope {
* @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.createTemporaryInsertFromQueryQuery
*/
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].
* 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.
*
* @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.createInsertFromQueryQuery
*/
public fun <TableUserExtension : Any, QueryUserWrapper : Any> createTemporaryInsertFromQueryQuery(table: Table<TableUserExtension, *>, initializer: InsertFromQueryQueryCreator<TableUserExtension, QueryUserWrapper>): Insert.InsertFromQuery<QueryUserWrapper>
/**
* Functional interface for creating 'UPDATE' query.
*
@ -215,9 +264,25 @@ public interface CreateModuleScope {
* @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 <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].
* 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 <TableUserExtension : Any, QueryUserWrapper : Any> createTemporaryUpdateQuery(table: Table<TableUserExtension, *>, initializer: UpdateQueryCreator<TableUserExtension, QueryUserWrapper>): Update<QueryUserWrapper>
/**
* Functional interface for creating 'DELETE' query.
*
@ -249,9 +314,25 @@ public interface CreateModuleScope {
* @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 <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.
*
* 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 <TableUserExtension : Any, QueryUserWrapper : Any> createTemporaryDeleteQuery(table: Table<TableUserExtension, *>, initializer: DeleteQueryCreator<TableUserExtension, QueryUserWrapper>): Delete<QueryUserWrapper>
/**
* 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.

View File

@ -116,9 +116,39 @@ public interface UpdateModuleScope : CreateModuleScope {
* Deletes table and all data in it.
*
* @param table Descriptor of table which should be deleted.
*
* @see UpdateModuleScope.deleteTableAfterModuleUpgraded
*/
public fun deleteTable(table: Table<*, *>)
/**
* Keeps table while module upgrading and deletes it after [ModuleTemplate.ModuleUpdater.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
*/
public fun deleteTableAfterModuleUpgraded(table: Table<*, *>)
/**
* Creates a temporary table that exits only while module upgrading and auto-deleted after [ModuleTemplate.ModuleUpdater.upgradeData].
*
* @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.
*
* @see UpdateModuleScope.deleteTableAfterModuleUpgraded
* @see CreateModuleScope.createTable
* @see CreateModuleScope.createSessionScopeTemporaryTable
* @see CreateModuleScope.createTransactionScopeTemporaryTable
*/
public fun <TableUserExtension : Any> createModuleUpgradeScopeTemporaryTable(namespace: Namespace, name: String, initializer: CreateModuleScope.TableCreator<TableUserExtension>): Table<TableUserExtension, Nothing>
/**
* Upgrades [module][oldModule] located at [rootNs] with new schema template.
*