Optimization hint on virtual types and rewrote JoinType class structure

This commit is contained in:
Andrew Golovashevich 2025-02-22 17:30:46 +03:00
parent 36ced5d74d
commit 020d32cedc
2 changed files with 27 additions and 15 deletions

View File

@ -17,8 +17,10 @@ public interface DatabaseType<@Suppress("unused") RT> {
public val name: String
public abstract class _VirtualType<RT, wRT, wDT : DatabaseType<wRT>>(
@Suppress("MemberVisibilityCanBePrivate") @JvmField
public val wraps: wDT
@JvmField
public val wraps: wDT,
@JvmField
public val allowValuesCaching: Boolean = true
) : DatabaseType<RT> {
@Suppress("FunctionName")
public abstract fun _unwrap(w: wRT): RT

View File

@ -15,19 +15,29 @@ public interface SelectQuery<out qUE : Any> : _Query<qUE> {
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<out qUE : Any> : _Query<qUE> {
public val left: _Selectable<lsqUE>
public val right: _Selectable<rsqUE>
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, lsqUE, rsqUE>): qUE