diff --git a/client/trino-client/src/main/java/io/trino/client/ClientStandardTypes.java b/client/trino-client/src/main/java/io/trino/client/ClientStandardTypes.java index 9ed3851fd534..79458874bad9 100644 --- a/client/trino-client/src/main/java/io/trino/client/ClientStandardTypes.java +++ b/client/trino-client/src/main/java/io/trino/client/ClientStandardTypes.java @@ -13,6 +13,7 @@ */ package io.trino.client; +// Should have the same types as in the StandardTypes public final class ClientStandardTypes { public static final String BIGINT = "bigint"; @@ -26,6 +27,8 @@ public final class ClientStandardTypes public static final String DOUBLE = "double"; public static final String HYPER_LOG_LOG = "HyperLogLog"; public static final String QDIGEST = "qdigest"; + public static final String TDIGEST = "tdigest"; + public static final String SET_DIGEST = "SetDigest"; public static final String P4_HYPER_LOG_LOG = "P4HyperLogLog"; public static final String INTERVAL_DAY_TO_SECOND = "interval day to second"; public static final String INTERVAL_YEAR_TO_MONTH = "interval year to month"; @@ -40,11 +43,14 @@ public final class ClientStandardTypes public static final String ARRAY = "array"; public static final String MAP = "map"; public static final String JSON = "json"; + public static final String JSON_2016 = "json2016"; public static final String IPADDRESS = "ipaddress"; public static final String UUID = "uuid"; public static final String GEOMETRY = "Geometry"; public static final String SPHERICAL_GEOGRAPHY = "SphericalGeography"; public static final String BING_TILE = "BingTile"; + public static final String KDB_TREE = "KdbTree"; + public static final String COLOR = "color"; private ClientStandardTypes() {} } diff --git a/client/trino-client/src/main/java/io/trino/client/JsonDecodingUtils.java b/client/trino-client/src/main/java/io/trino/client/JsonDecodingUtils.java index cdba01c9ff97..793573debae2 100644 --- a/client/trino-client/src/main/java/io/trino/client/JsonDecodingUtils.java +++ b/client/trino-client/src/main/java/io/trino/client/JsonDecodingUtils.java @@ -15,6 +15,7 @@ import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.ImmutableList; import java.io.IOException; @@ -31,20 +32,27 @@ import static com.google.common.base.Verify.verify; import static io.trino.client.ClientStandardTypes.ARRAY; import static io.trino.client.ClientStandardTypes.BIGINT; +import static io.trino.client.ClientStandardTypes.BING_TILE; import static io.trino.client.ClientStandardTypes.BOOLEAN; import static io.trino.client.ClientStandardTypes.CHAR; +import static io.trino.client.ClientStandardTypes.COLOR; import static io.trino.client.ClientStandardTypes.DATE; import static io.trino.client.ClientStandardTypes.DECIMAL; import static io.trino.client.ClientStandardTypes.DOUBLE; import static io.trino.client.ClientStandardTypes.GEOMETRY; +import static io.trino.client.ClientStandardTypes.HYPER_LOG_LOG; import static io.trino.client.ClientStandardTypes.INTEGER; import static io.trino.client.ClientStandardTypes.INTERVAL_DAY_TO_SECOND; import static io.trino.client.ClientStandardTypes.INTERVAL_YEAR_TO_MONTH; import static io.trino.client.ClientStandardTypes.IPADDRESS; import static io.trino.client.ClientStandardTypes.JSON; +import static io.trino.client.ClientStandardTypes.KDB_TREE; import static io.trino.client.ClientStandardTypes.MAP; +import static io.trino.client.ClientStandardTypes.P4_HYPER_LOG_LOG; +import static io.trino.client.ClientStandardTypes.QDIGEST; import static io.trino.client.ClientStandardTypes.REAL; import static io.trino.client.ClientStandardTypes.ROW; +import static io.trino.client.ClientStandardTypes.SET_DIGEST; import static io.trino.client.ClientStandardTypes.SMALLINT; import static io.trino.client.ClientStandardTypes.SPHERICAL_GEOGRAPHY; import static io.trino.client.ClientStandardTypes.TIME; @@ -53,6 +61,7 @@ import static io.trino.client.ClientStandardTypes.TIME_WITH_TIME_ZONE; import static io.trino.client.ClientStandardTypes.TINYINT; import static io.trino.client.ClientStandardTypes.UUID; +import static io.trino.client.ClientStandardTypes.VARBINARY; import static io.trino.client.ClientStandardTypes.VARCHAR; import static java.lang.String.format; import static java.util.Collections.unmodifiableList; @@ -72,6 +81,7 @@ private JsonDecodingUtils() {} private static final BooleanDecoder BOOLEAN_DECODER = new BooleanDecoder(); private static final StringDecoder STRING_DECODER = new StringDecoder(); private static final Base64Decoder BASE_64_DECODER = new Base64Decoder(); + private static final ObjectDecoder OBJECT_DECODER = new ObjectDecoder(); public static TypeDecoder[] createTypeDecoders(List columns) { @@ -127,7 +137,16 @@ private static TypeDecoder createTypeDecoder(ClientTypeSignature signature) case CHAR: case GEOMETRY: case SPHERICAL_GEOGRAPHY: + case COLOR: return STRING_DECODER; + case KDB_TREE: + case BING_TILE: + return OBJECT_DECODER; + case QDIGEST: + case P4_HYPER_LOG_LOG: + case HYPER_LOG_LOG: + case SET_DIGEST: + case VARBINARY: default: return BASE_64_DECODER; } @@ -387,6 +406,7 @@ private Object decodeKey(String value) case CHAR: case GEOMETRY: case SPHERICAL_GEOGRAPHY: + case BING_TILE: return value; default: return Base64.getDecoder().decode(value); @@ -447,6 +467,19 @@ public Object decode(JsonParser parser) } } + private static class ObjectDecoder + implements TypeDecoder + { + private final ObjectMapper objectMapper = new ObjectMapper(); + + @Override + public Object decode(JsonParser parser) + throws IOException + { + return objectMapper.readValue(parser, Object.class); + } + } + private static IllegalTokenException illegalToken(JsonParser parser) { throw new IllegalTokenException(parser); diff --git a/core/trino-main/src/main/java/io/trino/type/ColorType.java b/core/trino-main/src/main/java/io/trino/type/ColorType.java index cac180fbbc6d..c321d775dbc0 100644 --- a/core/trino-main/src/main/java/io/trino/type/ColorType.java +++ b/core/trino-main/src/main/java/io/trino/type/ColorType.java @@ -17,6 +17,7 @@ import io.trino.spi.block.Block; import io.trino.spi.connector.ConnectorSession; import io.trino.spi.type.AbstractIntType; +import io.trino.spi.type.StandardTypes; import io.trino.spi.type.TypeSignature; import java.util.HexFormat; @@ -26,7 +27,7 @@ public class ColorType { private static final HexFormat HEX_FORMAT = HexFormat.of(); public static final ColorType COLOR = new ColorType(); - public static final String NAME = "color"; + public static final String NAME = StandardTypes.COLOR; private ColorType() { diff --git a/core/trino-main/src/main/java/io/trino/type/TypeCoercion.java b/core/trino-main/src/main/java/io/trino/type/TypeCoercion.java index df9ee32897fa..5bccb3ba38e1 100644 --- a/core/trino-main/src/main/java/io/trino/type/TypeCoercion.java +++ b/core/trino-main/src/main/java/io/trino/type/TypeCoercion.java @@ -28,7 +28,6 @@ import io.trino.spi.type.TypeSignature; import io.trino.spi.type.TypeSignatureParameter; import io.trino.spi.type.VarcharType; -import io.trino.type.setdigest.SetDigestType; import java.util.List; import java.util.Optional; @@ -342,7 +341,7 @@ public Optional coerceTypeBase(Type sourceType, String resultTypeBase) StandardTypes.TIMESTAMP, StandardTypes.TIMESTAMP_WITH_TIME_ZONE, StandardTypes.HYPER_LOG_LOG, - SetDigestType.NAME, + StandardTypes.SET_DIGEST, StandardTypes.P4_HYPER_LOG_LOG, StandardTypes.JSON, StandardTypes.INTERVAL_YEAR_TO_MONTH, diff --git a/core/trino-main/src/main/java/io/trino/type/setdigest/BuildSetDigestAggregation.java b/core/trino-main/src/main/java/io/trino/type/setdigest/BuildSetDigestAggregation.java index ecade41a55b5..13b85c1d8492 100644 --- a/core/trino-main/src/main/java/io/trino/type/setdigest/BuildSetDigestAggregation.java +++ b/core/trino-main/src/main/java/io/trino/type/setdigest/BuildSetDigestAggregation.java @@ -23,6 +23,7 @@ import io.trino.spi.function.OutputFunction; import io.trino.spi.function.SqlType; import io.trino.spi.function.TypeParameter; +import io.trino.spi.type.StandardTypes; @AggregationFunction("make_set_digest") public final class BuildSetDigestAggregation @@ -64,7 +65,7 @@ public static void combine(SetDigestState state, SetDigestState otherState) } } - @OutputFunction(SetDigestType.NAME) + @OutputFunction(StandardTypes.SET_DIGEST) public static void output(SetDigestState state, BlockBuilder out) { SERIALIZER.serialize(state, out); diff --git a/core/trino-main/src/main/java/io/trino/type/setdigest/MergeSetDigestAggregation.java b/core/trino-main/src/main/java/io/trino/type/setdigest/MergeSetDigestAggregation.java index 7476d869431d..ef65960a6e6d 100644 --- a/core/trino-main/src/main/java/io/trino/type/setdigest/MergeSetDigestAggregation.java +++ b/core/trino-main/src/main/java/io/trino/type/setdigest/MergeSetDigestAggregation.java @@ -21,6 +21,7 @@ import io.trino.spi.function.InputFunction; import io.trino.spi.function.OutputFunction; import io.trino.spi.function.SqlType; +import io.trino.spi.type.StandardTypes; import static io.trino.type.setdigest.SetDigestType.SET_DIGEST; @@ -30,7 +31,7 @@ public final class MergeSetDigestAggregation private MergeSetDigestAggregation() {} @InputFunction - public static void input(SetDigestState state, @SqlType(SetDigestType.NAME) Slice value) + public static void input(SetDigestState state, @SqlType(StandardTypes.SET_DIGEST) Slice value) { SetDigest instance = SetDigest.newInstance(value); merge(state, instance); @@ -52,7 +53,7 @@ private static void merge(SetDigestState state, SetDigest instance) } } - @OutputFunction(SetDigestType.NAME) + @OutputFunction(StandardTypes.SET_DIGEST) public static void output(SetDigestState state, BlockBuilder out) { if (state.getDigest() == null) { diff --git a/core/trino-main/src/main/java/io/trino/type/setdigest/SetDigestFunctions.java b/core/trino-main/src/main/java/io/trino/type/setdigest/SetDigestFunctions.java index 48b5667d43a6..88c64ca22c6f 100644 --- a/core/trino-main/src/main/java/io/trino/type/setdigest/SetDigestFunctions.java +++ b/core/trino-main/src/main/java/io/trino/type/setdigest/SetDigestFunctions.java @@ -34,14 +34,14 @@ private SetDigestFunctions() {} @ScalarFunction @SqlType(StandardTypes.BIGINT) - public static long cardinality(@SqlType(SetDigestType.NAME) Slice digest) + public static long cardinality(@SqlType(StandardTypes.SET_DIGEST) Slice digest) { return SetDigest.newInstance(digest).cardinality(); } @ScalarFunction @SqlType(StandardTypes.BIGINT) - public static long intersectionCardinality(@SqlType(SetDigestType.NAME) Slice slice1, @SqlType(SetDigestType.NAME) Slice slice2) + public static long intersectionCardinality(@SqlType(StandardTypes.SET_DIGEST) Slice slice1, @SqlType(StandardTypes.SET_DIGEST) Slice slice2) { SetDigest digest1 = SetDigest.newInstance(slice1); SetDigest digest2 = SetDigest.newInstance(slice2); @@ -65,7 +65,7 @@ public static long intersectionCardinality(@SqlType(SetDigestType.NAME) Slice sl @ScalarFunction @SqlType(StandardTypes.DOUBLE) - public static double jaccardIndex(@SqlType(SetDigestType.NAME) Slice slice1, @SqlType(SetDigestType.NAME) Slice slice2) + public static double jaccardIndex(@SqlType(StandardTypes.SET_DIGEST) Slice slice1, @SqlType(StandardTypes.SET_DIGEST) Slice slice2) { SetDigest digest1 = SetDigest.newInstance(slice1); SetDigest digest2 = SetDigest.newInstance(slice2); @@ -75,7 +75,7 @@ public static double jaccardIndex(@SqlType(SetDigestType.NAME) Slice slice1, @Sq @ScalarFunction @SqlType("map(bigint,smallint)") - public static SqlMap hashCounts(@TypeParameter("map(bigint,smallint)") Type mapType, @SqlType(SetDigestType.NAME) Slice slice) + public static SqlMap hashCounts(@TypeParameter("map(bigint,smallint)") Type mapType, @SqlType(StandardTypes.SET_DIGEST) Slice slice) { SetDigest digest = SetDigest.newInstance(slice); return buildMapValue( diff --git a/core/trino-main/src/main/java/io/trino/type/setdigest/SetDigestOperators.java b/core/trino-main/src/main/java/io/trino/type/setdigest/SetDigestOperators.java index 3464aae18c57..cdcb5d8b5e01 100644 --- a/core/trino-main/src/main/java/io/trino/type/setdigest/SetDigestOperators.java +++ b/core/trino-main/src/main/java/io/trino/type/setdigest/SetDigestOperators.java @@ -31,13 +31,13 @@ private SetDigestOperators() {} @ScalarOperator(CAST) @SqlType(StandardTypes.VARBINARY) - public static Slice castToBinary(@SqlType(SetDigestType.NAME) Slice slice) + public static Slice castToBinary(@SqlType(StandardTypes.SET_DIGEST) Slice slice) { return slice; } @ScalarOperator(CAST) - @SqlType(SetDigestType.NAME) + @SqlType(StandardTypes.SET_DIGEST) public static Slice castFromBinary(@SqlType(StandardTypes.VARBINARY) Slice slice) { return slice; @@ -45,7 +45,7 @@ public static Slice castFromBinary(@SqlType(StandardTypes.VARBINARY) Slice slice @ScalarOperator(CAST) @SqlType(StandardTypes.HYPER_LOG_LOG) - public static Slice castToHyperLogLog(@SqlType(SetDigestType.NAME) Slice slice) + public static Slice castToHyperLogLog(@SqlType(StandardTypes.SET_DIGEST) Slice slice) { checkArgument(slice.getByte(0) == 1, "Legacy version of SetDigest cannot cast to HyperLogLog"); int hllLength = slice.getInt(SIZE_OF_BYTE); diff --git a/core/trino-main/src/main/java/io/trino/type/setdigest/SetDigestType.java b/core/trino-main/src/main/java/io/trino/type/setdigest/SetDigestType.java index 7d3195992756..626163b0bd2b 100644 --- a/core/trino-main/src/main/java/io/trino/type/setdigest/SetDigestType.java +++ b/core/trino-main/src/main/java/io/trino/type/setdigest/SetDigestType.java @@ -22,6 +22,7 @@ import io.trino.spi.connector.ConnectorSession; import io.trino.spi.type.AbstractVariableWidthType; import io.trino.spi.type.SqlVarbinary; +import io.trino.spi.type.StandardTypes; import io.trino.spi.type.TypeSignature; // Layout is :, where @@ -31,11 +32,10 @@ public class SetDigestType extends AbstractVariableWidthType { public static final SetDigestType SET_DIGEST = new SetDigestType(); - public static final String NAME = "SetDigest"; private SetDigestType() { - super(new TypeSignature(NAME), Slice.class); + super(new TypeSignature(StandardTypes.SET_DIGEST), Slice.class); } @Override diff --git a/core/trino-spi/src/main/java/io/trino/spi/type/StandardTypes.java b/core/trino-spi/src/main/java/io/trino/spi/type/StandardTypes.java index e39e7ba6bde9..ca704ab04a5f 100644 --- a/core/trino-spi/src/main/java/io/trino/spi/type/StandardTypes.java +++ b/core/trino-spi/src/main/java/io/trino/spi/type/StandardTypes.java @@ -13,6 +13,7 @@ */ package io.trino.spi.type; +// Should have the same types as in the ClientStandardTypes public final class StandardTypes { public static final String BIGINT = "bigint"; @@ -27,6 +28,7 @@ public final class StandardTypes public static final String HYPER_LOG_LOG = "HyperLogLog"; public static final String QDIGEST = "qdigest"; public static final String TDIGEST = "tdigest"; + public static final String SET_DIGEST = "SetDigest"; public static final String P4_HYPER_LOG_LOG = "P4HyperLogLog"; public static final String INTERVAL_DAY_TO_SECOND = "interval day to second"; public static final String INTERVAL_YEAR_TO_MONTH = "interval year to month"; @@ -43,8 +45,12 @@ public final class StandardTypes public static final String JSON = "json"; public static final String JSON_2016 = "json2016"; public static final String IPADDRESS = "ipaddress"; - public static final String GEOMETRY = "Geometry"; public static final String UUID = "uuid"; + public static final String GEOMETRY = "Geometry"; + public static final String SPHERICAL_GEOGRAPHY = "SphericalGeography"; // SphericalGeographyType.SPHERICAL_GEOGRAPHY_TYPE_NAME + public static final String BING_TILE = "BingTile"; // BingTileType.NAME + public static final String KDB_TREE = "KdbTree"; // KdbTreeType.NAME + public static final String COLOR = "color"; // Color.NAME private StandardTypes() {} } diff --git a/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/BingTileFunctions.java b/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/BingTileFunctions.java index d84eedd00729..7a4cf5985dcd 100644 --- a/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/BingTileFunctions.java +++ b/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/BingTileFunctions.java @@ -41,7 +41,6 @@ import static io.trino.geospatial.serde.GeometrySerde.deserialize; import static io.trino.geospatial.serde.GeometrySerde.serialize; import static io.trino.plugin.geospatial.BingTile.MAX_ZOOM_LEVEL; -import static io.trino.plugin.geospatial.GeometryType.GEOMETRY_TYPE_NAME; import static io.trino.spi.StandardErrorCode.INVALID_FUNCTION_ARGUMENT; import static io.trino.spi.type.BigintType.BIGINT; import static io.trino.spi.type.IntegerType.INTEGER; @@ -87,7 +86,7 @@ private BingTileFunctions() {} @Description("Creates a Bing tile from XY coordinates and zoom level") @ScalarFunction("bing_tile") - @SqlType(BingTileType.NAME) + @SqlType(StandardTypes.BING_TILE) public static long toBingTile(@SqlType(StandardTypes.INTEGER) long tileX, @SqlType(StandardTypes.INTEGER) long tileY, @SqlType(StandardTypes.INTEGER) long zoomLevel) { checkZoomLevel(zoomLevel); @@ -100,7 +99,7 @@ public static long toBingTile(@SqlType(StandardTypes.INTEGER) long tileX, @SqlTy @Description("Given a Bing tile, returns its QuadKey") @ScalarFunction("bing_tile_quadkey") @SqlType(StandardTypes.VARCHAR) - public static Slice toQuadKey(@SqlType(BingTileType.NAME) long input) + public static Slice toQuadKey(@SqlType(StandardTypes.BING_TILE) long input) { return utf8Slice(BingTile.decode(input).toQuadKey()); } @@ -119,7 +118,7 @@ public BingTileCoordinatesFunction() } @SqlType("row(x integer,y integer)") - public SqlRow bingTileCoordinates(@SqlType(BingTileType.NAME) long input) + public SqlRow bingTileCoordinates(@SqlType(StandardTypes.BING_TILE) long input) { BingTile tile = BingTile.decode(input); return rowValueBuilder.build(fields -> { @@ -132,14 +131,14 @@ public SqlRow bingTileCoordinates(@SqlType(BingTileType.NAME) long input) @Description("Given a Bing tile, returns zoom level of the tile") @ScalarFunction("bing_tile_zoom_level") @SqlType(StandardTypes.TINYINT) - public static long bingTileZoomLevel(@SqlType(BingTileType.NAME) long input) + public static long bingTileZoomLevel(@SqlType(StandardTypes.BING_TILE) long input) { return BingTile.decode(input).getZoomLevel(); } @Description("Creates a Bing tile from a QuadKey") @ScalarFunction("bing_tile") - @SqlType(BingTileType.NAME) + @SqlType(StandardTypes.BING_TILE) public static long toBingTile(@SqlType(StandardTypes.VARCHAR) Slice quadKey) { checkQuadKey(quadKey); @@ -148,7 +147,7 @@ public static long toBingTile(@SqlType(StandardTypes.VARCHAR) Slice quadKey) @Description("Given a (latitude, longitude) point, returns the containing Bing tile at the specified zoom level") @ScalarFunction("bing_tile_at") - @SqlType(BingTileType.NAME) + @SqlType(StandardTypes.BING_TILE) public static long bingTileAt( @SqlType(StandardTypes.DOUBLE) double latitude, @SqlType(StandardTypes.DOUBLE) double longitude, @@ -163,7 +162,7 @@ public static long bingTileAt( @Description("Given a (longitude, latitude) point, returns the surrounding Bing tiles at the specified zoom level") @ScalarFunction("bing_tiles_around") - @SqlType("array(" + BingTileType.NAME + ")") + @SqlType("array(" + StandardTypes.BING_TILE + ")") public static Block bingTilesAround( @SqlType(StandardTypes.DOUBLE) double latitude, @SqlType(StandardTypes.DOUBLE) double longitude, @@ -196,7 +195,7 @@ public static Block bingTilesAround( "returns a minimum set of Bing tiles at specified zoom level that cover a circle of " + "specified radius around the specified point.") @ScalarFunction("bing_tiles_around") - @SqlType("array(" + BingTileType.NAME + ")") + @SqlType("array(" + StandardTypes.BING_TILE + ")") public static Block bingTilesAround( @SqlType(StandardTypes.DOUBLE) double latitude, @SqlType(StandardTypes.DOUBLE) double longitude, @@ -331,8 +330,8 @@ public static Block bingTilesAround( @Description("Given a Bing tile, returns the polygon representation of the tile") @ScalarFunction("bing_tile_polygon") - @SqlType(GEOMETRY_TYPE_NAME) - public static Slice bingTilePolygon(@SqlType(BingTileType.NAME) long input) + @SqlType(StandardTypes.GEOMETRY) + public static Slice bingTilePolygon(@SqlType(StandardTypes.BING_TILE) long input) { BingTile tile = BingTile.decode(input); @@ -341,8 +340,8 @@ public static Slice bingTilePolygon(@SqlType(BingTileType.NAME) long input) @Description("Given a geometry and a zoom level, returns the minimum set of Bing tiles that fully covers that geometry") @ScalarFunction("geometry_to_bing_tiles") - @SqlType("array(" + BingTileType.NAME + ")") - public static Block geometryToBingTiles(@SqlType(GEOMETRY_TYPE_NAME) Slice input, @SqlType(StandardTypes.INTEGER) long zoomLevelInput) + @SqlType("array(" + StandardTypes.BING_TILE + ")") + public static Block geometryToBingTiles(@SqlType(StandardTypes.GEOMETRY) Slice input, @SqlType(StandardTypes.INTEGER) long zoomLevelInput) { checkZoomLevel(zoomLevelInput); diff --git a/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/BingTileType.java b/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/BingTileType.java index 8f9d5e8b2453..015afaf46cf2 100644 --- a/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/BingTileType.java +++ b/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/BingTileType.java @@ -16,17 +16,17 @@ import io.trino.spi.block.Block; import io.trino.spi.connector.ConnectorSession; import io.trino.spi.type.AbstractLongType; +import io.trino.spi.type.StandardTypes; import io.trino.spi.type.TypeSignature; public class BingTileType extends AbstractLongType { public static final BingTileType BING_TILE = new BingTileType(); - public static final String NAME = "BingTile"; private BingTileType() { - super(new TypeSignature(NAME)); + super(new TypeSignature(StandardTypes.BING_TILE)); } @Override diff --git a/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/EncodedPolylineFunctions.java b/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/EncodedPolylineFunctions.java index 73ac0dd93407..33fbf65d13c0 100644 --- a/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/EncodedPolylineFunctions.java +++ b/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/EncodedPolylineFunctions.java @@ -36,7 +36,6 @@ import static io.trino.geospatial.GeometryType.MULTI_POINT; import static io.trino.geospatial.serde.GeometrySerde.deserialize; import static io.trino.geospatial.serde.GeometrySerde.serialize; -import static io.trino.plugin.geospatial.GeometryType.GEOMETRY_TYPE_NAME; import static io.trino.spi.StandardErrorCode.INVALID_FUNCTION_ARGUMENT; import static java.lang.String.format; @@ -52,7 +51,7 @@ private EncodedPolylineFunctions() {} @Description("Decodes a polyline to a linestring") @ScalarFunction("from_encoded_polyline") - @SqlType(GEOMETRY_TYPE_NAME) + @SqlType(StandardTypes.GEOMETRY) public static Slice fromEncodedPolyline(@SqlType(StandardTypes.VARCHAR) Slice input) { return serialize(decodePolyline(input.toStringUtf8())); @@ -104,7 +103,7 @@ private static OGCLineString decodePolyline(String polyline) @Description("Encodes a linestring or multipoint geometry to a polyline") @ScalarFunction("to_encoded_polyline") @SqlType(StandardTypes.VARCHAR) - public static Slice toEncodedPolyline(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + public static Slice toEncodedPolyline(@SqlType(StandardTypes.GEOMETRY) Slice input) { OGCGeometry geometry = deserialize(input); validateType("encode_polyline", geometry, EnumSet.of(LINE_STRING, MULTI_POINT)); diff --git a/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/GeoFunctions.java b/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/GeoFunctions.java index cd46c73d9373..e984d795eb8a 100644 --- a/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/GeoFunctions.java +++ b/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/GeoFunctions.java @@ -110,8 +110,6 @@ import static io.trino.geospatial.serde.GeometrySerde.serialize; import static io.trino.geospatial.serde.JtsGeometrySerde.serialize; import static io.trino.plugin.geospatial.GeometryType.GEOMETRY; -import static io.trino.plugin.geospatial.GeometryType.GEOMETRY_TYPE_NAME; -import static io.trino.plugin.geospatial.SphericalGeographyType.SPHERICAL_GEOGRAPHY_TYPE_NAME; import static io.trino.spi.StandardErrorCode.INVALID_FUNCTION_ARGUMENT; import static io.trino.spi.block.RowValueBuilder.buildRowValue; import static io.trino.spi.type.StandardTypes.BIGINT; @@ -181,7 +179,7 @@ private GeoFunctions() {} @Description("Returns a Geometry type LineString object from Well-Known Text representation (WKT)") @ScalarFunction("ST_LineFromText") - @SqlType(GEOMETRY_TYPE_NAME) + @SqlType(StandardTypes.GEOMETRY) public static Slice parseLine(@SqlType(VARCHAR) Slice input) { OGCGeometry geometry = geometryFromText(input); @@ -191,8 +189,8 @@ public static Slice parseLine(@SqlType(VARCHAR) Slice input) @Description("Returns a LineString from an array of points") @ScalarFunction("ST_LineString") - @SqlType(GEOMETRY_TYPE_NAME) - public static Slice stLineString(@SqlType("array(" + GEOMETRY_TYPE_NAME + ")") Block input) + @SqlType(StandardTypes.GEOMETRY) + public static Slice stLineString(@SqlType("array(" + StandardTypes.GEOMETRY + ")") Block input) { MultiPath multipath = new Polyline(); OGCPoint previousPoint = null; @@ -230,7 +228,7 @@ public static Slice stLineString(@SqlType("array(" + GEOMETRY_TYPE_NAME + ")") B @Description("Returns a Geometry type Point object with the given coordinate values") @ScalarFunction("ST_Point") - @SqlType(GEOMETRY_TYPE_NAME) + @SqlType(StandardTypes.GEOMETRY) public static Slice stPoint(@SqlType(DOUBLE) double x, @SqlType(DOUBLE) double y) { OGCGeometry geometry = createFromEsriGeometry(new Point(x, y), null); @@ -240,8 +238,8 @@ public static Slice stPoint(@SqlType(DOUBLE) double x, @SqlType(DOUBLE) double y @SqlNullable @Description("Returns a multi-point geometry formed from input points") @ScalarFunction("ST_MultiPoint") - @SqlType(GEOMETRY_TYPE_NAME) - public static Slice stMultiPoint(@SqlType("array(" + GEOMETRY_TYPE_NAME + ")") Block input) + @SqlType(StandardTypes.GEOMETRY) + public static Slice stMultiPoint(@SqlType("array(" + StandardTypes.GEOMETRY + ")") Block input) { MultiPoint multipoint = new MultiPoint(); for (int i = 0; i < input.getPositionCount(); i++) { @@ -268,7 +266,7 @@ public static Slice stMultiPoint(@SqlType("array(" + GEOMETRY_TYPE_NAME + ")") B @Description("Returns a Geometry type Polygon object from Well-Known Text representation (WKT)") @ScalarFunction("ST_Polygon") - @SqlType(GEOMETRY_TYPE_NAME) + @SqlType(StandardTypes.GEOMETRY) public static Slice stPolygon(@SqlType(VARCHAR) Slice input) { OGCGeometry geometry = geometryFromText(input); @@ -279,7 +277,7 @@ public static Slice stPolygon(@SqlType(VARCHAR) Slice input) @Description("Returns the 2D Euclidean area of a geometry") @ScalarFunction("ST_Area") @SqlType(DOUBLE) - public static double stArea(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + public static double stArea(@SqlType(StandardTypes.GEOMETRY) Slice input) { OGCGeometry geometry = deserialize(input); @@ -303,7 +301,7 @@ public static double stArea(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @Description("Returns a Geometry type object from Well-Known Text representation (WKT)") @ScalarFunction("ST_GeometryFromText") - @SqlType(GEOMETRY_TYPE_NAME) + @SqlType(StandardTypes.GEOMETRY) public static Slice stGeometryFromText(@SqlType(VARCHAR) Slice input) { return serialize(geometryFromText(input)); @@ -311,7 +309,7 @@ public static Slice stGeometryFromText(@SqlType(VARCHAR) Slice input) @Description("Returns a Geometry type object from Well-Known Binary representation (WKB)") @ScalarFunction("ST_GeomFromBinary") - @SqlType(GEOMETRY_TYPE_NAME) + @SqlType(StandardTypes.GEOMETRY) public static Slice stGeomFromBinary(@SqlType(VARBINARY) Slice input) { return serialize(geomFromBinary(input)); @@ -319,7 +317,7 @@ public static Slice stGeomFromBinary(@SqlType(VARBINARY) Slice input) @Description("Returns a Geometry type object from Spatial Framework for Hadoop representation") @ScalarFunction("geometry_from_hadoop_shape") - @SqlType(GEOMETRY_TYPE_NAME) + @SqlType(StandardTypes.GEOMETRY) public static Slice geometryFromHadoopShape(@SqlType(VARBINARY) Slice input) { requireNonNull(input, "input is null"); @@ -336,8 +334,8 @@ public static Slice geometryFromHadoopShape(@SqlType(VARBINARY) Slice input) @Description("Converts a Geometry object to a SphericalGeography object") @ScalarFunction("to_spherical_geography") - @SqlType(SPHERICAL_GEOGRAPHY_TYPE_NAME) - public static Slice toSphericalGeography(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + @SqlType(StandardTypes.SPHERICAL_GEOGRAPHY) + public static Slice toSphericalGeography(@SqlType(StandardTypes.GEOMETRY) Slice input) { // "every point in input is in range" <=> "the envelope of input is in range" Envelope envelope = deserializeEnvelope(input); @@ -369,8 +367,8 @@ public static Slice toSphericalGeography(@SqlType(GEOMETRY_TYPE_NAME) Slice inpu @Description("Converts a SphericalGeography object to a Geometry object.") @ScalarFunction("to_geometry") - @SqlType(GEOMETRY_TYPE_NAME) - public static Slice toGeometry(@SqlType(SPHERICAL_GEOGRAPHY_TYPE_NAME) Slice input) + @SqlType(StandardTypes.GEOMETRY) + public static Slice toGeometry(@SqlType(StandardTypes.SPHERICAL_GEOGRAPHY) Slice input) { // Every SphericalGeography object is a valid geometry object return input; @@ -379,7 +377,7 @@ public static Slice toGeometry(@SqlType(SPHERICAL_GEOGRAPHY_TYPE_NAME) Slice inp @Description("Returns the Well-Known Text (WKT) representation of the geometry") @ScalarFunction("ST_AsText") @SqlType(VARCHAR) - public static Slice stAsText(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + public static Slice stAsText(@SqlType(StandardTypes.GEOMETRY) Slice input) { return utf8Slice(deserialize(input).asText()); } @@ -387,7 +385,7 @@ public static Slice stAsText(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @Description("Returns the Well-Known Binary (WKB) representation of the geometry") @ScalarFunction("ST_AsBinary") @SqlType(VARBINARY) - public static Slice stAsBinary(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + public static Slice stAsBinary(@SqlType(StandardTypes.GEOMETRY) Slice input) { return wrappedHeapBuffer(deserialize(input).asBinary()); } @@ -395,8 +393,8 @@ public static Slice stAsBinary(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @SqlNullable @Description("Returns the geometry that represents all points whose distance from the specified geometry is less than or equal to the specified distance") @ScalarFunction("ST_Buffer") - @SqlType(GEOMETRY_TYPE_NAME) - public static Slice stBuffer(@SqlType(GEOMETRY_TYPE_NAME) Slice input, @SqlType(DOUBLE) double distance) + @SqlType(StandardTypes.GEOMETRY) + public static Slice stBuffer(@SqlType(StandardTypes.GEOMETRY) Slice input, @SqlType(DOUBLE) double distance) { if (isNaN(distance)) { throw new TrinoException(INVALID_FUNCTION_ARGUMENT, "distance is NaN"); @@ -419,8 +417,8 @@ public static Slice stBuffer(@SqlType(GEOMETRY_TYPE_NAME) Slice input, @SqlType( @Description("Returns the Point value that is the mathematical centroid of a Geometry") @ScalarFunction("ST_Centroid") - @SqlType(GEOMETRY_TYPE_NAME) - public static Slice stCentroid(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + @SqlType(StandardTypes.GEOMETRY) + public static Slice stCentroid(@SqlType(StandardTypes.GEOMETRY) Slice input) { OGCGeometry geometry = deserialize(input); validateType("ST_Centroid", geometry, EnumSet.of(POINT, MULTI_POINT, LINE_STRING, MULTI_LINE_STRING, POLYGON, MULTI_POLYGON)); @@ -439,8 +437,8 @@ public static Slice stCentroid(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @Description("Returns the minimum convex geometry that encloses all input geometries") @ScalarFunction("ST_ConvexHull") - @SqlType(GEOMETRY_TYPE_NAME) - public static Slice stConvexHull(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + @SqlType(StandardTypes.GEOMETRY) + public static Slice stConvexHull(@SqlType(StandardTypes.GEOMETRY) Slice input) { OGCGeometry geometry = deserialize(input); if (geometry.isEmpty()) { @@ -455,7 +453,7 @@ public static Slice stConvexHull(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @Description("Return the coordinate dimension of the Geometry") @ScalarFunction("ST_CoordDim") @SqlType(TINYINT) - public static long stCoordinateDimension(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + public static long stCoordinateDimension(@SqlType(StandardTypes.GEOMETRY) Slice input) { return deserialize(input).coordinateDimension(); } @@ -463,7 +461,7 @@ public static long stCoordinateDimension(@SqlType(GEOMETRY_TYPE_NAME) Slice inpu @Description("Returns the inherent dimension of this Geometry object, which must be less than or equal to the coordinate dimension") @ScalarFunction("ST_Dimension") @SqlType(TINYINT) - public static long stDimension(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + public static long stDimension(@SqlType(StandardTypes.GEOMETRY) Slice input) { return deserialize(input).dimension(); } @@ -472,7 +470,7 @@ public static long stDimension(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @Description("Returns TRUE if the LineString or Multi-LineString's start and end points are coincident") @ScalarFunction("ST_IsClosed") @SqlType(BOOLEAN) - public static Boolean stIsClosed(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + public static Boolean stIsClosed(@SqlType(StandardTypes.GEOMETRY) Slice input) { OGCGeometry geometry = deserialize(input); validateType("ST_IsClosed", geometry, EnumSet.of(LINE_STRING, MULTI_LINE_STRING)); @@ -492,7 +490,7 @@ public static Boolean stIsClosed(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @Description("Returns TRUE if this Geometry is an empty geometrycollection, polygon, point etc") @ScalarFunction("ST_IsEmpty") @SqlType(BOOLEAN) - public static Boolean stIsEmpty(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + public static Boolean stIsEmpty(@SqlType(StandardTypes.GEOMETRY) Slice input) { return deserializeEnvelope(input).isEmpty(); } @@ -500,7 +498,7 @@ public static Boolean stIsEmpty(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @Description("Returns TRUE if this Geometry has no anomalous geometric points, such as self intersection or self tangency") @ScalarFunction("ST_IsSimple") @SqlType(BOOLEAN) - public static boolean stIsSimple(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + public static boolean stIsSimple(@SqlType(StandardTypes.GEOMETRY) Slice input) { OGCGeometry geometry = deserialize(input); return geometry.isEmpty() || geometry.isSimple(); @@ -509,7 +507,7 @@ public static boolean stIsSimple(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @Description("Returns true if the input geometry is well formed") @ScalarFunction("ST_IsValid") @SqlType(BOOLEAN) - public static boolean stIsValid(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + public static boolean stIsValid(@SqlType(StandardTypes.GEOMETRY) Slice input) { GeometryCursor cursor = deserialize(input).getEsriGeometryCursor(); while (true) { @@ -528,7 +526,7 @@ public static boolean stIsValid(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @ScalarFunction("geometry_invalid_reason") @SqlType(VARCHAR) @SqlNullable - public static Slice invalidReason(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + public static Slice invalidReason(@SqlType(StandardTypes.GEOMETRY) Slice input) { GeometryCursor cursor = deserialize(input).getEsriGeometryCursor(); NonSimpleResult result = new NonSimpleResult(); @@ -564,7 +562,7 @@ public static Slice invalidReason(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @Description("Returns the length of a LineString or Multi-LineString using Euclidean measurement on a 2D plane (based on spatial ref) in projected units") @ScalarFunction("ST_Length") @SqlType(DOUBLE) - public static double stLength(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + public static double stLength(@SqlType(StandardTypes.GEOMETRY) Slice input) { OGCGeometry geometry = deserialize(input); validateType("ST_Length", geometry, EnumSet.of(LINE_STRING, MULTI_LINE_STRING)); @@ -575,7 +573,7 @@ public static double stLength(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @Description("Returns the great-circle length in meters of a linestring or multi-linestring on Earth's surface") @ScalarFunction("ST_Length") @SqlType(DOUBLE) - public static Double stSphericalLength(@SqlType(SPHERICAL_GEOGRAPHY_TYPE_NAME) Slice input) + public static Double stSphericalLength(@SqlType(StandardTypes.SPHERICAL_GEOGRAPHY) Slice input) { OGCGeometry geometry = deserialize(input); if (geometry.isEmpty()) { @@ -610,7 +608,7 @@ public static Double stSphericalLength(@SqlType(SPHERICAL_GEOGRAPHY_TYPE_NAME) S @Description("Returns a float between 0 and 1 representing the location of the closest point on the LineString to the given Point, as a fraction of total 2d line length.") @ScalarFunction("line_locate_point") @SqlType(DOUBLE) - public static Double lineLocatePoint(@SqlType(GEOMETRY_TYPE_NAME) Slice lineSlice, @SqlType(GEOMETRY_TYPE_NAME) Slice pointSlice) + public static Double lineLocatePoint(@SqlType(StandardTypes.GEOMETRY) Slice lineSlice, @SqlType(StandardTypes.GEOMETRY) Slice pointSlice) { Geometry line = JtsGeometrySerde.deserialize(lineSlice); Geometry point = JtsGeometrySerde.deserialize(pointSlice); @@ -635,9 +633,9 @@ public static Double lineLocatePoint(@SqlType(GEOMETRY_TYPE_NAME) Slice lineSlic @SqlNullable @Description("Returns a Point interpolated along a LineString at the fraction given.") @ScalarFunction("line_interpolate_point") - @SqlType(GEOMETRY_TYPE_NAME) + @SqlType(StandardTypes.GEOMETRY) public static Slice lineInterpolatePoint( - @SqlType(GEOMETRY_TYPE_NAME) Slice input, + @SqlType(StandardTypes.GEOMETRY) Slice input, @SqlType(StandardTypes.DOUBLE) double distanceFraction) { OGCGeometry geometry = deserialize(input); @@ -652,9 +650,9 @@ public static Slice lineInterpolatePoint( @SqlNullable @Description("Returns an array of Points interpolated along a LineString.") @ScalarFunction("line_interpolate_points") - @SqlType("array(" + GEOMETRY_TYPE_NAME + ")") + @SqlType("array(" + StandardTypes.GEOMETRY + ")") public static Block lineInterpolatePoints( - @SqlType(GEOMETRY_TYPE_NAME) Slice input, + @SqlType(StandardTypes.GEOMETRY) Slice input, @SqlType(StandardTypes.DOUBLE) double fractionStep) { OGCGeometry geometry = deserialize(input); @@ -722,7 +720,7 @@ private static List interpolatePoints(OGCGeometry geometry, double fracti @Description("Returns X maxima of a bounding box of a Geometry") @ScalarFunction("ST_XMax") @SqlType(DOUBLE) - public static Double stXMax(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + public static Double stXMax(@SqlType(StandardTypes.GEOMETRY) Slice input) { Envelope envelope = deserializeEnvelope(input); if (envelope.isEmpty()) { @@ -735,7 +733,7 @@ public static Double stXMax(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @Description("Returns Y maxima of a bounding box of a Geometry") @ScalarFunction("ST_YMax") @SqlType(DOUBLE) - public static Double stYMax(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + public static Double stYMax(@SqlType(StandardTypes.GEOMETRY) Slice input) { Envelope envelope = deserializeEnvelope(input); if (envelope.isEmpty()) { @@ -748,7 +746,7 @@ public static Double stYMax(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @Description("Returns X minima of a bounding box of a Geometry") @ScalarFunction("ST_XMin") @SqlType(DOUBLE) - public static Double stXMin(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + public static Double stXMin(@SqlType(StandardTypes.GEOMETRY) Slice input) { Envelope envelope = deserializeEnvelope(input); if (envelope.isEmpty()) { @@ -761,7 +759,7 @@ public static Double stXMin(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @Description("Returns Y minima of a bounding box of a Geometry") @ScalarFunction("ST_YMin") @SqlType(DOUBLE) - public static Double stYMin(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + public static Double stYMin(@SqlType(StandardTypes.GEOMETRY) Slice input) { Envelope envelope = deserializeEnvelope(input); if (envelope.isEmpty()) { @@ -774,7 +772,7 @@ public static Double stYMin(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @Description("Returns the cardinality of the collection of interior rings of a polygon") @ScalarFunction("ST_NumInteriorRing") @SqlType(BIGINT) - public static Long stNumInteriorRings(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + public static Long stNumInteriorRings(@SqlType(StandardTypes.GEOMETRY) Slice input) { OGCGeometry geometry = deserialize(input); validateType("ST_NumInteriorRing", geometry, EnumSet.of(POLYGON)); @@ -787,8 +785,8 @@ public static Long stNumInteriorRings(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @SqlNullable @Description("Returns an array of interior rings of a polygon") @ScalarFunction("ST_InteriorRings") - @SqlType("array(" + GEOMETRY_TYPE_NAME + ")") - public static Block stInteriorRings(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + @SqlType("array(" + StandardTypes.GEOMETRY + ")") + public static Block stInteriorRings(@SqlType(StandardTypes.GEOMETRY) Slice input) { OGCGeometry geometry = deserialize(input); validateType("ST_InteriorRings", geometry, EnumSet.of(POLYGON)); @@ -807,7 +805,7 @@ public static Block stInteriorRings(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @Description("Returns the cardinality of the geometry collection") @ScalarFunction("ST_NumGeometries") @SqlType(INTEGER) - public static long stNumGeometries(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + public static long stNumGeometries(@SqlType(StandardTypes.GEOMETRY) Slice input) { OGCGeometry geometry = deserialize(input); if (geometry.isEmpty()) { @@ -822,16 +820,16 @@ public static long stNumGeometries(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @Description("Returns a geometry that represents the point set union of the input geometries.") @ScalarFunction("ST_Union") - @SqlType(GEOMETRY_TYPE_NAME) - public static Slice stUnion(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @SqlType(GEOMETRY_TYPE_NAME) Slice right) + @SqlType(StandardTypes.GEOMETRY) + public static Slice stUnion(@SqlType(StandardTypes.GEOMETRY) Slice left, @SqlType(StandardTypes.GEOMETRY) Slice right) { return stUnion(ImmutableList.of(left, right)); } @Description("Returns a geometry that represents the point set union of the input geometries.") @ScalarFunction("geometry_union") - @SqlType(GEOMETRY_TYPE_NAME) - public static Slice geometryUnion(@SqlType("array(" + GEOMETRY_TYPE_NAME + ")") Block input) + @SqlType(StandardTypes.GEOMETRY) + public static Slice geometryUnion(@SqlType("array(" + StandardTypes.GEOMETRY + ")") Block input) { return stUnion(getGeometrySlicesFromBlock(input)); } @@ -885,8 +883,8 @@ private static Slice stUnion(Iterable slices) @SqlNullable @Description("Returns the geometry element at the specified index (indices started with 1)") @ScalarFunction("ST_GeometryN") - @SqlType(GEOMETRY_TYPE_NAME) - public static Slice stGeometryN(@SqlType(GEOMETRY_TYPE_NAME) Slice input, @SqlType(INTEGER) long index) + @SqlType(StandardTypes.GEOMETRY) + public static Slice stGeometryN(@SqlType(StandardTypes.GEOMETRY) Slice input, @SqlType(INTEGER) long index) { OGCGeometry geometry = deserialize(input); if (geometry.isEmpty()) { @@ -910,8 +908,8 @@ public static Slice stGeometryN(@SqlType(GEOMETRY_TYPE_NAME) Slice input, @SqlTy @SqlNullable @Description("Returns the vertex of a linestring at the specified index (indices started with 1) ") @ScalarFunction("ST_PointN") - @SqlType(GEOMETRY_TYPE_NAME) - public static Slice stPointN(@SqlType(GEOMETRY_TYPE_NAME) Slice input, @SqlType(INTEGER) long index) + @SqlType(StandardTypes.GEOMETRY) + public static Slice stPointN(@SqlType(StandardTypes.GEOMETRY) Slice input, @SqlType(INTEGER) long index) { OGCGeometry geometry = deserialize(input); validateType("ST_PointN", geometry, EnumSet.of(LINE_STRING)); @@ -926,8 +924,8 @@ public static Slice stPointN(@SqlType(GEOMETRY_TYPE_NAME) Slice input, @SqlType( @SqlNullable @Description("Returns an array of geometries in the specified collection") @ScalarFunction("ST_Geometries") - @SqlType("array(" + GEOMETRY_TYPE_NAME + ")") - public static Block stGeometries(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + @SqlType("array(" + StandardTypes.GEOMETRY + ")") + public static Block stGeometries(@SqlType(StandardTypes.GEOMETRY) Slice input) { OGCGeometry geometry = deserialize(input); if (geometry.isEmpty()) { @@ -952,8 +950,8 @@ public static Block stGeometries(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @SqlNullable @Description("Returns the interior ring element at the specified index (indices start at 1)") @ScalarFunction("ST_InteriorRingN") - @SqlType(GEOMETRY_TYPE_NAME) - public static Slice stInteriorRingN(@SqlType(GEOMETRY_TYPE_NAME) Slice input, @SqlType(INTEGER) long index) + @SqlType(StandardTypes.GEOMETRY) + public static Slice stInteriorRingN(@SqlType(StandardTypes.GEOMETRY) Slice input, @SqlType(INTEGER) long index) { OGCGeometry geometry = deserialize(input); validateType("ST_InteriorRingN", geometry, EnumSet.of(POLYGON)); @@ -968,7 +966,7 @@ public static Slice stInteriorRingN(@SqlType(GEOMETRY_TYPE_NAME) Slice input, @S @Description("Returns the number of points in a Geometry") @ScalarFunction("ST_NumPoints") @SqlType(BIGINT) - public static long stNumPoints(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + public static long stNumPoints(@SqlType(StandardTypes.GEOMETRY) Slice input) { return getPointCount(deserialize(input)); } @@ -977,7 +975,7 @@ public static long stNumPoints(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @Description("Returns TRUE if and only if the line is closed and simple") @ScalarFunction("ST_IsRing") @SqlType(BOOLEAN) - public static Boolean stIsRing(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + public static Boolean stIsRing(@SqlType(StandardTypes.GEOMETRY) Slice input) { OGCGeometry geometry = deserialize(input); validateType("ST_IsRing", geometry, EnumSet.of(LINE_STRING)); @@ -988,8 +986,8 @@ public static Boolean stIsRing(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @SqlNullable @Description("Returns the first point of a LINESTRING geometry as a Point") @ScalarFunction("ST_StartPoint") - @SqlType(GEOMETRY_TYPE_NAME) - public static Slice stStartPoint(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + @SqlType(StandardTypes.GEOMETRY) + public static Slice stStartPoint(@SqlType(StandardTypes.GEOMETRY) Slice input) { OGCGeometry geometry = deserialize(input); validateType("ST_StartPoint", geometry, EnumSet.of(LINE_STRING)); @@ -1003,8 +1001,8 @@ public static Slice stStartPoint(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @Description("Returns a \"simplified\" version of the given geometry") @ScalarFunction("simplify_geometry") - @SqlType(GEOMETRY_TYPE_NAME) - public static Slice simplifyGeometry(@SqlType(GEOMETRY_TYPE_NAME) Slice input, @SqlType(DOUBLE) double distanceTolerance) + @SqlType(StandardTypes.GEOMETRY) + public static Slice simplifyGeometry(@SqlType(StandardTypes.GEOMETRY) Slice input, @SqlType(DOUBLE) double distanceTolerance) { if (isNaN(distanceTolerance)) { throw new TrinoException(INVALID_FUNCTION_ARGUMENT, "distanceTolerance is NaN"); @@ -1024,8 +1022,8 @@ public static Slice simplifyGeometry(@SqlType(GEOMETRY_TYPE_NAME) Slice input, @ @SqlNullable @Description("Returns the last point of a LINESTRING geometry as a Point") @ScalarFunction("ST_EndPoint") - @SqlType(GEOMETRY_TYPE_NAME) - public static Slice stEndPoint(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + @SqlType(StandardTypes.GEOMETRY) + public static Slice stEndPoint(@SqlType(StandardTypes.GEOMETRY) Slice input) { OGCGeometry geometry = deserialize(input); validateType("ST_EndPoint", geometry, EnumSet.of(LINE_STRING)); @@ -1040,8 +1038,8 @@ public static Slice stEndPoint(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @SqlNullable @Description("Returns an array of points in a geometry") @ScalarFunction("ST_Points") - @SqlType("array(" + GEOMETRY_TYPE_NAME + ")") - public static Block stPoints(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + @SqlType("array(" + StandardTypes.GEOMETRY + ")") + public static Block stPoints(@SqlType(StandardTypes.GEOMETRY) Slice input) { Geometry geometry = JtsGeometrySerde.deserialize(input); validateType("ST_Points", geometry, VALID_TYPES_FOR_ST_POINTS); @@ -1082,7 +1080,7 @@ else if (type == GeometryType.GEOMETRY_COLLECTION) { @Description("Return the X coordinate of the point") @ScalarFunction("ST_X") @SqlType(DOUBLE) - public static Double stX(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + public static Double stX(@SqlType(StandardTypes.GEOMETRY) Slice input) { OGCGeometry geometry = deserialize(input); validateType("ST_X", geometry, EnumSet.of(POINT)); @@ -1096,7 +1094,7 @@ public static Double stX(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @Description("Return the Y coordinate of the point") @ScalarFunction("ST_Y") @SqlType(DOUBLE) - public static Double stY(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + public static Double stY(@SqlType(StandardTypes.GEOMETRY) Slice input) { OGCGeometry geometry = deserialize(input); validateType("ST_Y", geometry, EnumSet.of(POINT)); @@ -1108,8 +1106,8 @@ public static Double stY(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @Description("Returns the closure of the combinatorial boundary of this Geometry") @ScalarFunction("ST_Boundary") - @SqlType(GEOMETRY_TYPE_NAME) - public static Slice stBoundary(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + @SqlType(StandardTypes.GEOMETRY) + public static Slice stBoundary(@SqlType(StandardTypes.GEOMETRY) Slice input) { OGCGeometry geometry = deserialize(input); if (geometry.isEmpty() && GeometryType.getForEsriGeometryType(geometry.geometryType()) == LINE_STRING) { @@ -1121,8 +1119,8 @@ public static Slice stBoundary(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @Description("Returns the bounding rectangular polygon of a Geometry") @ScalarFunction("ST_Envelope") - @SqlType(GEOMETRY_TYPE_NAME) - public static Slice stEnvelope(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + @SqlType(StandardTypes.GEOMETRY) + public static Slice stEnvelope(@SqlType(StandardTypes.GEOMETRY) Slice input) { Envelope envelope = deserializeEnvelope(input); if (envelope.isEmpty()) { @@ -1134,8 +1132,8 @@ public static Slice stEnvelope(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @SqlNullable @Description("Returns the lower left and upper right corners of bounding rectangular polygon of a Geometry") @ScalarFunction("ST_EnvelopeAsPts") - @SqlType("array(" + GEOMETRY_TYPE_NAME + ")") - public static Block stEnvelopeAsPts(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + @SqlType("array(" + StandardTypes.GEOMETRY + ")") + public static Block stEnvelopeAsPts(@SqlType(StandardTypes.GEOMETRY) Slice input) { Envelope envelope = deserializeEnvelope(input); if (envelope.isEmpty()) { @@ -1151,8 +1149,8 @@ public static Block stEnvelopeAsPts(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @Description("Returns the Geometry value that represents the point set difference of two geometries") @ScalarFunction("ST_Difference") - @SqlType(GEOMETRY_TYPE_NAME) - public static Slice stDifference(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @SqlType(GEOMETRY_TYPE_NAME) Slice right) + @SqlType(StandardTypes.GEOMETRY) + public static Slice stDifference(@SqlType(StandardTypes.GEOMETRY) Slice left, @SqlType(StandardTypes.GEOMETRY) Slice right) { OGCGeometry leftGeometry = deserialize(left); OGCGeometry rightGeometry = deserialize(right); @@ -1164,7 +1162,7 @@ public static Slice stDifference(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @SqlTy @Description("Returns the 2-dimensional cartesian minimum distance (based on spatial ref) between two geometries in projected units") @ScalarFunction("ST_Distance") @SqlType(DOUBLE) - public static Double stDistance(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @SqlType(GEOMETRY_TYPE_NAME) Slice right) + public static Double stDistance(@SqlType(StandardTypes.GEOMETRY) Slice left, @SqlType(StandardTypes.GEOMETRY) Slice right) { OGCGeometry leftGeometry = deserialize(left); OGCGeometry rightGeometry = deserialize(right); @@ -1175,8 +1173,8 @@ public static Double stDistance(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @SqlTyp @SqlNullable @Description("Return the closest points on the two geometries") @ScalarFunction("geometry_nearest_points") - @SqlType("row(" + GEOMETRY_TYPE_NAME + "," + GEOMETRY_TYPE_NAME + ")") - public static SqlRow geometryNearestPoints(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @SqlType(GEOMETRY_TYPE_NAME) Slice right) + @SqlType("row(" + StandardTypes.GEOMETRY + "," + StandardTypes.GEOMETRY + ")") + public static SqlRow geometryNearestPoints(@SqlType(StandardTypes.GEOMETRY) Slice left, @SqlType(StandardTypes.GEOMETRY) Slice right) { Geometry leftGeometry = JtsGeometrySerde.deserialize(left); Geometry rightGeometry = JtsGeometrySerde.deserialize(right); @@ -1197,8 +1195,8 @@ public static SqlRow geometryNearestPoints(@SqlType(GEOMETRY_TYPE_NAME) Slice le @SqlNullable @Description("Returns a line string representing the exterior ring of the POLYGON") @ScalarFunction("ST_ExteriorRing") - @SqlType(GEOMETRY_TYPE_NAME) - public static Slice stExteriorRing(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + @SqlType(StandardTypes.GEOMETRY) + public static Slice stExteriorRing(@SqlType(StandardTypes.GEOMETRY) Slice input) { OGCGeometry geometry = deserialize(input); validateType("ST_ExteriorRing", geometry, EnumSet.of(POLYGON)); @@ -1210,8 +1208,8 @@ public static Slice stExteriorRing(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @Description("Returns the Geometry value that represents the point set intersection of two Geometries") @ScalarFunction("ST_Intersection") - @SqlType(GEOMETRY_TYPE_NAME) - public static Slice stIntersection(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @SqlType(GEOMETRY_TYPE_NAME) Slice right) + @SqlType(StandardTypes.GEOMETRY) + public static Slice stIntersection(@SqlType(StandardTypes.GEOMETRY) Slice left, @SqlType(StandardTypes.GEOMETRY) Slice right) { if (deserializeType(left) == GeometrySerializationType.ENVELOPE && deserializeType(right) == GeometrySerializationType.ENVELOPE) { Envelope leftEnvelope = deserializeEnvelope(left); @@ -1245,8 +1243,8 @@ public static Slice stIntersection(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @Sql @Description("Returns the Geometry value that represents the point set symmetric difference of two Geometries") @ScalarFunction("ST_SymDifference") - @SqlType(GEOMETRY_TYPE_NAME) - public static Slice stSymmetricDifference(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @SqlType(GEOMETRY_TYPE_NAME) Slice right) + @SqlType(StandardTypes.GEOMETRY) + public static Slice stSymmetricDifference(@SqlType(StandardTypes.GEOMETRY) Slice left, @SqlType(StandardTypes.GEOMETRY) Slice right) { OGCGeometry leftGeometry = deserialize(left); OGCGeometry rightGeometry = deserialize(right); @@ -1258,7 +1256,7 @@ public static Slice stSymmetricDifference(@SqlType(GEOMETRY_TYPE_NAME) Slice lef @Description("Returns TRUE if and only if no points of right lie in the exterior of left, and at least one point of the interior of left lies in the interior of right") @ScalarFunction("ST_Contains") @SqlType(BOOLEAN) - public static Boolean stContains(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @SqlType(GEOMETRY_TYPE_NAME) Slice right) + public static Boolean stContains(@SqlType(StandardTypes.GEOMETRY) Slice left, @SqlType(StandardTypes.GEOMETRY) Slice right) { if (!envelopes(left, right, Envelope::contains)) { return false; @@ -1273,7 +1271,7 @@ public static Boolean stContains(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @SqlTy @Description("Returns TRUE if the supplied geometries have some, but not all, interior points in common") @ScalarFunction("ST_Crosses") @SqlType(BOOLEAN) - public static Boolean stCrosses(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @SqlType(GEOMETRY_TYPE_NAME) Slice right) + public static Boolean stCrosses(@SqlType(StandardTypes.GEOMETRY) Slice left, @SqlType(StandardTypes.GEOMETRY) Slice right) { if (!envelopes(left, right, Envelope::intersect)) { return false; @@ -1288,7 +1286,7 @@ public static Boolean stCrosses(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @SqlTyp @Description("Returns TRUE if the Geometries do not spatially intersect - if they do not share any space together") @ScalarFunction("ST_Disjoint") @SqlType(BOOLEAN) - public static Boolean stDisjoint(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @SqlType(GEOMETRY_TYPE_NAME) Slice right) + public static Boolean stDisjoint(@SqlType(StandardTypes.GEOMETRY) Slice left, @SqlType(StandardTypes.GEOMETRY) Slice right) { if (!envelopes(left, right, Envelope::intersect)) { return true; @@ -1303,7 +1301,7 @@ public static Boolean stDisjoint(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @SqlTy @Description("Returns TRUE if the given geometries represent the same geometry") @ScalarFunction("ST_Equals") @SqlType(BOOLEAN) - public static Boolean stEquals(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @SqlType(GEOMETRY_TYPE_NAME) Slice right) + public static Boolean stEquals(@SqlType(StandardTypes.GEOMETRY) Slice left, @SqlType(StandardTypes.GEOMETRY) Slice right) { OGCGeometry leftGeometry = deserialize(left); OGCGeometry rightGeometry = deserialize(right); @@ -1315,7 +1313,7 @@ public static Boolean stEquals(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @SqlType @Description("Returns TRUE if the Geometries spatially intersect in 2D - (share any portion of space) and FALSE if they don't (they are Disjoint)") @ScalarFunction("ST_Intersects") @SqlType(BOOLEAN) - public static Boolean stIntersects(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @SqlType(GEOMETRY_TYPE_NAME) Slice right) + public static Boolean stIntersects(@SqlType(StandardTypes.GEOMETRY) Slice left, @SqlType(StandardTypes.GEOMETRY) Slice right) { if (!envelopes(left, right, Envelope::intersect)) { return false; @@ -1330,7 +1328,7 @@ public static Boolean stIntersects(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @Sql @Description("Returns TRUE if the Geometries share space, are of the same dimension, but are not completely contained by each other") @ScalarFunction("ST_Overlaps") @SqlType(BOOLEAN) - public static Boolean stOverlaps(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @SqlType(GEOMETRY_TYPE_NAME) Slice right) + public static Boolean stOverlaps(@SqlType(StandardTypes.GEOMETRY) Slice left, @SqlType(StandardTypes.GEOMETRY) Slice right) { if (!envelopes(left, right, Envelope::intersect)) { return false; @@ -1345,7 +1343,7 @@ public static Boolean stOverlaps(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @SqlTy @Description("Returns TRUE if this Geometry is spatially related to another Geometry") @ScalarFunction("ST_Relate") @SqlType(BOOLEAN) - public static Boolean stRelate(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @SqlType(GEOMETRY_TYPE_NAME) Slice right, @SqlType(VARCHAR) Slice relation) + public static Boolean stRelate(@SqlType(StandardTypes.GEOMETRY) Slice left, @SqlType(StandardTypes.GEOMETRY) Slice right, @SqlType(VARCHAR) Slice relation) { OGCGeometry leftGeometry = deserialize(left); OGCGeometry rightGeometry = deserialize(right); @@ -1357,7 +1355,7 @@ public static Boolean stRelate(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @SqlType @Description("Returns TRUE if the geometries have at least one point in common, but their interiors do not intersect") @ScalarFunction("ST_Touches") @SqlType(BOOLEAN) - public static Boolean stTouches(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @SqlType(GEOMETRY_TYPE_NAME) Slice right) + public static Boolean stTouches(@SqlType(StandardTypes.GEOMETRY) Slice left, @SqlType(StandardTypes.GEOMETRY) Slice right) { if (!envelopes(left, right, Envelope::intersect)) { return false; @@ -1373,7 +1371,7 @@ public static Boolean stTouches(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @SqlTyp @Description("Returns TRUE if the geometry A is completely inside geometry B") @ScalarFunction("ST_Within") @SqlType(BOOLEAN) - public static Boolean stWithin(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @SqlType(GEOMETRY_TYPE_NAME) Slice right) + public static Boolean stWithin(@SqlType(StandardTypes.GEOMETRY) Slice left, @SqlType(StandardTypes.GEOMETRY) Slice right) { if (!envelopes(right, left, Envelope::contains)) { return false; @@ -1387,7 +1385,7 @@ public static Boolean stWithin(@SqlType(GEOMETRY_TYPE_NAME) Slice left, @SqlType @Description("Returns the type of the geometry") @ScalarFunction("ST_GeometryType") @SqlType(VARCHAR) - public static Slice stGeometryType(@SqlType(GEOMETRY_TYPE_NAME) Slice input) + public static Slice stGeometryType(@SqlType(StandardTypes.GEOMETRY) Slice input) { return GeometrySerde.getGeometryType(input).standardName(); } @@ -1396,7 +1394,7 @@ public static Slice stGeometryType(@SqlType(GEOMETRY_TYPE_NAME) Slice input) @SqlNullable @Description("Returns an array of spatial partition IDs for a given geometry") @SqlType("array(integer)") - public static Block spatialPartitions(@SqlType(KdbTreeType.NAME) Object kdbTree, @SqlType(GEOMETRY_TYPE_NAME) Slice geometry) + public static Block spatialPartitions(@SqlType(StandardTypes.KDB_TREE) Object kdbTree, @SqlType(StandardTypes.GEOMETRY) Slice geometry) { Envelope envelope = deserializeEnvelope(geometry); if (envelope.isEmpty()) { @@ -1409,7 +1407,7 @@ public static Block spatialPartitions(@SqlType(KdbTreeType.NAME) Object kdbTree, @ScalarFunction("from_geojson_geometry") @Description("Returns a spherical geography from a GeoJSON string") - @SqlType(SPHERICAL_GEOGRAPHY_TYPE_NAME) + @SqlType(StandardTypes.SPHERICAL_GEOGRAPHY) public static Slice fromGeoJsonGeometry(@SqlType(VARCHAR) Slice input) { return serialize(jtsGeometryFromJson(input.toStringUtf8())); @@ -1419,7 +1417,7 @@ public static Slice fromGeoJsonGeometry(@SqlType(VARCHAR) Slice input) @ScalarFunction("to_geojson_geometry") @Description("Returns GeoJSON string based on the input spherical geography") @SqlType(VARCHAR) - public static Slice toGeoJsonGeometry(@SqlType(SPHERICAL_GEOGRAPHY_TYPE_NAME) Slice input) + public static Slice toGeoJsonGeometry(@SqlType(StandardTypes.SPHERICAL_GEOGRAPHY) Slice input) { return Slices.utf8Slice(jsonFromJtsGeometry(JtsGeometrySerde.deserialize(input))); } @@ -1428,7 +1426,7 @@ public static Slice toGeoJsonGeometry(@SqlType(SPHERICAL_GEOGRAPHY_TYPE_NAME) Sl @SqlNullable @Description("Returns an array of spatial partition IDs for a geometry representing a set of points within specified distance from the input geometry") @SqlType("array(integer)") - public static Block spatialPartitions(@SqlType(KdbTreeType.NAME) Object kdbTree, @SqlType(GEOMETRY_TYPE_NAME) Slice geometry, @SqlType(DOUBLE) double distance) + public static Block spatialPartitions(@SqlType(StandardTypes.KDB_TREE) Object kdbTree, @SqlType(StandardTypes.GEOMETRY) Slice geometry, @SqlType(DOUBLE) double distance) { if (isNaN(distance)) { throw new TrinoException(INVALID_FUNCTION_ARGUMENT, "distance is NaN"); @@ -1609,7 +1607,7 @@ private interface EnvelopesPredicate @Description("Returns the great-circle distance in meters between two SphericalGeography points.") @ScalarFunction("ST_Distance") @SqlType(DOUBLE) - public static Double stSphericalDistance(@SqlType(SPHERICAL_GEOGRAPHY_TYPE_NAME) Slice left, @SqlType(SPHERICAL_GEOGRAPHY_TYPE_NAME) Slice right) + public static Double stSphericalDistance(@SqlType(StandardTypes.SPHERICAL_GEOGRAPHY) Slice left, @SqlType(StandardTypes.SPHERICAL_GEOGRAPHY) Slice right) { OGCGeometry leftGeometry = deserialize(left); OGCGeometry rightGeometry = deserialize(right); @@ -1639,7 +1637,7 @@ private static void validateSphericalType(String function, OGCGeometry geometry, @Description("Returns the area of a geometry on the Earth's surface using spherical model") @ScalarFunction("ST_Area") @SqlType(DOUBLE) - public static Double stSphericalArea(@SqlType(SPHERICAL_GEOGRAPHY_TYPE_NAME) Slice input) + public static Double stSphericalArea(@SqlType(StandardTypes.SPHERICAL_GEOGRAPHY) Slice input) { OGCGeometry geometry = deserialize(input); if (geometry.isEmpty()) { diff --git a/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/GeometryType.java b/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/GeometryType.java index 346b38e02768..1c3d370d7f15 100644 --- a/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/GeometryType.java +++ b/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/GeometryType.java @@ -20,6 +20,7 @@ import io.trino.spi.block.VariableWidthBlockBuilder; import io.trino.spi.connector.ConnectorSession; import io.trino.spi.type.AbstractVariableWidthType; +import io.trino.spi.type.StandardTypes; import io.trino.spi.type.TypeSignature; import static io.trino.geospatial.serde.GeometrySerde.deserialize; @@ -28,11 +29,10 @@ public class GeometryType extends AbstractVariableWidthType { public static final GeometryType GEOMETRY = new GeometryType(); - public static final String GEOMETRY_TYPE_NAME = "Geometry"; private GeometryType() { - super(new TypeSignature(GEOMETRY_TYPE_NAME), Slice.class); + super(new TypeSignature(StandardTypes.GEOMETRY), Slice.class); } protected GeometryType(TypeSignature signature) diff --git a/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/KdbTreeCasts.java b/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/KdbTreeCasts.java index 3ced2d7da7fa..ecdd69c8aa99 100644 --- a/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/KdbTreeCasts.java +++ b/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/KdbTreeCasts.java @@ -19,6 +19,7 @@ import io.trino.spi.function.LiteralParameters; import io.trino.spi.function.ScalarOperator; import io.trino.spi.function.SqlType; +import io.trino.spi.type.StandardTypes; import static io.trino.spi.StandardErrorCode.INVALID_CAST_ARGUMENT; import static io.trino.spi.function.OperatorType.CAST; @@ -29,7 +30,7 @@ private KdbTreeCasts() {} @LiteralParameters("x") @ScalarOperator(CAST) - @SqlType(KdbTreeType.NAME) + @SqlType(StandardTypes.KDB_TREE) public static Object castVarcharToKdbTree(@SqlType("varchar(x)") Slice json) { try { diff --git a/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/KdbTreeType.java b/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/KdbTreeType.java index 9ee185f17416..9fd318229d53 100644 --- a/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/KdbTreeType.java +++ b/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/KdbTreeType.java @@ -29,6 +29,7 @@ import io.trino.spi.function.FlatVariableWidth; import io.trino.spi.function.ScalarOperator; import io.trino.spi.type.AbstractVariableWidthType; +import io.trino.spi.type.StandardTypes; import io.trino.spi.type.TypeOperatorDeclaration; import io.trino.spi.type.TypeOperators; import io.trino.spi.type.TypeSignature; @@ -49,14 +50,13 @@ public final class KdbTreeType private static final VarHandle INT_HANDLE = MethodHandles.byteArrayViewVarHandle(int[].class, ByteOrder.LITTLE_ENDIAN); public static final KdbTreeType KDB_TREE = new KdbTreeType(); - public static final String NAME = "KdbTree"; private KdbTreeType() { // The KDB tree type should be KdbTree but can not be since KdbTree is in // both the plugin class loader and the system class loader. This was done // so the plan optimizer can process geospatial joins. - super(new TypeSignature(NAME), Object.class); + super(new TypeSignature(StandardTypes.KDB_TREE), Object.class); } @Override diff --git a/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/SpatialPartitioningAggregateFunction.java b/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/SpatialPartitioningAggregateFunction.java index 9fcc38a8245a..c123ccd8349e 100644 --- a/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/SpatialPartitioningAggregateFunction.java +++ b/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/SpatialPartitioningAggregateFunction.java @@ -21,7 +21,6 @@ import io.trino.spi.function.SqlType; import io.trino.spi.type.StandardTypes; -import static io.trino.plugin.geospatial.GeometryType.GEOMETRY_TYPE_NAME; import static io.trino.plugin.geospatial.SpatialPartitioningAggregateFunction.NAME; @AggregationFunction(value = NAME, decomposable = false) @@ -32,7 +31,7 @@ public final class SpatialPartitioningAggregateFunction private SpatialPartitioningAggregateFunction() {} @InputFunction - public static void input(SpatialPartitioningState state, @SqlType(GEOMETRY_TYPE_NAME) Slice slice) + public static void input(SpatialPartitioningState state, @SqlType(StandardTypes.GEOMETRY) Slice slice) { throw new UnsupportedOperationException("spatial_partitioning(geometry) aggregate function should be re-written into spatial_partitioning(geometry, partitionCount)"); } diff --git a/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/SpatialPartitioningInternalAggregateFunction.java b/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/SpatialPartitioningInternalAggregateFunction.java index 9966e612748a..acd84b30b3b9 100644 --- a/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/SpatialPartitioningInternalAggregateFunction.java +++ b/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/SpatialPartitioningInternalAggregateFunction.java @@ -30,7 +30,6 @@ import static io.trino.geospatial.KdbTree.buildKdbTree; import static io.trino.geospatial.serde.GeometrySerde.deserializeEnvelope; -import static io.trino.plugin.geospatial.GeometryType.GEOMETRY_TYPE_NAME; import static io.trino.plugin.geospatial.SpatialPartitioningAggregateFunction.NAME; import static io.trino.spi.type.StandardTypes.INTEGER; import static io.trino.spi.type.VarcharType.VARCHAR; @@ -44,7 +43,7 @@ public final class SpatialPartitioningInternalAggregateFunction private SpatialPartitioningInternalAggregateFunction() {} @InputFunction - public static void input(SpatialPartitioningState state, @SqlType(GEOMETRY_TYPE_NAME) Slice slice, @SqlType(INTEGER) long partitionCount) + public static void input(SpatialPartitioningState state, @SqlType(StandardTypes.GEOMETRY) Slice slice, @SqlType(INTEGER) long partitionCount) { Envelope envelope = deserializeEnvelope(slice); if (envelope.isEmpty()) { diff --git a/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/SphericalGeographyType.java b/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/SphericalGeographyType.java index ce7018a373f3..36d5f6e84f33 100644 --- a/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/SphericalGeographyType.java +++ b/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/SphericalGeographyType.java @@ -20,6 +20,7 @@ import io.trino.spi.block.VariableWidthBlockBuilder; import io.trino.spi.connector.ConnectorSession; import io.trino.spi.type.AbstractVariableWidthType; +import io.trino.spi.type.StandardTypes; import io.trino.spi.type.TypeSignature; import static io.trino.geospatial.serde.GeometrySerde.deserialize; @@ -28,11 +29,10 @@ public class SphericalGeographyType extends AbstractVariableWidthType { public static final SphericalGeographyType SPHERICAL_GEOGRAPHY = new SphericalGeographyType(); - public static final String SPHERICAL_GEOGRAPHY_TYPE_NAME = "SphericalGeography"; private SphericalGeographyType() { - super(new TypeSignature(SPHERICAL_GEOGRAPHY_TYPE_NAME), Slice.class); + super(new TypeSignature(StandardTypes.SPHERICAL_GEOGRAPHY), Slice.class); } @Override diff --git a/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/aggregation/ConvexHullAggregation.java b/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/aggregation/ConvexHullAggregation.java index 75bbfd6f445c..cf5168491e27 100644 --- a/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/aggregation/ConvexHullAggregation.java +++ b/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/aggregation/ConvexHullAggregation.java @@ -27,11 +27,11 @@ import io.trino.spi.function.InputFunction; import io.trino.spi.function.OutputFunction; import io.trino.spi.function.SqlType; +import io.trino.spi.type.StandardTypes; import java.util.Set; import static io.trino.plugin.geospatial.GeometryType.GEOMETRY; -import static io.trino.plugin.geospatial.GeometryType.GEOMETRY_TYPE_NAME; import static io.trino.spi.StandardErrorCode.INVALID_FUNCTION_ARGUMENT; import static java.lang.String.format; @@ -49,7 +49,7 @@ private ConvexHullAggregation() {} @InputFunction public static void input(@AggregationState GeometryState state, - @SqlType(GEOMETRY_TYPE_NAME) Slice input) + @SqlType(StandardTypes.GEOMETRY) Slice input) { OGCGeometry geometry = GeometrySerde.deserialize(input); if (state.getGeometry() == null) { @@ -72,7 +72,7 @@ else if (otherState.getGeometry() != null && !otherState.getGeometry().isEmpty() } } - @OutputFunction(GEOMETRY_TYPE_NAME) + @OutputFunction(StandardTypes.GEOMETRY) public static void output(@AggregationState GeometryState state, BlockBuilder out) { if (state.getGeometry() == null) { diff --git a/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/aggregation/GeometryUnionAgg.java b/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/aggregation/GeometryUnionAgg.java index 52546ec63ca9..b8cb060b5be2 100644 --- a/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/aggregation/GeometryUnionAgg.java +++ b/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/aggregation/GeometryUnionAgg.java @@ -24,9 +24,9 @@ import io.trino.spi.function.InputFunction; import io.trino.spi.function.OutputFunction; import io.trino.spi.function.SqlType; +import io.trino.spi.type.StandardTypes; import static io.trino.plugin.geospatial.GeometryType.GEOMETRY; -import static io.trino.plugin.geospatial.GeometryType.GEOMETRY_TYPE_NAME; /** * Aggregate form of ST_Union which takes a set of geometries and unions them into a single geometry using an iterative approach, @@ -39,7 +39,7 @@ public final class GeometryUnionAgg private GeometryUnionAgg() {} @InputFunction - public static void input(@AggregationState GeometryState state, @SqlType(GEOMETRY_TYPE_NAME) Slice input) + public static void input(@AggregationState GeometryState state, @SqlType(StandardTypes.GEOMETRY) Slice input) { OGCGeometry geometry = GeometrySerde.deserialize(input); if (state.getGeometry() == null) { @@ -61,7 +61,7 @@ else if (otherState.getGeometry() != null && !otherState.getGeometry().isEmpty() } } - @OutputFunction(GEOMETRY_TYPE_NAME) + @OutputFunction(StandardTypes.GEOMETRY) public static void output(@AggregationState GeometryState state, BlockBuilder out) { if (state.getGeometry() == null) {