From 4118a5bba4b12d2bc5ea8ebc8b4ab3a3cd9cd48f Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 3 Mar 2022 08:27:42 +0100 Subject: [PATCH] [jOOQ/jOOQ#2968] Added a Range interface This change makes AbstractRange private, which is much more aligned with jOOQ's general API design --- .../bindings/AbstractRangeBinding.java | 4 +- .../converters/AbstractRangeConverter.java | 4 +- .../extensions/types/AbstractRange.java | 11 +-- .../jooq/postgres/extensions/types/Range.java | 76 +++++++++++++++++++ 4 files changed, 86 insertions(+), 9 deletions(-) create mode 100644 jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/types/Range.java 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 index 4f64466d14..7df5a861f1 100644 --- 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 @@ -44,14 +44,14 @@ import org.jooq.BindingGetResultSetContext; import org.jooq.BindingGetStatementContext; import org.jooq.BindingRegisterContext; import org.jooq.BindingSetStatementContext; -import org.jooq.postgres.extensions.types.AbstractRange; +import org.jooq.postgres.extensions.types.Range; /** * A binding for the PostgreSQL range data types. * * @author Lukas Eder */ -abstract class AbstractRangeBinding> extends AbstractPostgresBinding { +abstract class AbstractRangeBinding> extends AbstractPostgresBinding { // TODO: This looks just like the AbstractInetBinding. Perhaps rename? diff --git a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/converters/AbstractRangeConverter.java b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/converters/AbstractRangeConverter.java index c3750d04da..c14a3db434 100644 --- a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/converters/AbstractRangeConverter.java +++ b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/converters/AbstractRangeConverter.java @@ -40,14 +40,14 @@ package org.jooq.postgres.extensions.converters; import static org.jooq.tools.StringUtils.isBlank; import org.jooq.impl.AbstractConverter; -import org.jooq.postgres.extensions.types.AbstractRange; +import org.jooq.postgres.extensions.types.Range; /** * A converter for {@link AbstractRange} types. * * @author Lukas Eder */ -abstract class AbstractRangeConverter> extends AbstractConverter { +abstract class AbstractRangeConverter> extends AbstractConverter { public AbstractRangeConverter(Class toType) { super(Object.class, toType); diff --git a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/types/AbstractRange.java b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/types/AbstractRange.java index 74b2a1dae7..dfc03acf07 100644 --- a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/types/AbstractRange.java +++ b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/types/AbstractRange.java @@ -37,7 +37,6 @@ */ package org.jooq.postgres.extensions.types; -import java.io.Serializable; import java.util.Objects; import org.jetbrains.annotations.Nullable; @@ -47,7 +46,7 @@ import org.jetbrains.annotations.Nullable; * * @author Lukas Eder */ -public abstract class AbstractRange implements Serializable { +abstract class AbstractRange implements Range { private final T lower; private final T upper; @@ -63,27 +62,29 @@ public abstract class AbstractRange implements Serializable { this.upperIncluding = upper != null && upperIncluding; } - /** - * In PostgreSQL, a [x,x) range is considered "empty". - */ + @Override public /* non-final */ boolean isEmpty() { return lowerIncluding && !upperIncluding && Objects.equals(lower, upper); } + @Override @Nullable public final T lower() { return lower; } + @Override public final boolean lowerIncluding() { return lowerIncluding; } + @Override @Nullable public final T upper() { return upper; } + @Override public final boolean upperIncluding() { return upperIncluding; } diff --git a/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/types/Range.java b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/types/Range.java new file mode 100644 index 0000000000..461d2b0973 --- /dev/null +++ b/jOOQ-postgres-extensions/src/main/java/org/jooq/postgres/extensions/types/Range.java @@ -0,0 +1,76 @@ +/* + * 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.types; + +import java.io.Serializable; + +import org.jetbrains.annotations.Nullable; + +/** + * A RANGE type. + */ +public interface Range extends Serializable { + + /** + * In PostgreSQL, a [x,x) range is considered "empty". + */ + boolean isEmpty(); + + /** + * The lower bound of the range. + */ + @Nullable + T lower(); + + /** + * Whether the {@link #lower()} bound of the range is included in the range. + */ + boolean lowerIncluding(); + + /** + * The upper bound of the range. + */ + @Nullable + T upper(); + + /** + * Whether the {@link #upper()} bound of the range is included in the range. + */ + boolean upperIncluding(); + +}