
org.ufoss.kotysa.WhereClause.kt Maven / Gradle / Ivy
/*
* This is free and unencumbered software released into the public domain, following
*/
package org.ufoss.kotysa
import org.ufoss.kotysa.postgresql.Tsquery
public enum class Operation {
EQ, NOT_EQ, CONTAINS, STARTS_WITH, ENDS_WITH, SUP, INF, SUP_OR_EQ, INF_OR_EQ, IN, EXISTS,
// Postgresql specific tsquery
TO_TSQUERY, PLAINTO_TSQUERY, PHRASETO_TSQUERY, WEBSEARCH_TO_TSQUERY, APPLY_ON
}
internal sealed interface WhereClause {
val operation: Operation
}
internal sealed interface WhereClauseWithColumn : WhereClause {
val column: Column
}
internal sealed interface WhereClauseWithAlias : WhereClause {
val alias: QueryAlias
}
internal sealed interface WhereClauseValue {
val value: Any?
}
internal sealed interface WhereClauseColumn {
val otherColumn: Column<*, *>
}
internal sealed interface WhereClauseSubQuery {
val dsl: SqlClientSubQuery.SingleScope.() -> SqlClientSubQuery.Return
}
internal class WhereClauseValueWithColumn internal constructor(
override val column: Column,
override val operation: Operation,
override val value: Any?,
) : WhereClauseWithColumn, WhereClauseValue
internal class WhereClauseValueWithAlias internal constructor(
override val alias: QueryAlias,
override val operation: Operation,
override val value: Any?,
) : WhereClauseWithAlias, WhereClauseValue
internal class WhereClauseColumnWithColumn internal constructor(
override val column: Column,
override val operation: Operation,
override val otherColumn: Column<*, *>,
) : WhereClauseWithColumn, WhereClauseColumn
internal class WhereClauseColumnWithAlias internal constructor(
override val alias: QueryAlias,
override val operation: Operation,
override val otherColumn: Column<*, *>,
) : WhereClauseWithAlias, WhereClauseColumn
internal class WhereClauseExists internal constructor(
internal val dsl: SqlClientSubQuery.SingleScope.() -> SqlClientSubQuery.Return,
) : WhereClause {
override val operation: Operation = Operation.EXISTS
}
internal class WhereClauseSubQueryWithColumn internal constructor(
override val column: Column,
override val operation: Operation,
override val dsl: SqlClientSubQuery.SingleScope.() -> SqlClientSubQuery.Return,
) : WhereClauseWithColumn, WhereClauseSubQuery
internal class WhereClauseSubQueryWithAlias internal constructor(
override val alias: QueryAlias,
override val operation: Operation,
override val dsl: SqlClientSubQuery.SingleScope.() -> SqlClientSubQuery.Return,
) : WhereClauseWithAlias, WhereClauseSubQuery
internal class WhereClauseTsqueryWithColumn internal constructor(
override val column: Column,
internal val tsquery: Tsquery,
) : WhereClauseWithColumn {
override val operation = Operation.APPLY_ON
}
public class WhereClauseWithType internal constructor(
internal val whereClause: WhereClause,
internal val type: WhereClauseType
)
public enum class WhereClauseType {
WHERE, AND, OR
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy