From 020d32cedc2e64c0b8a9d962c2fdf38f5f1ab894 Mon Sep 17 00:00:00 2001 From: Andrew Golovashevich Date: Sat, 22 Feb 2025 17:30:46 +0300 Subject: [PATCH] Optimization hint on virtual types and rewrote JoinType class structure --- .../db/serdha0/api/misc/DatabaseType.kt | 6 ++-- .../db/serdha0/api/queries/SelectQuery.kt | 36 ++++++++++++------- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/misc/DatabaseType.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/misc/DatabaseType.kt index 82aa610..6c69f69 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/misc/DatabaseType.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/misc/DatabaseType.kt @@ -17,8 +17,10 @@ public interface DatabaseType<@Suppress("unused") RT> { public val name: String public abstract class _VirtualType>( - @Suppress("MemberVisibilityCanBePrivate") @JvmField - public val wraps: wDT + @JvmField + public val wraps: wDT, + @JvmField + public val allowValuesCaching: Boolean = true ) : DatabaseType { @Suppress("FunctionName") public abstract fun _unwrap(w: wRT): RT 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 49c7e01..16ebe1c 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 @@ -15,19 +15,29 @@ public interface SelectQuery : _Query { ASC, DESC } - public class JoinType( - public val leftNull: LeftNull, - public val join: Join - ) { - public enum class LeftNull { - NULL_NOT_EXPECTED, - AS_ID, SKIP, JOIN_TO_NULL + public abstract class JoinType { + public class LeftJoin( + public val leftNull: Null, + public val behaviour: Behaviour + ) : JoinType() { + @Suppress("ClassName") + public abstract class Null { + public object NULL_NOT_EXPECTED : Null() + public object AS_ID : Null() + public object SKIP : Null() + public object JOIN_TO_NULL : Null() + } + + @Suppress("ClassName") + public abstract class Behaviour { + public object LEFT_TO_UNIQUE_RIGHT : Behaviour() + public object LEFT_TO_UNIQUE_RIGHT_OR_TO_NULL : Behaviour() + public object LEFT_FOR_EACH_RIGHT : Behaviour() + public object LEFT_FOR_EACH_RIGHT_OR_TO_NULL : Behaviour() + } } - public enum class Join { - LEFT_TO_FIRST_RIGHT, LEFT_FOR_EACH_RIGHT, LEFT_FOR_EACH_RIGHT_OR_TO_NULL, - EACH_LEFT_TO_EACH_RIGHT - } + public object CrossJoin : JoinType() } @Suppress("ClassName") @@ -79,8 +89,8 @@ public interface SelectQuery : _Query { public val left: _Selectable public val right: _Selectable public val joinType: JoinType - public val referenceColumn: Column<*, *, lsqUE> - public val targetColumn: Column<*, *, rsqUE> + public val leftColumnToJoin: Column<*, *, lsqUE> + public val rightColumnToJoin: Column<*, *, rsqUE> public fun createSelectWithJoin(context: Scope): qUE