From 81f1094c9d2f4ed48dbd741dd524840c8a1498ed Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 3 Mar 2022 09:32:47 +0100 Subject: [PATCH] [jOOQ/jOOQ#13188] Added support for the ltree type --- .../java/org/jooq/meta/AbstractDatabase.java | 13 +++ .../bindings/AbstractInetBinding.java | 78 ------------------ .../bindings/AbstractRangeBinding.java | 79 ------------------- .../bindings/BigDecimalRangeBinding.java | 2 +- .../extensions/bindings/CidrBinding.java | 2 +- .../extensions/bindings/CitextBinding.java | 30 +------ .../extensions/bindings/DateRangeBinding.java | 2 +- .../extensions/bindings/HstoreBinding.java | 32 +------- .../extensions/bindings/InetBinding.java | 2 +- .../bindings/IntegerRangeBinding.java | 2 +- .../bindings/LocalDateRangeBinding.java | 2 +- .../bindings/LocalDateTimeRangeBinding.java | 2 +- .../extensions/bindings/LongRangeBinding.java | 2 +- .../bindings/OffsetDateTimeRangeBinding.java | 2 +- .../bindings/TimestampRangeBinding.java | 2 +- .../types/AbstractDiscreteRange.java | 3 + 16 files changed, 28 insertions(+), 227 deletions(-) delete mode 100644 jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/AbstractInetBinding.java delete mode 100644 jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/AbstractRangeBinding.java diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java index cb7233cfc2..21c4f468b7 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java @@ -1949,6 +1949,19 @@ public abstract class AbstractDatabase implements Database { .withPriority(Integer.MIN_VALUE) ); + getConfiguredForcedTypes().add(new ForcedType() + .withUserType("org.jooq.postgres.extensions.types.Ltree") + .withBinding("org.jooq.postgres.extensions.bindings.LtreeBinding") + .withIncludeTypes("ltree") + .withPriority(Integer.MIN_VALUE) + ); + getConfiguredForcedTypes().add(new ForcedType() + .withUserType("org.jooq.postgres.extensions.types.Ltree[]") + .withBinding("org.jooq.postgres.extensions.bindings.LtreeArrayBinding") + .withIncludeTypes("_ltree") + .withPriority(Integer.MIN_VALUE) + ); + getConfiguredForcedTypes().add(new ForcedType() .withUserType("org.jooq.postgres.extensions.types.Hstore") .withBinding("org.jooq.postgres.extensions.bindings.HstoreBinding") diff --git a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/AbstractInetBinding.java b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/AbstractInetBinding.java deleted file mode 100644 index 9e2c9e4d42..0000000000 --- a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/AbstractInetBinding.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Other licenses: - * ----------------------------------------------------------------------------- - * Commercial licenses for this work are available. These replace the above - * ASL 2.0 and offer limited warranties, support, maintenance, and commercial - * database integrations. - * - * For more information, please visit: http://www.jooq.org/licenses - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - */ -package org.jooq.postgres.extensions.bindings; - -import java.sql.SQLException; -import java.sql.Types; - -import org.jooq.BindingGetResultSetContext; -import org.jooq.BindingGetStatementContext; -import org.jooq.BindingRegisterContext; -import org.jooq.BindingSetStatementContext; -import org.jooq.postgres.extensions.types.AbstractInet; - -/** - * A binding for the PostgreSQL inet or cidr data - * type. - * - * @author Lukas Eder - */ -abstract class AbstractInetBinding extends AbstractPostgresBinding { - - @Override - public void register(final BindingRegisterContext ctx) throws SQLException { - ctx.statement().registerOutParameter(ctx.index(), Types.VARCHAR); - } - - @Override - public void set(final BindingSetStatementContext ctx) throws SQLException { - Object value = ctx.convert(converter()).value(); - - ctx.statement().setString(ctx.index(), value == null ? null : "" + value); - } - - @Override - public void get(final BindingGetResultSetContext ctx) throws SQLException { - ctx.convert(converter()).value(ctx.resultSet().getString(ctx.index())); - } - - @Override - public void get(final BindingGetStatementContext ctx) throws SQLException { - ctx.convert(converter()).value(ctx.statement().getString(ctx.index())); - } -} diff --git a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/AbstractRangeBinding.java b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/AbstractRangeBinding.java deleted file mode 100644 index 7df5a861f1..0000000000 --- a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/AbstractRangeBinding.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Other licenses: - * ----------------------------------------------------------------------------- - * Commercial licenses for this work are available. These replace the above - * ASL 2.0 and offer limited warranties, support, maintenance, and commercial - * database integrations. - * - * For more information, please visit: http://www.jooq.org/licenses - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - */ -package org.jooq.postgres.extensions.bindings; - -import java.sql.SQLException; -import java.sql.Types; - -import org.jooq.BindingGetResultSetContext; -import org.jooq.BindingGetStatementContext; -import org.jooq.BindingRegisterContext; -import org.jooq.BindingSetStatementContext; -import org.jooq.postgres.extensions.types.Range; - -/** - * A binding for the PostgreSQL range data types. - * - * @author Lukas Eder - */ -abstract class AbstractRangeBinding> extends AbstractPostgresBinding { - - // TODO: This looks just like the AbstractInetBinding. Perhaps rename? - - @Override - public void register(final BindingRegisterContext ctx) throws SQLException { - ctx.statement().registerOutParameter(ctx.index(), Types.VARCHAR); - } - - @Override - public void set(final BindingSetStatementContext ctx) throws SQLException { - Object value = ctx.convert(converter()).value(); - - ctx.statement().setString(ctx.index(), value == null ? null : "" + value); - } - - @Override - public void get(final BindingGetResultSetContext ctx) throws SQLException { - ctx.convert(converter()).value(ctx.resultSet().getString(ctx.index())); - } - - @Override - public void get(final BindingGetStatementContext ctx) throws SQLException { - ctx.convert(converter()).value(ctx.statement().getString(ctx.index())); - } -} diff --git a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/BigDecimalRangeBinding.java b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/BigDecimalRangeBinding.java index 08e56e3b73..314322d087 100644 --- a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/BigDecimalRangeBinding.java +++ b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/BigDecimalRangeBinding.java @@ -46,7 +46,7 @@ import org.jooq.postgres.extensions.types.BigDecimalRange; * * @author Lukas Eder */ -public class BigDecimalRangeBinding extends AbstractRangeBinding { +public class BigDecimalRangeBinding extends AbstractPostgresVarcharBinding { private static final Converter CONVERTER = new BigDecimalRangeConverter(); diff --git a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/CidrBinding.java b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/CidrBinding.java index c935f528ee..79b2658995 100644 --- a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/CidrBinding.java +++ b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/CidrBinding.java @@ -46,7 +46,7 @@ import org.jooq.postgres.extensions.types.Cidr; * * @author Lukas Eder */ -public class CidrBinding extends AbstractInetBinding { +public class CidrBinding extends AbstractPostgresVarcharBinding { private static final Converter CONVERTER = new CidrConverter(); diff --git a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/CitextBinding.java b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/CitextBinding.java index bfecc12c7f..aabf2ef67e 100644 --- a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/CitextBinding.java +++ b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/CitextBinding.java @@ -37,13 +37,6 @@ */ package org.jooq.postgres.extensions.bindings; -import java.sql.SQLException; -import java.sql.Types; - -import org.jooq.BindingGetResultSetContext; -import org.jooq.BindingGetStatementContext; -import org.jooq.BindingRegisterContext; -import org.jooq.BindingSetStatementContext; import org.jooq.Converter; import org.jooq.postgres.extensions.converters.CitextConverter; @@ -52,7 +45,7 @@ import org.jooq.postgres.extensions.converters.CitextConverter; * * @author Lukas Eder */ -public class CitextBinding extends AbstractPostgresBinding { +public class CitextBinding extends AbstractPostgresVarcharBinding { private static final Converter CONVERTER = new CitextConverter(); @@ -65,25 +58,4 @@ public class CitextBinding extends AbstractPostgresBinding { protected String castType() { return "citext"; } - - @Override - public void register(final BindingRegisterContext ctx) throws SQLException { - ctx.statement().registerOutParameter(ctx.index(), Types.VARCHAR); - } - - @Override - public void set(final BindingSetStatementContext ctx) throws SQLException { - ctx.statement().setString(ctx.index(), ctx.value()); - } - - - @Override - public void get(final BindingGetResultSetContext ctx) throws SQLException { - ctx.value(ctx.resultSet().getString(ctx.index())); - } - - @Override - public void get(final BindingGetStatementContext ctx) throws SQLException { - ctx.value(ctx.statement().getString(ctx.index())); - } } diff --git a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/DateRangeBinding.java b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/DateRangeBinding.java index 78d1c4d149..0b4c8b8a5d 100644 --- a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/DateRangeBinding.java +++ b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/DateRangeBinding.java @@ -46,7 +46,7 @@ import org.jooq.postgres.extensions.types.DateRange; * * @author Lukas Eder */ -public class DateRangeBinding extends AbstractRangeBinding { +public class DateRangeBinding extends AbstractPostgresVarcharBinding { private static final Converter CONVERTER = new DateRangeConverter(); diff --git a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/HstoreBinding.java b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/HstoreBinding.java index 8df3afb173..9f827a3782 100644 --- a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/HstoreBinding.java +++ b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/HstoreBinding.java @@ -37,13 +37,6 @@ */ package org.jooq.postgres.extensions.bindings; -import java.sql.SQLException; -import java.sql.Types; - -import org.jooq.BindingGetResultSetContext; -import org.jooq.BindingGetStatementContext; -import org.jooq.BindingRegisterContext; -import org.jooq.BindingSetStatementContext; import org.jooq.Converter; import org.jooq.postgres.extensions.converters.HstoreConverter; import org.jooq.postgres.extensions.types.Hstore; @@ -54,7 +47,7 @@ import org.jooq.postgres.extensions.types.Hstore; * @author Dmitry Baev * @author Lukas Eder */ -public class HstoreBinding extends AbstractPostgresBinding { +public class HstoreBinding extends AbstractPostgresVarcharBinding { private static final Converter CONVERTER = new HstoreConverter(); @@ -67,27 +60,4 @@ public class HstoreBinding extends AbstractPostgresBinding { protected String castType() { return "hstore"; } - - @Override - public void register(final BindingRegisterContext ctx) throws SQLException { - ctx.statement().registerOutParameter(ctx.index(), Types.VARCHAR); - } - - @Override - public void set(final BindingSetStatementContext ctx) throws SQLException { - Object value = ctx.convert(converter()).value(); - - ctx.statement().setString(ctx.index(), value == null ? null : "" + value); - } - - - @Override - public void get(final BindingGetResultSetContext ctx) throws SQLException { - ctx.convert(converter()).value(ctx.resultSet().getString(ctx.index())); - } - - @Override - public void get(final BindingGetStatementContext ctx) throws SQLException { - ctx.convert(converter()).value(ctx.statement().getString(ctx.index())); - } } diff --git a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/InetBinding.java b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/InetBinding.java index 40ef8445e2..818a8e6221 100644 --- a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/InetBinding.java +++ b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/InetBinding.java @@ -46,7 +46,7 @@ import org.jooq.postgres.extensions.types.Inet; * * @author Lukas Eder */ -public class InetBinding extends AbstractInetBinding { +public class InetBinding extends AbstractPostgresVarcharBinding { private static final Converter CONVERTER = new InetConverter(); diff --git a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/IntegerRangeBinding.java b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/IntegerRangeBinding.java index 775d9a7243..3da51ce9b6 100644 --- a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/IntegerRangeBinding.java +++ b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/IntegerRangeBinding.java @@ -46,7 +46,7 @@ import org.jooq.postgres.extensions.types.IntegerRange; * * @author Lukas Eder */ -public class IntegerRangeBinding extends AbstractRangeBinding { +public class IntegerRangeBinding extends AbstractPostgresVarcharBinding { private static final Converter CONVERTER = new IntegerRangeConverter(); diff --git a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/LocalDateRangeBinding.java b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/LocalDateRangeBinding.java index 49796e8607..08b692e1e6 100644 --- a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/LocalDateRangeBinding.java +++ b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/LocalDateRangeBinding.java @@ -46,7 +46,7 @@ import org.jooq.postgres.extensions.types.LocalDateRange; * * @author Lukas Eder */ -public class LocalDateRangeBinding extends AbstractRangeBinding { +public class LocalDateRangeBinding extends AbstractPostgresVarcharBinding { private static final Converter CONVERTER = new LocalDateRangeConverter(); diff --git a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/LocalDateTimeRangeBinding.java b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/LocalDateTimeRangeBinding.java index a0b0e23286..3c2b818751 100644 --- a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/LocalDateTimeRangeBinding.java +++ b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/LocalDateTimeRangeBinding.java @@ -46,7 +46,7 @@ import org.jooq.postgres.extensions.types.LocalDateTimeRange; * * @author Lukas Eder */ -public class LocalDateTimeRangeBinding extends AbstractRangeBinding { +public class LocalDateTimeRangeBinding extends AbstractPostgresVarcharBinding { private static final Converter CONVERTER = new LocalDateTimeRangeConverter(); diff --git a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/LongRangeBinding.java b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/LongRangeBinding.java index 818b1487ff..30a8d6bbee 100644 --- a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/LongRangeBinding.java +++ b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/LongRangeBinding.java @@ -46,7 +46,7 @@ import org.jooq.postgres.extensions.types.LongRange; * * @author Lukas Eder */ -public class LongRangeBinding extends AbstractRangeBinding { +public class LongRangeBinding extends AbstractPostgresVarcharBinding { private static final Converter CONVERTER = new LongRangeConverter(); diff --git a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/OffsetDateTimeRangeBinding.java b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/OffsetDateTimeRangeBinding.java index 07a2e96e4c..2926fab30d 100644 --- a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/OffsetDateTimeRangeBinding.java +++ b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/OffsetDateTimeRangeBinding.java @@ -46,7 +46,7 @@ import org.jooq.postgres.extensions.types.OffsetDateTimeRange; * * @author Lukas Eder */ -public class OffsetDateTimeRangeBinding extends AbstractRangeBinding { +public class OffsetDateTimeRangeBinding extends AbstractPostgresVarcharBinding { private static final Converter CONVERTER = new OffsetDateTimeRangeConverter(); diff --git a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/TimestampRangeBinding.java b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/TimestampRangeBinding.java index 938de9a39c..2cf1c6b563 100644 --- a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/TimestampRangeBinding.java +++ b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/bindings/TimestampRangeBinding.java @@ -46,7 +46,7 @@ import org.jooq.postgres.extensions.types.TimestampRange; * * @author Lukas Eder */ -public class TimestampRangeBinding extends AbstractRangeBinding { +public class TimestampRangeBinding extends AbstractPostgresVarcharBinding { private static final Converter CONVERTER = new TimestampRangeConverter(); diff --git a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/types/AbstractDiscreteRange.java b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/types/AbstractDiscreteRange.java index 8c5bc89084..f0e364dd75 100644 --- a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/types/AbstractDiscreteRange.java +++ b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/types/AbstractDiscreteRange.java @@ -37,6 +37,9 @@ */ package org.jooq.postgres.extensions.types; +import static org.jooq.impl.DSL.lower; +import static org.jooq.impl.DSL.upper; + import java.util.Objects; import org.jooq.exception.DataTypeException;