diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/module/CreateModuleScope.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/module/CreateModuleScope.kt index 6c67991..91ab658 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/module/CreateModuleScope.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/module/CreateModuleScope.kt @@ -1,10 +1,10 @@ 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.queries.QueryConstructor import ru.landgrafhomyak.db.serdha0.api.runtime.SynchronizedDatabase import ru.landgrafhomyak.db.serdha0.api.runtime.Transaction -import ru.landgrafhomyak.db.serdha0.api.table.CreateTableScope +import ru.landgrafhomyak.db.serdha0.api.table.TableConstructor /** * Scope methods for creating new [module template][ModuleTemplate]. @@ -13,32 +13,7 @@ import ru.landgrafhomyak.db.serdha0.api.table.CreateTableScope * @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. @@ -52,7 +27,7 @@ public interface CreateModuleScope { * @param initializer Table-related descriptors initializer. * @return Table descriptor. */ - public fun createTable(namespace: Namespace, name: String, initializer: TableCreator): Table + public fun createTable(namespace: Namespace, name: String, initializer: TableConstructor): Table /** * Creates a temporary table that exits only until connection to the database not [closed][SynchronizedDatabase._close]. @@ -65,7 +40,7 @@ public interface CreateModuleScope { * @param initializer Table-related descriptors initializer. * @return Table descriptor. */ - public fun createSessionScopeTemporaryTable(namespace: Namespace, name: String, initializer: TableCreator): Table + public fun createSessionScopeTemporaryTable(namespace: Namespace, name: String, initializer: TableConstructor): 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]. @@ -78,17 +53,17 @@ public interface CreateModuleScope { * @param initializer Table-related descriptors initializer. * @return Table descriptor. */ - public fun createTransactionScopeTemporaryTable(namespace: Namespace, name: String, initializer: TableCreator): Table + public fun createTransactionScopeTemporaryTable(namespace: Namespace, name: String, initializer: TableConstructor): Table - public val queries: QueryCreator.Scope + public val queries: QueryConstructor.Scope - public val temporarySubqueries: QueryCreator.Scope + public val temporarySubqueries: QueryConstructor.Scope - public val moduleConfiguringTemporaryQueries: QueryCreator.Scope + public val moduleConfiguringTemporaryQueries: QueryConstructor.Scope - public fun createQuery(creator: QueryCreator): qUE + public fun createQuery(creator: QueryConstructor): qUE - public fun createModuleConfiguringTemporaryQuery(creator: QueryCreator): qUE + public fun createModuleConfiguringTemporaryQuery(creator: QueryConstructor): qUE /** * Replaces [specified namespace][rootNs] with schema provided by [template]. diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/module/UpgradeModuleScope.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/module/UpgradeModuleScope.kt index 4092fb7..5ec3c01 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/module/UpgradeModuleScope.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/module/UpgradeModuleScope.kt @@ -1,6 +1,7 @@ package ru.landgrafhomyak.db.serdha0.api.module import ru.landgrafhomyak.db.serdha0.api.table.Table +import ru.landgrafhomyak.db.serdha0.api.table.TableConstructor import ru.landgrafhomyak.db.serdha0.api.table.UpdateTableScope /** @@ -135,7 +136,7 @@ public interface UpgradeModuleScope : CreateModuleScope { * @see CreateModuleScope.createSessionScopeTemporaryTable * @see CreateModuleScope.createTransactionScopeTemporaryTable */ - public fun createModuleUpgradeScopeTemporaryTable(namespace: Namespace, name: String, initializer: CreateModuleScope.TableCreator): Table + public fun createModuleUpgradeScopeTemporaryTable(namespace: Namespace, name: String, initializer: TableConstructor): Table /** diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/DeleteQuery.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/DeleteQuery.kt index 0204803..7b1f792 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/DeleteQuery.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/DeleteQuery.kt @@ -10,10 +10,10 @@ import ru.landgrafhomyak.db.serdha0.api.table.Table public interface DeleteQuery : _Query { public interface SingleRow : DeleteQuery, _Query.Params2Table { - public interface Creator { + public interface Constructor { public val targetTable: Table - public fun createDeleteSingleRowWithReturning(creator: Scope): qUE + public fun createDeleteSingleRowWithReturning(context: Scope): qUE public interface Scope { public val tt: Table @@ -34,11 +34,11 @@ public interface DeleteQuery : _Query { } public interface FromSubquery : DeleteQuery, _Query.Params2Table { - public interface Creator { + public interface Constructor { public val targetTable: Table public val selector: _Selectable - public fun createDeleteFromSubqueryWithReturning(creator: Scope): qUE + public fun createDeleteFromSubqueryWithReturning(context: Scope): qUE public interface Scope { public val tt: Table @@ -62,10 +62,10 @@ public interface DeleteQuery : _Query { } public interface MultipleRows : DeleteQuery, _Query.Table2Void { - public interface Creator { + public interface Constructor { public val targetTable: Table - public fun createMultipleRows(creator: Scope): qUE + public fun createMultipleRows(context: Scope): qUE public interface Scope { public val tt: Table diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/InsertQuery.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/InsertQuery.kt index 498b1f5..f10f380 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/InsertQuery.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/InsertQuery.kt @@ -28,10 +28,10 @@ public interface InsertQuery : _Query { public interface SingleRow : InsertQuery, _Query.Params2Table { - public interface Creator { + public interface Constructor { public val targetTable: Table - public fun createInsertSingleRowWithReturning(creator: Scope): qUE + public fun createInsertSingleRowWithReturning(context: Scope): qUE public interface Scope : _CommonInsertCreatorScope { public val tt: Table @@ -50,11 +50,11 @@ public interface InsertQuery : _Query { public interface FromSubquery : InsertQuery, _Query.Params2Table { - public interface Creator { + public interface Constructor { public val targetTable: Table public val selector: _Selectable - public fun createInsertSingleRowWithReturning(creator: Scope): qUE + public fun createInsertSingleRowWithReturning(context: Scope): qUE public interface Scope : _CommonInsertCreatorScope { public val tt: Table @@ -77,9 +77,9 @@ public interface InsertQuery : _Query { } public interface MultipleRows : InsertQuery, _Query.Table2Void { - public interface Creator { + public interface Constructor { public val targetTable: Table - public fun createInsertMultipleRows(creator: Scope): qUE + public fun createInsertMultipleRows(context: Scope): qUE public interface Scope : _CommonInsertCreatorScope { public val tt: Table diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/QueryCreator.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/QueryConstructor.kt similarity index 54% rename from src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/QueryCreator.kt rename to src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/QueryConstructor.kt index d8d5929..a723240 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/QueryCreator.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/QueryConstructor.kt @@ -3,23 +3,23 @@ package ru.landgrafhomyak.db.serdha0.api.queries import ru.landgrafhomyak.db.serdha0.api.misc._Selectable import ru.landgrafhomyak.db.serdha0.api.table.Table -public interface QueryCreator { +public interface QueryConstructor { public fun createQuery(internalQueries: Scope, outQueries: Scope): qUE public interface Scope { - public fun deleteSingleRow(table: Table, creator: DeleteQuery.SingleRow.Creator): DeleteQuery.SingleRow - public fun deleteFromSubquery(table: Table, selector: _Selectable, creator: DeleteQuery.FromSubquery.Creator): DeleteQuery.FromSubquery - public fun deleteMultipleRows(table: Table, creator: DeleteQuery.MultipleRows.Creator): DeleteQuery.MultipleRows + public fun deleteSingleRow(table: Table, creator: DeleteQuery.SingleRow.Constructor): DeleteQuery.SingleRow + public fun deleteFromSubquery(table: Table, selector: _Selectable, creator: DeleteQuery.FromSubquery.Constructor): DeleteQuery.FromSubquery + public fun deleteMultipleRows(table: Table, creator: DeleteQuery.MultipleRows.Constructor): DeleteQuery.MultipleRows - public fun insertSingleRow(table: Table, creator: InsertQuery.SingleRow.Creator): InsertQuery.SingleRow - public fun insertFromSubquery(table: Table, selector: _Selectable, creator: InsertQuery.FromSubquery.Creator): InsertQuery.FromSubquery - public fun insertMultipleRows(table: Table, creator: InsertQuery.MultipleRows.Creator): InsertQuery.MultipleRows + public fun insertSingleRow(table: Table, creator: InsertQuery.SingleRow.Constructor): InsertQuery.SingleRow + public fun insertFromSubquery(table: Table, selector: _Selectable, creator: InsertQuery.FromSubquery.Constructor): InsertQuery.FromSubquery + public fun insertMultipleRows(table: Table, creator: InsertQuery.MultipleRows.Constructor): InsertQuery.MultipleRows - public fun select(table: _Selectable, creator: SelectQuery.FromTable.Creator): SelectQuery.FromTable - public fun selectWithJoin(left: _Selectable, right: _Selectable, creator: SelectQuery.WithJoin.Creator): SelectQuery.WithJoin + public fun select(table: _Selectable, creator: SelectQuery.FromTable.Constructor): SelectQuery.FromTable + public fun selectWithJoin(left: _Selectable, right: _Selectable, creator: SelectQuery.WithJoin.Constructor): SelectQuery.WithJoin - public fun updateSingleRow(table: Table, creator: UpdateQuery.SingleRow.Creator): UpdateQuery.SingleRow - public fun updateFromSubquery(table: Table, selector: _Selectable, creator: UpdateQuery.FromSubquery.Creator): UpdateQuery.FromSubquery - public fun updateMultipleRows(table: Table, creator: UpdateQuery.MultipleRows.Creator): UpdateQuery.MultipleRows + public fun updateSingleRow(table: Table, creator: UpdateQuery.SingleRow.Constructor): UpdateQuery.SingleRow + public fun updateFromSubquery(table: Table, selector: _Selectable, creator: UpdateQuery.FromSubquery.Constructor): UpdateQuery.FromSubquery + public fun updateMultipleRows(table: Table, creator: UpdateQuery.MultipleRows.Constructor): UpdateQuery.MultipleRows } } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/SelectQuery.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/SelectQuery.kt index e38e624..ef90513 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/SelectQuery.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/SelectQuery.kt @@ -52,14 +52,14 @@ public interface SelectQuery : _Query { } public interface WithJoin : SelectQuery, _Query.Params2Table { - public interface Creator : _CommonSelectCreatorScope { + public interface Constructor : _CommonSelectCreatorScope { public val left: _Selectable public val right: _Selectable public val joinType: JoinType public val referenceColumn: Column<*, *, lsqUE> public val targetColumn: Column<*, *, rsqUE> - public fun createSelectWithJoin(creator: Scope): qUE + public fun createSelectWithJoin(context: Scope): qUE public interface Scope { public val lsqUExt: lsqUE @@ -76,10 +76,10 @@ public interface SelectQuery : _Query { } public interface FromTable : SelectQuery, _Query.Params2Table { - public interface Creator { + public interface Constructor { public val table: _Selectable - public fun createSelect(creator: Scope): qUE + public fun createSelect(context: Scope): qUE public interface Scope : _CommonSelectCreatorScope { public val tUExt: tUE diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/UpdateQuery.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/UpdateQuery.kt index 0ccbb85..d049ff5 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/UpdateQuery.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/UpdateQuery.kt @@ -9,9 +9,9 @@ import ru.landgrafhomyak.db.serdha0.api.runtime.InputRow public interface UpdateQuery : _Query { public interface SingleRow : UpdateQuery, _Query.Params2Table { - public interface Creator { + public interface Constructor { public val targetTable: Table - public fun createUpdateSingleWithReturning(table: Table, creator: Scope): qUE + public fun createUpdateSingleWithReturning(context: Scope): qUE public interface Scope { public val tt: Table @@ -36,11 +36,11 @@ public interface UpdateQuery : _Query { } public interface FromSubquery : UpdateQuery, _Query.Params2Table { - public interface Creator { + public interface Constructor { public val targetTable: Table public val selector: _Selectable - public fun createUpdateFromSubqueryWithReturning(creator: Scope): qUE + public fun createUpdateFromSubqueryWithReturning(context: Scope): qUE public interface Scope { public val tt: Table @@ -69,9 +69,9 @@ public interface UpdateQuery : _Query { } public interface MultipleRows : UpdateQuery, _Query.Table2Void { - public interface Creator { + public interface Constructor { public val targetTable: Table - public fun createUpdateMultipleRows(creator: Scope): qUE + public fun createUpdateMultipleRows(context: Scope): qUE public interface Scope { public val tt: Table diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/CreateTableScope.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/CreateTableScope.kt deleted file mode 100644 index b72c5eb..0000000 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/CreateTableScope.kt +++ /dev/null @@ -1,46 +0,0 @@ -package ru.landgrafhomyak.db.serdha0.api.table - -import ru.landgrafhomyak.db.serdha0.api.misc.Column -import ru.landgrafhomyak.db.serdha0.api.misc.DatabaseType - -public interface CreateTableScope { - public val types: DatabaseType.Provider - - public fun > column(name: String, type: DT): Column - - public fun index(name: String, vararg columns: Column<*, *, tUE>): Index - - public fun uniqueIndex(name: String, distinctNulls: Boolean, vararg columns: Column<*, *, tUE>): UniqueIndex - 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>, tUE> - - @Suppress("PropertyName") - public val rowId_uniqueConstraint: UniqueIndex - - public fun selfRowReference( - columnName: String, - onDelete: ForeignRowReference.OnDelete, - ): ForeignRowReference, DatabaseType.ROW_ID> - - public fun > selfRowReference( - columnName: String, - type: DT, - onDelete: ForeignRowReference.OnDelete, - ): ForeignRowReference - - public fun foreignRowReference( - columnName: String, - toTable: Table, - onDelete: ForeignRowReference.OnDelete, - ): ForeignRowReference, DatabaseType.ROW_ID> - - public fun > foreignRowReference( - columnName: String, - type: DT, - toTable: Table, - onDelete: ForeignRowReference.OnDelete, - ): ForeignRowReference -} \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/TableConstructor.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/TableConstructor.kt new file mode 100644 index 0000000..6c64bbc --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/TableConstructor.kt @@ -0,0 +1,52 @@ +package ru.landgrafhomyak.db.serdha0.api.table + +import ru.landgrafhomyak.db.serdha0.api.misc.Column +import ru.landgrafhomyak.db.serdha0.api.misc.DatabaseType + + +public interface TableConstructor { + public fun createTable(context: Scope): TableUserExtension + + + public interface Scope { + public val types: DatabaseType.Provider + + public fun > column(name: String, type: DT): Column + + public fun index(name: String, vararg columns: Column<*, *, tUE>): Index + + public fun uniqueIndex(name: String, distinctNulls: Boolean, vararg columns: Column<*, *, tUE>): UniqueIndex + 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>, tUE> + + @Suppress("PropertyName") + public val rowId_uniqueConstraint: UniqueIndex + + public fun selfRowReference( + columnName: String, + onDelete: ForeignRowReference.OnDelete, + ): ForeignRowReference, DatabaseType.ROW_ID> + + public fun > selfRowReference( + columnName: String, + type: DT, + onDelete: ForeignRowReference.OnDelete, + ): ForeignRowReference + + public fun foreignRowReference( + columnName: String, + toTable: Table, + onDelete: ForeignRowReference.OnDelete, + ): ForeignRowReference, DatabaseType.ROW_ID> + + public fun > foreignRowReference( + columnName: String, + type: DT, + toTable: Table, + onDelete: ForeignRowReference.OnDelete, + ): ForeignRowReference + } +} \ No newline at end of file