From 206441d235966fb1cd0ad6a066b2cbfb1647af61 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 8 May 2020 11:04:54 +0200 Subject: [PATCH] [jOOQ/jOOQ#6256] Added extension methods to Field --- .../main/kotlin/org/jooq/kotlin/Extensions.kt | 241 +++++++++--------- .../kotlin/org/jooq/kotlin/ExtensionsTest.kt | 12 + 2 files changed, 128 insertions(+), 125 deletions(-) diff --git a/jOOQ-kotlin/src/main/kotlin/org/jooq/kotlin/Extensions.kt b/jOOQ-kotlin/src/main/kotlin/org/jooq/kotlin/Extensions.kt index 8a0adfacff..7a3ed19b21 100644 --- a/jOOQ-kotlin/src/main/kotlin/org/jooq/kotlin/Extensions.kt +++ b/jOOQ-kotlin/src/main/kotlin/org/jooq/kotlin/Extensions.kt @@ -1,206 +1,197 @@ package org.jooq.kotlin import org.jooq.* -import org.jooq.conf.Settings -import org.jooq.impl.DSL -import org.jooq.impl.DSL.field -import java.util.* - -@Support -inline fun Result.into(): MutableList { - return this.into(T::class.java) -} +import org.jooq.impl.DSL.* // ---------------------------------------------------------------------------- -// Class reification extensions -// ---------------------------------------------------------------------------- - -// ---------------------------------------------------------------------------- -// Field extensions +// Extensions to make Field a Condition // ---------------------------------------------------------------------------- @Support -inline fun Select>.`as`(alias: String): Field { - return field(this).`as`(alias); -} +inline fun Field.and(other: Condition): Condition = condition(this).and(other) @Support -inline fun Select>.`as`(alias: Name): Field { - return field(this).`as`(alias); -} +inline fun Field.and(other: Field): Condition = condition(this).and(other) @Support -inline fun Select>.`as`(alias: Field<*>): Field { - return field(this).`as`(alias); -} +@PlainSQL +inline fun Field.and(sql: SQL): Condition = condition(this).and(sql) @Support -inline fun Select>.eq(value: T): Condition { - return field(this).eq(value); -} +@PlainSQL +inline fun Field.and(sql: String): Condition = condition(this).and(sql) @Support -inline fun Select>.eq(value: Field): Condition { - return field(this).eq(value); -} +@PlainSQL +inline fun Field.and(sql: String, vararg bindings: Any): Condition = condition(this).and(sql, bindings) @Support -inline fun Select>.equal(value: T): Condition { - return field(this).equal(value); -} +@PlainSQL +inline fun Field.and(sql: String, vararg parts: QueryPart): Condition = condition(this).and(sql, parts) @Support -inline fun Select>.equal(value: Field): Condition { - return field(this).equal(value); -} +inline fun Field.andNot(other: Condition): Condition = condition(this).andNot(other) @Support -inline fun Select>.ne(value: T): Condition { - return field(this).ne(value); -} +inline fun Field.andNot(other: Field): Condition = condition(this).andNot(other) @Support -inline fun Select>.ne(value: Field): Condition { - return field(this).ne(value); -} +inline fun Field.andExists(select: Select<*>): Condition = condition(this).andExists(select) @Support -inline fun Select>.notEqual(value: T): Condition { - return field(this).notEqual(value); -} +inline fun Field.andNotExists(select: Select<*>): Condition = condition(this).andNotExists(select) @Support -inline fun Select>.notEqual(value: Field): Condition { - return field(this).notEqual(value); -} +inline fun Field.or(other: Condition): Condition = condition(this).or(other) @Support -inline fun Select>.gt(value: T): Condition { - return field(this).gt(value); -} +inline fun Field.or(other: Field): Condition = condition(this).or(other) @Support -inline fun Select>.gt(value: Field): Condition { - return field(this).gt(value); -} +@PlainSQL +inline fun Field.or(sql: SQL): Condition = condition(this).or(sql) @Support -inline fun Select>.greaterThan(value: T): Condition { - return field(this).greaterThan(value); -} +@PlainSQL +inline fun Field.or(sql: String): Condition = condition(this).or(sql) @Support -inline fun Select>.greaterThan(value: Field): Condition { - return field(this).greaterThan(value); -} +@PlainSQL +inline fun Field.or(sql: String, vararg bindings: Any): Condition = condition(this).or(sql) @Support -inline fun Select>.ge(value: T): Condition { - return field(this).ge(value); -} +@PlainSQL +inline fun Field.or(sql: String, vararg parts: QueryPart): Condition = condition(this).or(sql, parts) @Support -inline fun Select>.ge(value: Field): Condition { - return field(this).ge(value); -} +inline fun Field.orNot(other: Condition): Condition = condition(this).orNot(other) @Support -inline fun Select>.greaterOrEqual(value: T): Condition { - return field(this).greaterOrEqual(value); -} +inline fun Field.orNot(other: Field): Condition = condition(this).orNot(other) @Support -inline fun Select>.greaterOrEqual(value: Field): Condition { - return field(this).greaterOrEqual(value); -} +inline fun Field.orExists(select: Select<*>): Condition = condition(this).orExists(select) @Support -inline fun Select>.lt(value: T): Condition { - return field(this).lt(value); -} +inline fun Field.orNotExists(select: Select<*>): Condition = condition(this).orNotExists(select) @Support -inline fun Select>.lt(value: Field): Condition { - return field(this).lt(value); -} +inline fun Field.not(): Condition = condition(this).not() + + +// ---------------------------------------------------------------------------- +// Extensions to make Select> a scalar subquery of type Field +// ---------------------------------------------------------------------------- @Support -inline fun Select>.lessThan(value: T): Condition { - return field(this).lessThan(value); -} +inline fun Select>.`as`(alias: String): Field = field(this).`as`(alias) @Support -inline fun Select>.lessThan(value: Field): Condition { - return field(this).lessThan(value); -} +inline fun Select>.`as`(alias: Name): Field = field(this).`as`(alias) @Support -inline fun Select>.le(value: T): Condition { - return field(this).le(value); -} +inline fun Select>.`as`(alias: Field<*>): Field = field(this).`as`(alias) @Support -inline fun Select>.le(value: Field): Condition { - return field(this).le(value); -} +inline fun Select>.eq(value: T): Condition = field(this).eq(value) @Support -inline fun Select>.lessOrEqual(value: T): Condition { - return field(this).lessOrEqual(value); -} +inline fun Select>.eq(value: Field): Condition = field(this).eq(value) @Support -inline fun Select>.lessOrEqual(value: Field): Condition { - return field(this).lessOrEqual(value); -} +inline fun Select>.equal(value: T): Condition = field(this).equal(value) @Support -inline fun Select>.asc(): SortField { - return field(this).asc(); -} +inline fun Select>.equal(value: Field): Condition = field(this).equal(value) @Support -inline fun Select>.desc(): SortField { - return field(this).desc(); -} +inline fun Select>.ne(value: T): Condition = field(this).ne(value) @Support -inline fun Select>.`in`(values: Collection<*>): Condition { - return field(this).`in`(values) -} +inline fun Select>.ne(value: Field): Condition = field(this).ne(value) @Support -inline fun Select>.`in`(values: Result>): Condition { - return field(this).`in`(values) -} +inline fun Select>.notEqual(value: T): Condition = field(this).notEqual(value) @Support -inline fun Select>.`in`(vararg values: T): Condition { - return field(this).`in`(values.asList()) -} +inline fun Select>.notEqual(value: Field): Condition = field(this).notEqual(value) @Support -inline fun Select>.`in`(vararg values: Field<*>): Condition { - return field(this).`in`(values.asList()) -} +inline fun Select>.gt(value: T): Condition = field(this).gt(value) @Support -inline fun Select>.notIn(values: Collection<*>): Condition { - return field(this).notIn(values) -} +inline fun Select>.gt(value: Field): Condition = field(this).gt(value) @Support -inline fun Select>.notIn(values: Result>): Condition { - return field(this).notIn(values) -} +inline fun Select>.greaterThan(value: T): Condition = field(this).greaterThan(value) @Support -inline fun Select>.notIn(vararg values: T): Condition { - return field(this).notIn(values.asList()) -} +inline fun Select>.greaterThan(value: Field): Condition = field(this).greaterThan(value) @Support -inline fun Select>.notIn(vararg values: Field<*>): Condition { - return field(this).notIn(values.asList()) -} +inline fun Select>.ge(value: T): Condition = field(this).ge(value) + +@Support +inline fun Select>.ge(value: Field): Condition = field(this).ge(value) + +@Support +inline fun Select>.greaterOrEqual(value: T): Condition = field(this).greaterOrEqual(value) + +@Support +inline fun Select>.greaterOrEqual(value: Field): Condition = + field(this).greaterOrEqual(value) + +@Support +inline fun Select>.lt(value: T): Condition = field(this).lt(value) + +@Support +inline fun Select>.lt(value: Field): Condition = field(this).lt(value) + +@Support +inline fun Select>.lessThan(value: T): Condition = field(this).lessThan(value) + +@Support +inline fun Select>.lessThan(value: Field): Condition = field(this).lessThan(value) + +@Support +inline fun Select>.le(value: T): Condition = field(this).le(value) + +@Support +inline fun Select>.le(value: Field): Condition = field(this).le(value) + +@Support +inline fun Select>.lessOrEqual(value: T): Condition = field(this).lessOrEqual(value) + +@Support +inline fun Select>.lessOrEqual(value: Field): Condition = field(this).lessOrEqual(value) + +@Support +inline fun Select>.asc(): SortField = field(this).asc() + +@Support +inline fun Select>.desc(): SortField = field(this).desc() + +@Support +inline fun Select>.`in`(values: Collection<*>): Condition = field(this).`in`(values) + +@Support +inline fun Select>.`in`(values: Result>): Condition = field(this).`in`(values) + +@Support +inline fun Select>.`in`(vararg values: T): Condition = field(this).`in`(values.asList()) + +@Support +inline fun Select>.`in`(vararg values: Field<*>): Condition = field(this).`in`(values.asList()) + +@Support +inline fun Select>.notIn(values: Collection<*>): Condition = field(this).notIn(values) + +@Support +inline fun Select>.notIn(values: Result>): Condition = field(this).notIn(values) + +@Support +inline fun Select>.notIn(vararg values: T): Condition = field(this).notIn(values.asList()) + +@Support +inline fun Select>.notIn(vararg values: Field<*>): Condition = field(this).notIn(values.asList()) diff --git a/jOOQ-kotlin/src/test/kotlin/org/jooq/kotlin/ExtensionsTest.kt b/jOOQ-kotlin/src/test/kotlin/org/jooq/kotlin/ExtensionsTest.kt index 694c0d8c11..ed0725207c 100644 --- a/jOOQ-kotlin/src/test/kotlin/org/jooq/kotlin/ExtensionsTest.kt +++ b/jOOQ-kotlin/src/test/kotlin/org/jooq/kotlin/ExtensionsTest.kt @@ -3,6 +3,7 @@ package org.jooq.kotlin import org.jooq.SQLDialect.H2 import org.jooq.impl.DSL import org.jooq.impl.DSL.* +import org.jooq.impl.SQLDataType.BOOLEAN import org.jooq.impl.SQLDataType.INTEGER import org.junit.Assert.assertEquals import org.junit.FixMethodOrder @@ -14,8 +15,19 @@ class ExtensionsTest { val i = field(unquotedName("i"), INTEGER) val j = field(unquotedName("j"), INTEGER) + val b1 = field(unquotedName("b1"), BOOLEAN) + val b2 = field(unquotedName("b2"), BOOLEAN) val dsl = DSL.using(H2) + @Test + fun testBooleanFields() { + assertEquals(condition(b1).and(b2), b1.and(b2)) + assertEquals(condition(b1).andNot(b2), b1.andNot(b2)) + assertEquals(condition(b1).or(b2), b1.or(b2)) + assertEquals(condition(b1).orNot(b2), b1.orNot(b2)) + assertEquals(condition(b1).not(), b1.not()) + } + @Test fun testScalarSubqueries() { assertEquals(field(select(i)).`as`("i"), select(i).`as`("i"))