Interface with methods for creating queries

This commit is contained in:
Andrew Golovashevich 2025-01-27 03:12:00 +03:00
parent 50723c8811
commit 51c3e6869f
3 changed files with 27 additions and 143 deletions

View File

@ -1,11 +1,7 @@
package ru.landgrafhomyak.serdha.api.v0.module package ru.landgrafhomyak.serdha.api.v0.module
import ru.landgrafhomyak.serdha.api.v0.table.Table import ru.landgrafhomyak.serdha.api.v0.table.Table
import ru.landgrafhomyak.serdha.api.v0.queries.CopyQuery import ru.landgrafhomyak.serdha.api.v0.queries.CreateQueryScope
import ru.landgrafhomyak.serdha.api.v0.queries.DeleteQuery
import ru.landgrafhomyak.serdha.api.v0.queries.InsertQuery
import ru.landgrafhomyak.serdha.api.v0.queries.SelectQuery
import ru.landgrafhomyak.serdha.api.v0.queries.UpdateQuery
import ru.landgrafhomyak.serdha.api.v0.runtime.SynchronizedDatabase import ru.landgrafhomyak.serdha.api.v0.runtime.SynchronizedDatabase
import ru.landgrafhomyak.serdha.api.v0.runtime.Transaction import ru.landgrafhomyak.serdha.api.v0.runtime.Transaction
import ru.landgrafhomyak.serdha.api.v0.table.CreateTableScope import ru.landgrafhomyak.serdha.api.v0.table.CreateTableScope
@ -84,145 +80,11 @@ public interface CreateModuleScope {
*/ */
public fun <TableUserExtension : Any> createTransactionScopeTemporaryTable(namespace: Namespace, name: String, initializer: TableCreator<TableUserExtension>): Table<TableUserExtension, Nothing> public fun <TableUserExtension : Any> createTransactionScopeTemporaryTable(namespace: Namespace, name: String, initializer: TableCreator<TableUserExtension>): Table<TableUserExtension, Nothing>
public val queries: CreateQueryScope
/** public val temporarySubqueries: CreateQueryScope
* Creates 'SELECT' query.
*
* On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] must be recreated if needed.
*
* @param QueryUserExtension User's type for containing query-related descriptors.
* @param initializer Query-related descriptors initializer.
* @return Query descriptor.
*
* @see CreateModuleScope.createTemporarySelectQuery
*/
public fun <QueryUserExtension : Any> createSelectQuery(initializer: SelectQuery.Creator<QueryUserExtension>): SelectQuery<QueryUserExtension>
/** public val moduleConfiguringTemporaryQueries: CreateQueryScope
* 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 QueryUserExtension User's type for containing query-related descriptors.
* @param initializer Query-related descriptors initializer.
* @return Query descriptor.
*
* @see CreateModuleScope.createSelectQuery
*/
public fun <QueryUserExtension : Any> createTemporarySelectQuery(initializer: SelectQuery.Creator<QueryUserExtension>): SelectQuery<QueryUserExtension>
/**
* Creates 'INSERT ... VALUES' query.
*
* On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] must be recreated if needed.
*
* @param TargetTableUserExtension User's type with descriptors related to table to which values will be inserted.
* @param QueryUserExtension User's type for containing query-related descriptors.
* @param initializer Query-related descriptors initializer.
* @return Query descriptor.
*
* @see CreateModuleScope.createTemporaryInsertQuery
*/
public fun <QueryUserExtension : Any, TargetTableUserExtension : Any> createInsertQuery(table: Table<TargetTableUserExtension, *>, initializer: InsertQuery.Creator<QueryUserExtension, TargetTableUserExtension>): InsertQuery<QueryUserExtension>
/**
* 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 TargetTableUserExtension User's type with descriptors related to table to which values will be inserted.
* @param QueryUserExtension User's type for containing query-related descriptors.
* @param initializer Query-related descriptors initializer.
* @return Query descriptor.
*
* @see CreateModuleScope.createInsertQuery
*/
public fun <QueryUserExtension : Any, TargetTableUserExtension : Any> createTemporaryInsertQuery(table: Table<TargetTableUserExtension, *>, initializer: InsertQuery.Creator<QueryUserExtension, TargetTableUserExtension>): InsertQuery<QueryUserExtension>
/**
* Creates 'INSERT ... FROM' query.
*
* On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] must be recreated if needed.
*
* @param TargetTableUserExtension 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 <QueryUserExtension : Any, TargetTableUserExtension : Any> createCopyQuery(table: Table<TargetTableUserExtension, *>, initializer: CopyQuery.Creator<QueryUserExtension, TargetTableUserExtension>): CopyQuery<QueryUserExtension>
/**
* 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 TargetTableUserExtension 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 <QueryUserExtension : Any, TargetTableUserExtension : Any> createTemporaryCopyQuery(table: Table<TargetTableUserExtension, *>, initializer: CopyQuery.Creator<QueryUserExtension, TargetTableUserExtension>): CopyQuery<QueryUserExtension>
/**
* Creates 'UPDATE' query.
*
* On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] must be recreated if needed.
*
* @param TargetTableUserExtension 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 <QueryUserExtension : Any, TargetTableUserExtension : Any> createUpdateQuery(table: Table<TargetTableUserExtension, *>, initializer: UpdateQuery.Creator<QueryUserExtension, TargetTableUserExtension>): UpdateQuery<QueryUserExtension>
/**
* 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 TargetTableUserExtension 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 <QueryUserExtension : Any, TargetTableUserExtension : Any> createTemporaryUpdateQuery(table: Table<TargetTableUserExtension, *>, initializer: UpdateQuery.Creator<QueryUserExtension, TargetTableUserExtension>): UpdateQuery<QueryUserExtension>
/**
* Creates 'DELETE' query.
*
* On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] must be recreated if needed.
*
* @param TargetTableUserExtension 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 <QueryUserExtension : Any, TargetTableUserExtension : Any> createDeleteQuery(table: Table<TargetTableUserExtension, *>, initializer: DeleteQuery.Creator<QueryUserExtension, TargetTableUserExtension>): DeleteQuery<QueryUserExtension>
/**
* 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 TargetTableUserExtension 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 <QueryUserExtension : Any, TargetTableUserExtension : Any> createTemporaryDeleteQuery(table: Table<TargetTableUserExtension, *>, initializer: DeleteQuery.Creator<QueryUserExtension, TargetTableUserExtension>): DeleteQuery<QueryUserExtension>
/** /**
* Replaces [specified namespace][rootNs] with schema provided by [template]. * Replaces [specified namespace][rootNs] with schema provided by [template].

View File

@ -0,0 +1,22 @@
package ru.landgrafhomyak.serdha.api.v0.queries
import ru.landgrafhomyak.serdha.api.v0.misc._Selectable
import ru.landgrafhomyak.serdha.api.v0.table.Table
public interface CreateQueryScope {
public fun <qUE : Any, tUE : Any> deleteSingleRow(table: Table<tUE, *>, creator: DeleteQuery.SingleRow.Creator<qUE, tUE>): DeleteQuery.SingleRow<qUE>
public fun <qUE : Any, tUE : Any, sUE : Any> deleteFromSubquery(table: Table<tUE, *>, selector: _Selectable<sUE>, creator: DeleteQuery.FromSubquery.Creator<qUE, tUE, sUE>): DeleteQuery.FromSubquery<qUE>
public fun <qUE : Any, tUE : Any> deleteMultipleRows(table: Table<tUE, *>, creator: DeleteQuery.MultipleRows.Creator<qUE, tUE>): DeleteQuery.MultipleRows<qUE>
public fun <qUE : Any, tUE : Any> insertSingleRow(table: Table<tUE, *>, creator: InsertQuery.SingleRow.Creator<qUE, tUE>): InsertQuery.SingleRow<qUE>
public fun <qUE : Any, tUE : Any, sUE : Any> insertFromSubquery(table: Table<tUE, *>, selector: _Selectable<sUE>, creator: InsertQuery.FromSubquery.Creator<qUE, tUE, sUE>): InsertQuery.FromSubquery<qUE>
public fun <qUE : Any, tUE : Any> insertMultipleRows(table: Table<tUE, *>, creator: InsertQuery.MultipleRows.Creator<qUE, tUE>): InsertQuery.MultipleRows<qUE>
public fun <qUE : Any, tUE : Any> select(table: _Selectable<tUE>, creator: SelectQuery.FromSubquery.Creator<qUE, tUE>): SelectQuery.FromSubquery<qUE>
public fun <qUE : Any, lUE : Any, rUE : Any> selectWithJoin(left: _Selectable<lUE>, right: _Selectable<rUE>, creator: SelectQuery.WithJoin.Creator<qUE, lUE, rUE>): SelectQuery.WithJoin<qUE>
public fun <qUE : Any, tUE : Any> updateSingleRow(table: Table<tUE, *>, creator: UpdateQuery.SingleRow.Creator<qUE, tUE>): UpdateQuery.SingleRow<qUE>
public fun <qUE : Any, tUE : Any, sUE : Any> updateFromSubquery(table: Table<tUE, *>, selector: _Selectable<sUE>, creator: UpdateQuery.FromSubquery.Creator<qUE, tUE, sUE>): UpdateQuery.FromSubquery<qUE>
public fun <qUE : Any, tUE : Any> updateMultipleRows(table: Table<tUE, *>, creator: UpdateQuery.MultipleRows.Creator<qUE, tUE>): UpdateQuery.MultipleRows<qUE>
}

View File

@ -38,7 +38,7 @@ public interface SelectQuery<QueryUserExtension : Any> : _Query<QueryUserExtensi
} }
public interface WithJoin<QueryUserExtension : Any> : SelectQuery<QueryUserExtension>, _Query.Params2Table<QueryUserExtension> { public interface WithJoin<QueryUserExtension : Any> : SelectQuery<QueryUserExtension>, _Query.Params2Table<QueryUserExtension> {
public interface JoinCreator<QueryUserExtension : Any, LeftTableUserExtension : Any, RightTableUserExtension : Any> : _CommonSelectCreatorScope<QueryUserExtension> { public interface Creator<QueryUserExtension : Any, LeftTableUserExtension : Any, RightTableUserExtension : Any> : _CommonSelectCreatorScope<QueryUserExtension> {
public fun createSelectWithJoin(creator: Scope<QueryUserExtension, LeftTableUserExtension, RightTableUserExtension>): QueryUserExtension public fun createSelectWithJoin(creator: Scope<QueryUserExtension, LeftTableUserExtension, RightTableUserExtension>): QueryUserExtension
public interface Scope<QueryUserExtension : Any, LeftTableUserExtension : Any, RightTableUserExtension : Any> { public interface Scope<QueryUserExtension : Any, LeftTableUserExtension : Any, RightTableUserExtension : Any> {