Adapting database types to interop with an underlying driver
This commit is contained in:
parent
4bd4a1813b
commit
f90fce937a
@ -1,66 +1,60 @@
|
|||||||
package ru.landgrafhomyak.db.sql_skeleton_0.api.misc
|
package ru.landgrafhomyak.db.sql_skeleton_0.api.misc
|
||||||
|
|
||||||
import kotlin.jvm.JvmField
|
|
||||||
import kotlin.jvm.JvmName
|
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.RowId
|
||||||
import ru.landgrafhomyak.db.sql_skeleton_0.api.table.Table
|
import ru.landgrafhomyak.db.sql_skeleton_0.api.table.Table
|
||||||
|
|
||||||
@Suppress("ClassName", "RemoveRedundantQualifierName")
|
public interface DatabaseType<
|
||||||
public interface DatabaseType<@Suppress("unused") RT> {
|
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<RUNTIME_TYPE?, DESCRIPTOR_SCOPE, NATIVE_DESCRIPTOR, GETTER_SCOPE, SETTER_SCOPE>
|
||||||
|
|
||||||
@Suppress("INAPPLICABLE_JVM_NAME")
|
@Suppress("INAPPLICABLE_JVM_NAME")
|
||||||
@get:JvmName("getName")
|
@get:JvmName("getName")
|
||||||
public val name: String
|
public val name: String
|
||||||
|
|
||||||
public abstract class _VirtualType<RT, wRT, wDT : DatabaseType<wRT>>(
|
|
||||||
@JvmField
|
|
||||||
public val wraps: wDT,
|
|
||||||
@JvmField
|
|
||||||
public val allowValuesCaching: Boolean = true
|
|
||||||
) : DatabaseType<RT> {
|
|
||||||
@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<RT : Any, @Suppress("unused") DT : DatabaseType<RT>> : DatabaseType<RT?>
|
|
||||||
|
|
||||||
public interface ROW_ID<ttUE : Any> : DatabaseType<RowId<ttUE>>
|
|
||||||
|
|
||||||
public interface BOOLEAN : DatabaseType<Boolean>
|
|
||||||
|
|
||||||
@OptIn(ExperimentalUnsignedTypes::class)
|
|
||||||
public interface BINARY_DATA : DatabaseType<UByteArray> {
|
|
||||||
@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 <tUE : Any> ROW_ID(table: Table<tUE, *>): DatabaseType.ROW_ID<tUE>
|
|
||||||
|
|
||||||
|
public interface DefaultTypes<
|
||||||
|
in DESCRIPTOR_SCOPE : Any,
|
||||||
|
out NATIVE_DESCRIPTOR : Any,
|
||||||
|
in GETTER_SCOPE : Any,
|
||||||
|
in SETTER_SCOPE : Any
|
||||||
|
> {
|
||||||
@Suppress("INAPPLICABLE_JVM_NAME", "PropertyName")
|
@Suppress("INAPPLICABLE_JVM_NAME", "PropertyName")
|
||||||
@get:JvmName("BOOLEAN")
|
@get:JvmName("BOOLEAN")
|
||||||
public val BOOLEAN: BOOLEAN
|
public val BOOLEAN: DatabaseType<Boolean, DESCRIPTOR_SCOPE, NATIVE_DESCRIPTOR, GETTER_SCOPE, SETTER_SCOPE>
|
||||||
|
|
||||||
|
@OptIn(ExperimentalUnsignedTypes::class)
|
||||||
@Suppress("INAPPLICABLE_JVM_NAME", "PropertyName")
|
@Suppress("INAPPLICABLE_JVM_NAME", "PropertyName")
|
||||||
@get:JvmName("BINARY_DATA")
|
@get:JvmName("BINARY_DATA")
|
||||||
public val BINARY_DATA: BINARY_DATA
|
public val BINARY_DATA: DatabaseType<UByteArray, DESCRIPTOR_SCOPE, NATIVE_DESCRIPTOR, GETTER_SCOPE, SETTER_SCOPE>
|
||||||
|
|
||||||
public fun BINARY_DATA(size: UInt, isFixedSize: Boolean): BINARY_DATA
|
@OptIn(ExperimentalUnsignedTypes::class)
|
||||||
|
public fun BINARY_DATA(size: UInt, isFixedSize: Boolean): DatabaseType<UByteArray, DESCRIPTOR_SCOPE, NATIVE_DESCRIPTOR, GETTER_SCOPE, SETTER_SCOPE>
|
||||||
|
|
||||||
public fun <RT : Any, DT : DatabaseType<RT>> nullableOf(notNull: DT): Nullable<RT, DT>
|
public fun <RUNTIME_TYPE, DATABASE_TYPE : DatabaseType<RUNTIME_TYPE, @UnsafeVariance DESCRIPTOR_SCOPE, @UnsafeVariance NATIVE_DESCRIPTOR, @UnsafeVariance GETTER_SCOPE, @UnsafeVariance SETTER_SCOPE>> custom(
|
||||||
|
resolver: DialectResolver<
|
||||||
|
DialectKey<*, @UnsafeVariance DESCRIPTOR_SCOPE, @UnsafeVariance NATIVE_DESCRIPTOR, @UnsafeVariance GETTER_SCOPE, @UnsafeVariance SETTER_SCOPE>,
|
||||||
|
DATABASE_TYPE
|
||||||
|
>
|
||||||
|
): DATABASE_TYPE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
> {
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
package ru.landgrafhomyak.db.sql_skeleton_0.api.raw
|
||||||
|
|
||||||
|
public interface DialectResolver<in K: DialectKey<*, *, *, *, *>, out R: Any> {
|
||||||
|
public fun resolveSqlDialect(key: K): R?
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user