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 f1fa1ca..c3b578c 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 @@ -1,11 +1,13 @@ package ru.landgrafhomyak.serdha.api.v0.ddl.module import ru.landgrafhomyak.serdha.api.v0.ddl.table.Table -import ru.landgrafhomyak.serdha.api.v0.dml.Delete -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.Update +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 @@ -40,7 +42,7 @@ public interface CreateModuleScope { * @see CreateModuleScope.createTransactionScopeTemporaryTable * @see UpgradeModuleScope.TableUpgrade */ - public fun createTable(creator: ru.landgrafhomyak.serdha.api.v0.ddl.table.TableCreator<TableUserExtension>): TableUserExtension + public fun createTable(creator: ru.landgrafhomyak.serdha.api.v0.ddl.table.CreateTableScope<TableUserExtension>): TableUserExtension } /** @@ -101,7 +103,7 @@ public interface CreateModuleScope { * * @see CreateModuleScope.createSelectQuery */ - public fun createSelect(creator: ru.landgrafhomyak.serdha.api.v0.dml.SelectCreator<QueryUserWrapper>): QueryUserWrapper + public fun createSelect(creator: ru.landgrafhomyak.serdha.api.v0.dml.CreateSelectQueryScope<QueryUserWrapper>): QueryUserWrapper } /** @@ -115,7 +117,7 @@ public interface CreateModuleScope { * * @see CreateModuleScope.createTemporarySelectQuery */ - public fun <QueryUserWrapper : Any> createSelectQuery(initializer: SelectQueryCreator<QueryUserWrapper>): Select<QueryUserWrapper> + public fun <QueryUserWrapper : Any> createSelectQuery(initializer: SelectQueryCreator<QueryUserWrapper>): SelectQuery<QueryUserWrapper> /** * Creates 'SELECT' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpgrade]. @@ -129,7 +131,7 @@ public interface CreateModuleScope { * * @see CreateModuleScope.createSelectQuery */ - public fun <QueryUserWrapper : Any> createTemporarySelectQuery(initializer: SelectQueryCreator<QueryUserWrapper>): Select<QueryUserWrapper> + public fun <QueryUserWrapper : Any> createTemporarySelectQuery(initializer: SelectQueryCreator<QueryUserWrapper>): SelectQuery<QueryUserWrapper> /** * Functional interface for creating 'INSERT ... VALUES' query. @@ -139,9 +141,9 @@ public interface CreateModuleScope { * @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.createInsertParamsQuery + * @see CreateModuleScope.createInsertQuery */ - public interface InsertParamsQueryCreator<TableUserExtension : Any, QueryUserWrapper : Any> { + public interface InsertQueryCreator<TableUserExtension : Any, QueryUserWrapper : Any> { /** * Scope method that uses [creator] to create a query. * @@ -149,9 +151,9 @@ public interface CreateModuleScope { * @param creator Object with descriptor providers and factories. * @return User's object with query-related descriptors for future access. * - * @see CreateModuleScope.createInsertParamsQuery + * @see CreateModuleScope.createInsertQuery */ - public fun createInsert(table: Table<TableUserExtension, *>, creator: InsertCreator.InsertParams<TableUserExtension, QueryUserWrapper>): QueryUserWrapper + public fun createInsert(table: Table<TableUserExtension, *>, creator: CreateInsertQueryScope<TableUserExtension, QueryUserWrapper>): QueryUserWrapper } /** @@ -164,13 +166,13 @@ public interface CreateModuleScope { * @param initializer Query-related descriptors initializer. * @return Query descriptor. * - * @see CreateModuleScope.createTemporaryInsertParamsQuery + * @see CreateModuleScope.createTemporaryInsertQuery */ - public fun <TableUserExtension : Any, QueryUserWrapper : Any> createInsertParamsQuery(table: Table<TableUserExtension, *>, initializer: InsertParamsQueryCreator<TableUserExtension, QueryUserWrapper>): Insert.InsertParams<QueryUserWrapper> + public fun <TableUserExtension : Any, QueryUserWrapper : Any> createInsertQuery(table: Table<TableUserExtension, *>, initializer: InsertQueryCreator<TableUserExtension, QueryUserWrapper>): InsertQuery<QueryUserWrapper> /** * 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. + * 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. * @@ -179,9 +181,9 @@ public interface CreateModuleScope { * @param initializer Query-related descriptors initializer. * @return Query descriptor. * - * @see CreateModuleScope.createInsertParamsQuery + * @see CreateModuleScope.createInsertQuery */ - public fun <TableUserExtension : Any, QueryUserWrapper : Any> createTemporaryInsertParamsQuery(table: Table<TableUserExtension, *>, initializer: InsertParamsQueryCreator<TableUserExtension, QueryUserWrapper>): Insert.InsertParams<QueryUserWrapper> + public fun <TableUserExtension : Any, QueryUserWrapper : Any> createTemporaryInsertQuery(table: Table<TableUserExtension, *>, initializer: InsertQueryCreator<TableUserExtension, QueryUserWrapper>): InsertQuery<QueryUserWrapper> /** * Functional interface for creating 'INSERT ... FROM' query. @@ -191,9 +193,9 @@ public interface CreateModuleScope { * @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.createInsertFromQueryQuery + * @see CreateModuleScope.createCopyQuery */ - public interface InsertFromQueryQueryCreator<TableUserExtension : Any, QueryUserWrapper : Any> { + public interface CopyQueryCreator<TableUserExtension : Any, QueryUserWrapper : Any> { /** * Scope method that uses [creator] to create a query. * @@ -201,9 +203,9 @@ public interface CreateModuleScope { * @param creator Object with descriptor providers and factories. * @return User's object with query-related descriptors for future access. * - * @see CreateModuleScope.createInsertFromQueryQuery + * @see CreateModuleScope.createCopyQuery */ - public fun createInsert(table: Table<TableUserExtension, *>, creator: InsertCreator.InsertFromQuery<TableUserExtension, QueryUserWrapper>): QueryUserWrapper + public fun createCopy(table: Table<TableUserExtension, *>, creator: CreateCopyQueryScope<TableUserExtension, QueryUserWrapper>): QueryUserWrapper } /** @@ -215,13 +217,13 @@ public interface CreateModuleScope { * @param initializer Query-related descriptors initializer. * @return Query descriptor. * - * @see CreateModuleScope.createTemporaryInsertFromQueryQuery + * @see CreateModuleScope.createTemporaryCopyQuery */ - public fun <TableUserExtension : Any, QueryUserWrapper : Any> createInsertFromQueryQuery(table: Table<TableUserExtension, *>, initializer: InsertFromQueryQueryCreator<TableUserExtension, QueryUserWrapper>): Insert.InsertFromQuery<QueryUserWrapper> + public fun <TableUserExtension : Any, QueryUserWrapper : Any> createCopyQuery(table: Table<TableUserExtension, *>, initializer: CopyQueryCreator<TableUserExtension, QueryUserWrapper>): CopyQuery<QueryUserWrapper> /** * 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. + * 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. * @@ -229,9 +231,9 @@ public interface CreateModuleScope { * @param initializer Query-related descriptors initializer. * @return Query descriptor. * - * @see CreateModuleScope.createInsertFromQueryQuery + * @see CreateModuleScope.createCopyQuery */ - public fun <TableUserExtension : Any, QueryUserWrapper : Any> createTemporaryInsertFromQueryQuery(table: Table<TableUserExtension, *>, initializer: InsertFromQueryQueryCreator<TableUserExtension, QueryUserWrapper>): Insert.InsertFromQuery<QueryUserWrapper> + public fun <TableUserExtension : Any, QueryUserWrapper : Any> createTemporaryCopyQuery(table: Table<TableUserExtension, *>, initializer: CopyQueryCreator<TableUserExtension, QueryUserWrapper>): CopyQuery<QueryUserWrapper> /** * Functional interface for creating 'UPDATE' query. @@ -253,7 +255,7 @@ public interface CreateModuleScope { * * @see CreateModuleScope.createUpdateQuery */ - public fun createUpdate(table: Table<TableUserExtension, *>, creator: ru.landgrafhomyak.serdha.api.v0.dml.UpdateCreator<TableUserExtension, QueryUserWrapper>): QueryUserWrapper + public fun createUpdate(table: Table<TableUserExtension, *>, creator: ru.landgrafhomyak.serdha.api.v0.dml.CreateUpdateQueryScope<TableUserExtension, QueryUserWrapper>): QueryUserWrapper } /** @@ -267,7 +269,7 @@ public interface CreateModuleScope { * * @see CreateModuleScope.createTemporaryUpdateQuery */ - public fun <TableUserExtension : Any, QueryUserWrapper : Any> createUpdateQuery(table: Table<TableUserExtension, *>, initializer: UpdateQueryCreator<TableUserExtension, QueryUserWrapper>): Update<QueryUserWrapper> + public fun <TableUserExtension : Any, QueryUserWrapper : Any> createUpdateQuery(table: Table<TableUserExtension, *>, initializer: UpdateQueryCreator<TableUserExtension, QueryUserWrapper>): UpdateQuery<QueryUserWrapper> /** * Creates 'UPDATE' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpgrade]. @@ -281,7 +283,7 @@ public interface CreateModuleScope { * * @see CreateModuleScope.createUpdateQuery */ - public fun <TableUserExtension : Any, QueryUserWrapper : Any> createTemporaryUpdateQuery(table: Table<TableUserExtension, *>, initializer: UpdateQueryCreator<TableUserExtension, QueryUserWrapper>): Update<QueryUserWrapper> + public fun <TableUserExtension : Any, QueryUserWrapper : Any> createTemporaryUpdateQuery(table: Table<TableUserExtension, *>, initializer: UpdateQueryCreator<TableUserExtension, QueryUserWrapper>): UpdateQuery<QueryUserWrapper> /** * Functional interface for creating 'DELETE' query. @@ -303,7 +305,7 @@ public interface CreateModuleScope { * * @see CreateModuleScope.createDeleteQuery */ - public fun createDelete(table: Table<TableUserExtension, *>, creator: ru.landgrafhomyak.serdha.api.v0.dml.DeleteCreator<TableUserExtension, QueryUserWrapper>): QueryUserWrapper + public fun createDelete(table: Table<TableUserExtension, *>, creator: ru.landgrafhomyak.serdha.api.v0.dml.CreateDeleteQueryScope<TableUserExtension, QueryUserWrapper>): QueryUserWrapper } /** @@ -317,7 +319,7 @@ public interface CreateModuleScope { * * @see CreateModuleScope.createTemporaryDeleteQuery */ - public fun <TableUserExtension : Any, QueryUserWrapper : Any> createDeleteQuery(table: Table<TableUserExtension, *>, initializer: DeleteQueryCreator<TableUserExtension, QueryUserWrapper>): Delete<QueryUserWrapper> + public fun <TableUserExtension : Any, QueryUserWrapper : Any> createDeleteQuery(table: Table<TableUserExtension, *>, initializer: DeleteQueryCreator<TableUserExtension, QueryUserWrapper>): DeleteQuery<QueryUserWrapper> /** * Creates 'DELETE' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpgrade]. @@ -331,7 +333,7 @@ public interface CreateModuleScope { * * @see CreateModuleScope.createDeleteQuery */ - public fun <TableUserExtension : Any, QueryUserWrapper : Any> createTemporaryDeleteQuery(table: Table<TableUserExtension, *>, initializer: DeleteQueryCreator<TableUserExtension, QueryUserWrapper>): Delete<QueryUserWrapper> + public fun <TableUserExtension : Any, QueryUserWrapper : Any> createTemporaryDeleteQuery(table: Table<TableUserExtension, *>, initializer: DeleteQueryCreator<TableUserExtension, QueryUserWrapper>): DeleteQuery<QueryUserWrapper> /** * Replaces [specified namespace][rootNs] with schema provided by [template]. diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/Column.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/Column.kt index 808ff8b..049271a 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/Column.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/Column.kt @@ -1,9 +1,13 @@ package ru.landgrafhomyak.serdha.api.v0.ddl.table -public interface Column<RuntimeType, DatabaseType : ColumnType<RuntimeType>, TableUserExtension : Any> { +import kotlin.jvm.JvmName +import ru.landgrafhomyak.serdha.api.v0.ddl.types.DatabaseType +import ru.landgrafhomyak.serdha.api.v0.dml.SelectedTable + +public interface Column<RT, DT : DatabaseType<RT>, TableUserExtension : Any> { public val name: String - public val type: DatabaseType + public val type: DT public val table: Table<TableUserExtension, *> } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/CreateTableScope.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/CreateTableScope.kt new file mode 100644 index 0000000..3dc898b --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/CreateTableScope.kt @@ -0,0 +1,38 @@ +package ru.landgrafhomyak.serdha.api.v0.ddl.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 + +public interface CreateTableScope<TableUserExtension : Any> { + public val expressionBuilder: Expression.Builder<TableUserExtension> + + public val types: DatabaseTypesProvider + + public fun <RT, DT : DatabaseType<RT>> column(name: String, type: DT): Column<RT, DT, TableUserExtension> + + public fun index(name: String, vararg columns: Column<*, *, TableUserExtension>): Index<TableUserExtension> + + public fun uniqueIndex(name: String, distinctNulls: Boolean, vararg columns: Column<*, *, TableUserExtension>): UniqueIndex<TableUserExtension> + public fun checkConstraint(name: String, constraint: Expression<Boolean, DatabaseType.BOOLEAN, TableUserExtension>): CheckConstraint<TableUserExtension> + public fun <RT : Any, DT : DatabaseType<RT>> defaultValue(c: Column<RT, DT, TableUserExtension>, expr: Expression<RT, DT, TableUserExtension>): DefaultConstraint<RT, DT, TableUserExtension> + + @Suppress("PropertyName") + public val rowId_column: Column<RowId<TableUserExtension>, DatabaseType<RowId<TableUserExtension>>, TableUserExtension> + + @Suppress("PropertyName") + public val rowId_uniqueConstraint: UniqueIndex<TableUserExtension> + + public fun <TargetTableUserWrapper : Any> selfRowReference( + onDelete: ForeignRowReference.OnDeleteAction, + toColumn: Column<RowId<TargetTableUserWrapper>, DatabaseType.ROW_ID<TargetTableUserWrapper>, TargetTableUserWrapper>, + ): ForeignRowReference<TableUserExtension, TableUserExtension> + + public fun <TargetTableUserWrapper : Any> foreignRowReference( + fromColumn: Column<RowId<TargetTableUserWrapper>, DatabaseType.ROW_ID<TargetTableUserWrapper>, TableUserExtension>, + toTable: Table<TargetTableUserWrapper, *>, + toColumn: Column<RowId<TargetTableUserWrapper>, DatabaseType.ROW_ID<TargetTableUserWrapper>, TargetTableUserWrapper>, + onDelete: ForeignRowReference.OnDeleteAction, + ): ForeignRowReference<TableUserExtension, TargetTableUserWrapper> +} \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/TableCreator.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/TableCreator.kt deleted file mode 100644 index b52f120..0000000 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/table/TableCreator.kt +++ /dev/null @@ -1,35 +0,0 @@ -package ru.landgrafhomyak.serdha.api.v0.ddl.table - -import ru.landgrafhomyak.serdha.api.v0.Expression - -public interface TableCreator<TableUserExtension : Any> { - public val expressionBuilder: Expression.Builder<TableUserExtension> - - public val types: ColumnType.Builder - - public fun <RuntimeType, DatabaseType : ColumnType<RuntimeType>> column(name: String, type: DatabaseType): Column<RuntimeType, DatabaseType, TableUserExtension> - - public fun index(name: String, vararg columns: Column<*, *, TableUserExtension>): Index<TableUserExtension> - - public fun uniqueIndex(name: String, distinctNulls: Boolean, vararg columns: Column<*, *, TableUserExtension>): UniqueIndex<TableUserExtension> - public fun checkConstraint(name: String, constraint: Expression<Boolean, ColumnType.BOOLEAN, TableUserExtension>): CheckConstraint<TableUserExtension> - public fun <RuntimeType : Any, DatabaseType : ColumnType<RuntimeType>> defaultValue(c: Column<RuntimeType, DatabaseType, TableUserExtension>, expr: Expression<RuntimeType, DatabaseType, TableUserExtension>): DefaultConstraint<RuntimeType, DatabaseType, TableUserExtension> - - @Suppress("PropertyName") - public val rowId_column: Column<RowId<TableUserExtension>, ColumnType<RowId<TableUserExtension>>, TableUserExtension> - - @Suppress("PropertyName") - public val rowId_uniqueConstraint: UniqueIndex<TableUserExtension> - - public fun <TargetTableUserWrapper : Any> selfRowReference( - onDelete: ForeignRowReference.OnDeleteAction, - toColumn: Column<RowId<TargetTableUserWrapper>, ColumnType.ROW_ID<TargetTableUserWrapper>, TargetTableUserWrapper>, - ): ForeignRowReference<TableUserExtension, TableUserExtension> - - public fun <TargetTableUserWrapper : Any> foreignRowReference( - fromColumn: Column<RowId<TargetTableUserWrapper>, ColumnType.ROW_ID<TargetTableUserWrapper>, TableUserExtension>, - toTable: Table<TargetTableUserWrapper, *>, - toColumn: Column<RowId<TargetTableUserWrapper>, ColumnType.ROW_ID<TargetTableUserWrapper>, TargetTableUserWrapper>, - onDelete: ForeignRowReference.OnDeleteAction, - ): ForeignRowReference<TableUserExtension, TargetTableUserWrapper> -} \ No newline at end of file