diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/misc/DatabaseType.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/misc/DatabaseType.kt index 0a8f448..b10792b 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/misc/DatabaseType.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/misc/DatabaseType.kt @@ -1,66 +1,60 @@ package ru.landgrafhomyak.db.sql_skeleton_0.api.misc -import kotlin.jvm.JvmField import kotlin.jvm.JvmName +import ru.landgrafhomyak.db.sql_skeleton_0.api.raw.DialectKey +import ru.landgrafhomyak.db.sql_skeleton_0.api.raw.DialectResolver import ru.landgrafhomyak.db.sql_skeleton_0.api.table.RowId import ru.landgrafhomyak.db.sql_skeleton_0.api.table.Table -@Suppress("ClassName", "RemoveRedundantQualifierName") -public interface DatabaseType<@Suppress("unused") RT> { +public interface DatabaseType< + RUNTIME_TYPE : Any?, + in DESCRIPTOR_SCOPE : Any, + out NATIVE_DESCRIPTOR : Any, + in GETTER_SCOPE : Any, + in SETTER_SCOPE : Any + > { + public enum class RowIdSize { + VERY_SMALL, + SMALL, + NORMAL + } + + public fun _nativeDescriptor(scope: DESCRIPTOR_SCOPE): NATIVE_DESCRIPTOR + + public fun _get(scope: GETTER_SCOPE, columnIndex: Int): RUNTIME_TYPE + + public fun _set(scope: SETTER_SCOPE, paramIndex: Int, value: RUNTIME_TYPE) + + public val nullable: DatabaseType + @Suppress("INAPPLICABLE_JVM_NAME") @get:JvmName("getName") public val name: String - public abstract class _VirtualType>( - @JvmField - public val wraps: wDT, - @JvmField - public val allowValuesCaching: Boolean = true - ) : DatabaseType { - @Suppress("FunctionName") - public abstract fun _unwrap(w: wRT): RT - - @Suppress("FunctionName") - public abstract fun _wrap(w: RT): wRT - - @Suppress("FunctionName") - public abstract fun _equals(l: RT, r: RT): Boolean - - @Suppress("FunctionName") - public abstract fun _compare(l: RT, r: RT): Int - } - - public interface Nullable> : DatabaseType - - public interface ROW_ID : DatabaseType> - - public interface BOOLEAN : DatabaseType - - @OptIn(ExperimentalUnsignedTypes::class) - public interface BINARY_DATA : DatabaseType { - @Suppress("INAPPLICABLE_JVM_NAME") - @get:JvmName("getMaxSizeOrNull") - public val maxSizeOrNull: UInt? - - - @Suppress("INAPPLICABLE_JVM_NAME") - @get:JvmName("isFixedSize") - public val isFixedSize: Boolean - } - - public interface Provider { - public fun ROW_ID(table: Table): DatabaseType.ROW_ID + public interface DefaultTypes< + in DESCRIPTOR_SCOPE : Any, + out NATIVE_DESCRIPTOR : Any, + in GETTER_SCOPE : Any, + in SETTER_SCOPE : Any + > { @Suppress("INAPPLICABLE_JVM_NAME", "PropertyName") @get:JvmName("BOOLEAN") - public val BOOLEAN: BOOLEAN + public val BOOLEAN: DatabaseType + @OptIn(ExperimentalUnsignedTypes::class) @Suppress("INAPPLICABLE_JVM_NAME", "PropertyName") @get:JvmName("BINARY_DATA") - public val BINARY_DATA: BINARY_DATA + public val BINARY_DATA: DatabaseType - public fun BINARY_DATA(size: UInt, isFixedSize: Boolean): BINARY_DATA + @OptIn(ExperimentalUnsignedTypes::class) + public fun BINARY_DATA(size: UInt, isFixedSize: Boolean): DatabaseType - public fun > nullableOf(notNull: DT): Nullable + public fun > custom( + resolver: DialectResolver< + DialectKey<*, @UnsafeVariance DESCRIPTOR_SCOPE, @UnsafeVariance NATIVE_DESCRIPTOR, @UnsafeVariance GETTER_SCOPE, @UnsafeVariance SETTER_SCOPE>, + DATABASE_TYPE + > + ): DATABASE_TYPE } } diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/raw/DialectKey.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/raw/DialectKey.kt new file mode 100644 index 0000000..2c102bb --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/raw/DialectKey.kt @@ -0,0 +1,10 @@ +package ru.landgrafhomyak.db.sql_skeleton_0.api.raw + +public interface DialectKey< + RAW_STATEMENT, + TYPE_SCOPE, + TYPE_DESCRIPTOR , + GETTER_SCOPE, + SETTER_SCOPE + > { +} \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/raw/DialectResolver.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/raw/DialectResolver.kt new file mode 100644 index 0000000..9d2d209 --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/raw/DialectResolver.kt @@ -0,0 +1,5 @@ +package ru.landgrafhomyak.db.sql_skeleton_0.api.raw + +public interface DialectResolver, out R: Any> { + public fun resolveSqlDialect(key: K): R? +} \ No newline at end of file