mirror of
https://github.com/jlengrand/Exposed.git
synced 2026-03-10 08:11:20 +00:00
Add a CustomOperator (#753)
This commit is contained in:
committed by
Andrey.Tarashevskiy
parent
11c237631d
commit
19d50073a5
@@ -23,6 +23,17 @@ open class CustomFunction<T>(val functionName: String, _columnType: IColumnType,
|
||||
}
|
||||
}
|
||||
|
||||
// create a Function corresponding to a SQL binary operator
|
||||
open class CustomOperator<T>(val operatorName: String, _columnType: IColumnType, val expr1: Expression<*>, val expr2: Expression<*>) : Function<T>(_columnType) {
|
||||
override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder {
|
||||
+"("
|
||||
+expr1
|
||||
+" $operatorName "
|
||||
+expr2
|
||||
+")"
|
||||
}
|
||||
}
|
||||
|
||||
class NextVal(val seq: Sequence) : Function<Int>(IntegerColumnType()) {
|
||||
override fun toQueryBuilder(queryBuilder: QueryBuilder) {
|
||||
currentDialect.functionProvider.nextVal(seq, queryBuilder)
|
||||
|
||||
@@ -259,7 +259,21 @@ class FunctionsTests : DatabaseTestsBase() {
|
||||
assertEquals("$initialOp OR $initialOp OR $initialOp OR $initialOp", (initialOp or initialOp or initialOp or initialOp).toString())
|
||||
assertEquals("$initialOp OR $initialOp OR $initialOp OR $initialOp", (initialOp or (initialOp or initialOp) or initialOp).toString())
|
||||
assertEquals("$initialOp OR ($initialOp AND $initialOp) OR $initialOp", (initialOp or (initialOp and initialOp) or initialOp).toString())
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testCustomOperator() {
|
||||
// implement a + operator using CustomOperator
|
||||
infix fun Expression<*>.plus(operand: Int) =
|
||||
CustomOperator<Int>("+", IntegerColumnType(), this, intParam(operand))
|
||||
|
||||
withCitiesAndUsers { cities, users, userData ->
|
||||
userData
|
||||
.select { (userData.value plus 15).eq(35) }
|
||||
.forEach {
|
||||
assertEquals(it[userData.value], 20)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user