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;