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 val name: String
public abstract class _VirtualType<RT, wRT, wDT : DatabaseType<wRT>>( public abstract class _VirtualType<RT, wRT, wDT : DatabaseType<wRT>>(
@Suppress("MemberVisibilityCanBePrivate") @JvmField @JvmField
public val wraps: wDT public val wraps: wDT,
@JvmField
public val allowValuesCaching: Boolean = true
) : DatabaseType<RT> { ) : DatabaseType<RT> {
@Suppress("FunctionName") @Suppress("FunctionName")
public abstract fun _unwrap(w: wRT): RT public abstract fun _unwrap(w: wRT): RT

View File

@ -15,19 +15,29 @@ public interface SelectQuery<out qUE : Any> : _Query<qUE> {
ASC, DESC ASC, DESC
} }
public class JoinType( public abstract class JoinType {
public val leftNull: LeftNull, public class LeftJoin(
public val join: Join public val leftNull: Null,
) { public val behaviour: Behaviour
public enum class LeftNull { ) : JoinType() {
NULL_NOT_EXPECTED, @Suppress("ClassName")
AS_ID, SKIP, JOIN_TO_NULL 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 { public object CrossJoin : JoinType()
LEFT_TO_FIRST_RIGHT, LEFT_FOR_EACH_RIGHT, LEFT_FOR_EACH_RIGHT_OR_TO_NULL,
EACH_LEFT_TO_EACH_RIGHT
}
} }
@Suppress("ClassName") @Suppress("ClassName")
@ -79,8 +89,8 @@ public interface SelectQuery<out qUE : Any> : _Query<qUE> {
public val left: _Selectable<lsqUE> public val left: _Selectable<lsqUE>
public val right: _Selectable<rsqUE> public val right: _Selectable<rsqUE>
public val joinType: JoinType public val joinType: JoinType
public val referenceColumn: Column<*, *, lsqUE> public val leftColumnToJoin: Column<*, *, lsqUE>
public val targetColumn: Column<*, *, rsqUE> public val rightColumnToJoin: Column<*, *, rsqUE>
public fun createSelectWithJoin(context: Scope<qUE, lsqUE, rsqUE>): qUE public fun createSelectWithJoin(context: Scope<qUE, lsqUE, rsqUE>): qUE