Kabbura
10/31/2018, 12:25 PMSELECT * FROM some WHERE id in (SELECT id2 FROM other)
as follows
kotlin
infix fun<T> ExpressionWithColumnType<T>.inSub(query: Query): Op<Boolean> = InSubOrNotInSubOp(this, query, isInSub = true)
infix fun<T> ExpressionWithColumnType<T>.notInSub(query: Query): Op<Boolean> = InSubOrNotInSubOp(this, query, isInSub = false)
class InSubOrNotInSubOp<T>(val expr: ExpressionWithColumnType<T>, val query: Query, val isInSub: Boolean = true): Op<Boolean>() {
override fun toSQL(queryBuilder: QueryBuilder): String = buildString {
append(expr.toSQL(queryBuilder))
when {
isInSub -> append(" IN (")
else -> append(" NOT IN (")
}
append(query.prepareSQL(queryBuilder))
append(")")
}
}