Repository: asterixdb Updated Branches: refs/heads/master 65f6c3e8b -> 8cc882538
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8cc88253/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/BuiltinTypeMap.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/BuiltinTypeMap.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/BuiltinTypeMap.java index a531add..14f76eb 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/BuiltinTypeMap.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/BuiltinTypeMap.java @@ -79,6 +79,7 @@ public class BuiltinTypeMap { _builtinTypeMap.put("null", BuiltinType.ANULL); _builtinTypeMap.put("uuid", BuiltinType.AUUID); _builtinTypeMap.put("shortwithouttypeinfo", BuiltinType.SHORTWITHOUTTYPEINFO); + _builtinTypeMap.put("geometry", BuiltinType.AGEOMETRY); } private BuiltinTypeMap() { http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8cc88253/asterixdb/asterix-om/pom.xml ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/pom.xml b/asterixdb/asterix-om/pom.xml index 45cf7c8..3be3e2f 100644 --- a/asterixdb/asterix-om/pom.xml +++ b/asterixdb/asterix-om/pom.xml @@ -122,5 +122,10 @@ <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </dependency> + <dependency> + <groupId>com.esri.geometry</groupId> + <artifactId>esri-geometry-api</artifactId> + <version>2.0.0</version> + </dependency> </dependencies> </project> http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8cc88253/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AObjectPrinterFactory.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AObjectPrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AObjectPrinterFactory.java index 21880dd..e58f210 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AObjectPrinterFactory.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AObjectPrinterFactory.java @@ -20,6 +20,7 @@ package org.apache.asterix.dataflow.data.nontagged.printers.adm; import java.io.PrintStream; +import org.apache.asterix.dataflow.data.nontagged.printers.json.clean.AGeometryPrinterFactory; import org.apache.asterix.om.pointables.AListVisitablePointable; import org.apache.asterix.om.pointables.ARecordVisitablePointable; import org.apache.asterix.om.pointables.base.DefaultOpenFieldType; @@ -116,6 +117,9 @@ public class AObjectPrinterFactory implements IPrinterFactory { case SHORTWITHOUTTYPEINFO: ShortWithoutTypeInfoPrinterFactory.PRINTER.print(b, s, l, ps); return true; + case GEOMETRY: + AGeometryPrinterFactory.PRINTER.print(b, s, l, ps); + return true; default: return false; } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8cc88253/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AGeometryPrinterFactory.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AGeometryPrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AGeometryPrinterFactory.java new file mode 100644 index 0000000..8e51e35 --- /dev/null +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AGeometryPrinterFactory.java @@ -0,0 +1,47 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ +package org.apache.asterix.dataflow.data.nontagged.printers.json.clean; + +import com.esri.core.geometry.ogc.OGCGeometry; +import org.apache.asterix.dataflow.data.nontagged.serde.AGeometrySerializerDeserializer; +import org.apache.hyracks.algebricks.data.IPrinter; +import org.apache.hyracks.algebricks.data.IPrinterFactory; + +import java.io.ByteArrayInputStream; +import java.io.DataInput; +import java.io.DataInputStream; +import java.io.PrintStream; + +public class AGeometryPrinterFactory implements IPrinterFactory { + + private static final long serialVersionUID = 1L; + public static final AGeometryPrinterFactory INSTANCE = new AGeometryPrinterFactory(); + + public static final IPrinter PRINTER = (byte[] b, int s, int l, PrintStream ps) -> { + ByteArrayInputStream inStream = new ByteArrayInputStream(b, s + 1, l - 1); + DataInput dataIn = new DataInputStream(inStream); + OGCGeometry geometry = AGeometrySerializerDeserializer.INSTANCE.deserialize(dataIn).getGeometry(); + ps.print(geometry.asGeoJson()); + }; + + @Override + public IPrinter createPrinter() { + return PRINTER; + } +} http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8cc88253/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AObjectPrinterFactory.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AObjectPrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AObjectPrinterFactory.java index 5cae68c..27fc7eb 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AObjectPrinterFactory.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AObjectPrinterFactory.java @@ -113,6 +113,9 @@ public class AObjectPrinterFactory implements IPrinterFactory { case UUID: AUUIDPrinterFactory.PRINTER.print(b, s, l, ps); return true; + case GEOMETRY: + AGeometryPrinterFactory.PRINTER.print(b, s, l, ps); + return true; default: return false; } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8cc88253/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AGeometrySerializerDeserializer.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AGeometrySerializerDeserializer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AGeometrySerializerDeserializer.java new file mode 100644 index 0000000..14450b3 --- /dev/null +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AGeometrySerializerDeserializer.java @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ +package org.apache.asterix.dataflow.data.nontagged.serde; + +import com.esri.core.geometry.OperatorImportFromWkb; +import com.esri.core.geometry.SpatialReference; +import com.esri.core.geometry.WkbImportFlags; +import com.esri.core.geometry.ogc.OGCGeometry; +import org.apache.asterix.om.base.AGeometry; +import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer; +import org.apache.hyracks.api.exceptions.HyracksDataException; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.nio.ByteBuffer; + +public class AGeometrySerializerDeserializer implements ISerializerDeserializer<AGeometry> { + + private static final long serialVersionUID = 1L; + + public static final AGeometrySerializerDeserializer INSTANCE = new AGeometrySerializerDeserializer(); + + /**Use WGS 84 (EPSG:4326) as the default coordinate reference system*/ + public static final SpatialReference DEFAULT_CRS = SpatialReference.create(4326); + + private AGeometrySerializerDeserializer() { + } + + @Override + public AGeometry deserialize(DataInput in) throws HyracksDataException { + try { + int length = in.readInt(); + byte[] bytes = new byte[length]; + in.readFully(bytes); + ByteBuffer buffer = ByteBuffer.wrap(bytes); + OGCGeometry geometry = OGCGeometry.createFromOGCStructure( + OperatorImportFromWkb.local().executeOGC(WkbImportFlags.wkbImportDefaults, buffer, null), + DEFAULT_CRS); + return new AGeometry(geometry); + } catch (IOException e) { + throw new HyracksDataException(e); + } + } + + @Override + public void serialize(AGeometry instance, DataOutput out) throws HyracksDataException { + try { + OGCGeometry geometry = instance.getGeometry(); + byte[] buffer = geometry.asBinary().array(); + // For efficiency, we store the size of the geometry in bytes in the first 32 bits + // This allows AsterixDB to skip over this attribute if needed. + out.writeInt(buffer.length); + out.write(buffer); + } catch (IOException e) { + throw HyracksDataException.create(e); + } + } +} http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8cc88253/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AObjectSerializerDeserializer.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AObjectSerializerDeserializer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AObjectSerializerDeserializer.java index aef4ca1..57f3449 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AObjectSerializerDeserializer.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AObjectSerializerDeserializer.java @@ -30,6 +30,7 @@ import org.apache.asterix.om.base.ADateTime; import org.apache.asterix.om.base.ADouble; import org.apache.asterix.om.base.ADuration; import org.apache.asterix.om.base.AFloat; +import org.apache.asterix.om.base.AGeometry; import org.apache.asterix.om.base.AInt16; import org.apache.asterix.om.base.AInt32; import org.apache.asterix.om.base.AInt64; @@ -120,6 +121,8 @@ public class AObjectSerializerDeserializer implements ISerializerDeserializer<IA return AOrderedListSerializerDeserializer.SCHEMALESS_INSTANCE.deserialize(in); case MULTISET: return AUnorderedListSerializerDeserializer.SCHEMALESS_INSTANCE.deserialize(in); + case GEOMETRY: + return AGeometrySerializerDeserializer.INSTANCE.deserialize(in); default: throw new NotImplementedException("No serializer/deserializer implemented for type " + typeTag + " ."); } @@ -213,6 +216,9 @@ public class AObjectSerializerDeserializer implements ISerializerDeserializer<IA case TYPE: ATypeSerializerDeserializer.INSTANCE.serialize((IAType) instance, out); break; + case GEOMETRY: + AGeometrySerializerDeserializer.INSTANCE.serialize((AGeometry) instance, out); + break; default: throw new HyracksDataException( "No serializer/deserializer implemented for type " + t.getTypeTag() + " ."); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8cc88253/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/SerializerDeserializerProvider.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/SerializerDeserializerProvider.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/SerializerDeserializerProvider.java index 6f281bd..7ede216 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/SerializerDeserializerProvider.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/SerializerDeserializerProvider.java @@ -32,6 +32,7 @@ import org.apache.asterix.dataflow.data.nontagged.serde.ADayTimeDurationSerializ import org.apache.asterix.dataflow.data.nontagged.serde.ADoubleSerializerDeserializer; import org.apache.asterix.dataflow.data.nontagged.serde.ADurationSerializerDeserializer; import org.apache.asterix.dataflow.data.nontagged.serde.AFloatSerializerDeserializer; +import org.apache.asterix.dataflow.data.nontagged.serde.AGeometrySerializerDeserializer; import org.apache.asterix.dataflow.data.nontagged.serde.AInt16SerializerDeserializer; import org.apache.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer; import org.apache.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer; @@ -162,6 +163,8 @@ public class SerializerDeserializerProvider implements ISerializerDeserializerPr return AUUIDSerializerDeserializer.INSTANCE; case SHORTWITHOUTTYPEINFO: return ShortSerializerDeserializer.INSTANCE; + case GEOMETRY: + return AGeometrySerializerDeserializer.INSTANCE; default: throw new NotImplementedException( "No serializer/deserializer implemented for type " + aqlType.getTypeTag() + " ."); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8cc88253/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/AGeometry.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/AGeometry.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/AGeometry.java new file mode 100644 index 0000000..3b9c55d --- /dev/null +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/AGeometry.java @@ -0,0 +1,77 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ +package org.apache.asterix.om.base; + +import com.esri.core.geometry.ogc.OGCGeometry; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import org.apache.asterix.om.types.BuiltinType; +import org.apache.asterix.om.types.IAType; + +import java.io.IOException; + +public class AGeometry implements IAObject { + + protected OGCGeometry geometry; + + public AGeometry(OGCGeometry geometry) { + this.geometry = geometry; + } + + public OGCGeometry getGeometry() { + return geometry; + } + + @Override + public IAType getType() { + return BuiltinType.AGEOMETRY; + } + + @Override + public boolean deepEqual(IAObject obj) { + if (!(obj instanceof AGeometry)) { + return false; + } else { + AGeometry p = (AGeometry) obj; + return p.geometry.equals(geometry); + } + } + + @Override + public int hash() { + return geometry.hashCode(); + } + + @Override + public String toString() { + return geometry.toString(); + } + + @Override + public ObjectNode toJSON() { + ObjectMapper om = new ObjectMapper(); + ObjectNode json = null; + try { + json = (ObjectNode) om.readTree(geometry.asGeoJson()); + } catch (IOException e) { + throw new RuntimeException(e); + } + return json; + } +} http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8cc88253/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/AMutableGeometry.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/AMutableGeometry.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/AMutableGeometry.java new file mode 100644 index 0000000..346d68a --- /dev/null +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/AMutableGeometry.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ +package org.apache.asterix.om.base; + +import com.esri.core.geometry.OGCStructure; +import com.esri.core.geometry.OperatorImportFromWkt; +import com.esri.core.geometry.SpatialReference; +import com.esri.core.geometry.WktImportFlags; +import com.esri.core.geometry.ogc.OGCGeometry; + +public class AMutableGeometry extends AGeometry { + + private OperatorImportFromWkt wktImporter; + + public AMutableGeometry(OGCGeometry geom) { + super(geom); + wktImporter = OperatorImportFromWkt.local(); + } + + public void setValue(OGCGeometry geom) { + this.geometry = geom; + } + + public void parseWKT(String wkt) { + OGCStructure structure; + + structure = wktImporter.executeOGC(WktImportFlags.wktImportNonTrusted, wkt, null); + this.geometry = OGCGeometry.createFromOGCStructure(structure, SpatialReference.create(4326)); + } +} http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8cc88253/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java index 92617ee..03b5fc9 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java @@ -36,6 +36,7 @@ import org.apache.asterix.om.typecomputer.impl.ADayTimeDurationTypeComputer; import org.apache.asterix.om.typecomputer.impl.ADoubleTypeComputer; import org.apache.asterix.om.typecomputer.impl.ADurationTypeComputer; import org.apache.asterix.om.typecomputer.impl.AFloatTypeComputer; +import org.apache.asterix.om.typecomputer.impl.AGeometryTypeComputer; import org.apache.asterix.om.typecomputer.impl.AInt16TypeComputer; import org.apache.asterix.om.typecomputer.impl.AInt32TypeComputer; import org.apache.asterix.om.typecomputer.impl.AInt64TypeComputer; @@ -207,6 +208,8 @@ public class BuiltinFunctions { new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "get-object-field-value", 2); public static final FunctionIdentifier RECORD_PAIRS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "object-pairs", FunctionIdentifier.VARARGS); + public static final FunctionIdentifier GEOMETRY_CONSTRUCTOR = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-geom-from-geojson", FunctionIdentifier.VARARGS); // numeric public static final FunctionIdentifier NUMERIC_UNARY_MINUS = @@ -728,6 +731,126 @@ public class BuiltinFunctions { public static final FunctionIdentifier CREATE_QUERY_UID = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "create-query-uid", 0); + //Geo + public static final FunctionIdentifier ST_AREA = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-area", 1); + public static final FunctionIdentifier ST_MAKE_POINT = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-make-point", 2); + public static final FunctionIdentifier ST_MAKE_POINT3D = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-make-point", 3); + public static final FunctionIdentifier ST_MAKE_POINT3D_M = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-make-point", 4); + public static final FunctionIdentifier ST_INTERSECTS = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-intersects", 2); + public static final FunctionIdentifier ST_UNION = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-union", 2); + public static final FunctionIdentifier ST_IS_COLLECTION = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-is-collection", 1); + public static final FunctionIdentifier ST_CONTAINS = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-contains", 2); + public static final FunctionIdentifier ST_CROSSES = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-crosses", 2); + public static final FunctionIdentifier ST_DISJOINT = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-disjoint", 2); + public static final FunctionIdentifier ST_EQUALS = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-equals", 2); + public static final FunctionIdentifier ST_OVERLAPS = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-overlaps", 2); + public static final FunctionIdentifier ST_TOUCHES = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-touches", 2); + public static final FunctionIdentifier ST_WITHIN = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-within", 2); + public static final FunctionIdentifier ST_IS_EMPTY = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-is-empty", 1); + public static final FunctionIdentifier ST_IS_SIMPLE = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-is-simple", 1); + public static final FunctionIdentifier ST_COORD_DIM = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-coord-dim", 1); + public static final FunctionIdentifier ST_DIMENSION = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-dimension", 1); + public static final FunctionIdentifier GEOMETRY_TYPE = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "geometry-type", 1); + public static final FunctionIdentifier ST_M = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-m", 1); + public static final FunctionIdentifier ST_N_RINGS = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-n-rings", 1); + public static final FunctionIdentifier ST_N_POINTS = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-n-points", 1); + public static final FunctionIdentifier ST_NUM_GEOMETRIIES = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-num-geometries", 1); + public static final FunctionIdentifier ST_NUM_INTERIOR_RINGS = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-num-interior-rings", 1); + public static final FunctionIdentifier ST_SRID = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-srid", 1); + public static final FunctionIdentifier ST_X = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-x", 1); + public static final FunctionIdentifier ST_Y = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-y", 1); + public static final FunctionIdentifier ST_X_MAX = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-x-max", 1); + public static final FunctionIdentifier ST_X_MIN = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-x-min", 1); + public static final FunctionIdentifier ST_Y_MAX = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-y-max", 1); + public static final FunctionIdentifier ST_Y_MIN = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-y-min", 1); + public static final FunctionIdentifier ST_Z = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-z", 1); + public static final FunctionIdentifier ST_Z_MIN = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-z-min", 1); + public static final FunctionIdentifier ST_Z_MAX = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-z-max", 1); + public static final FunctionIdentifier ST_AS_BINARY = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-as-binary", 1); + public static final FunctionIdentifier ST_AS_TEXT = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-as-text", 1); + public static final FunctionIdentifier ST_AS_GEOJSON = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-as-geojson", 1); + public static final FunctionIdentifier ST_DISTANCE = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-distance", 2); + public static final FunctionIdentifier ST_LENGTH = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-length", 1); + public static final FunctionIdentifier SCALAR_ST_UNION_AGG = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-union", 1); + public static final FunctionIdentifier ST_UNION_AGG = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-union-agg", 1); + public static final FunctionIdentifier ST_GEOM_FROM_TEXT = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-geom-from-text", 1); + public static final FunctionIdentifier ST_GEOM_FROM_TEXT_SRID = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-geom-from-text", 2); + public static final FunctionIdentifier ST_GEOM_FROM_WKB = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-geom-from-wkb", 1); + public static final FunctionIdentifier ST_GEOM_FROM_WKB_SRID = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-geom-from-wkb", 2); + public static final FunctionIdentifier ST_LINE_FROM_MULTIPOINT = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-line-from-multipoint", 1); + public static final FunctionIdentifier ST_MAKE_ENVELOPE = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-make-envelope", 5); + public static final FunctionIdentifier ST_IS_CLOSED = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-is-closed", 1); + public static final FunctionIdentifier ST_IS_RING = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-is-ring", 1); + public static final FunctionIdentifier ST_RELATE = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-relate", 3); + public static final FunctionIdentifier ST_BOUNDARY = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-boundary", 1); + public static final FunctionIdentifier ST_END_POINT = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-end-point", 1); + public static final FunctionIdentifier ST_ENVELOPE = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-envelope", 1); + public static final FunctionIdentifier ST_EXTERIOR_RING = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-exterior-ring", 1); + public static final FunctionIdentifier ST_GEOMETRY_N = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-geometry-n", 2); + public static final FunctionIdentifier ST_INTERIOR_RING_N = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-interior-ring-n", 2); + public static final FunctionIdentifier ST_POINT_N = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-point-n", 2); + public static final FunctionIdentifier ST_START_POINT = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-start-point", 1); + public static final FunctionIdentifier ST_DIFFERENCE = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-difference", 2); + public static final FunctionIdentifier ST_INTERSECTION = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-intersection", 2); + public static final FunctionIdentifier ST_SYM_DIFFERENCE = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-sym-difference", 2); + public static final FunctionIdentifier ST_POLYGONIZE = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "st-polygonize", 1); + // Spatial and temporal type accessors public static final FunctionIdentifier ACCESSOR_TEMPORAL_YEAR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "get-year", 1); @@ -1183,6 +1306,71 @@ public class BuiltinFunctions { addFunction(GET_CIRCLE_CENTER_ACCESSOR, APointTypeComputer.INSTANCE, true); addFunction(GET_POINTS_LINE_RECTANGLE_POLYGON_ACCESSOR, OrderedListOfAPointTypeComputer.INSTANCE, true); + //geo functions + addFunction(ST_AREA, ADoubleTypeComputer.INSTANCE, true); + addFunction(ST_MAKE_POINT, AGeometryTypeComputer.INSTANCE, true); + addFunction(ST_MAKE_POINT3D, AGeometryTypeComputer.INSTANCE, true); + addFunction(ST_MAKE_POINT3D_M, AGeometryTypeComputer.INSTANCE, true); + addFunction(ST_INTERSECTS, ABooleanTypeComputer.INSTANCE, true); + addFunction(ST_UNION, AGeometryTypeComputer.INSTANCE, true); + addFunction(ST_IS_COLLECTION, ABooleanTypeComputer.INSTANCE, true); + addFunction(ST_CONTAINS, ABooleanTypeComputer.INSTANCE, true); + addFunction(ST_CROSSES, ABooleanTypeComputer.INSTANCE, true); + addFunction(ST_DISJOINT, ABooleanTypeComputer.INSTANCE, true); + addFunction(ST_EQUALS, ABooleanTypeComputer.INSTANCE, true); + addFunction(ST_OVERLAPS, ABooleanTypeComputer.INSTANCE, true); + addFunction(ST_TOUCHES, ABooleanTypeComputer.INSTANCE, true); + addFunction(ST_WITHIN, ABooleanTypeComputer.INSTANCE, true); + addFunction(ST_IS_EMPTY, ABooleanTypeComputer.INSTANCE, true); + addFunction(ST_IS_SIMPLE, ABooleanTypeComputer.INSTANCE, true); + addFunction(ST_IS_COLLECTION, ABooleanTypeComputer.INSTANCE, true); + addFunction(ST_COORD_DIM, AInt32TypeComputer.INSTANCE, true); + addFunction(ST_DIMENSION, AInt32TypeComputer.INSTANCE, true); + addFunction(GEOMETRY_TYPE, AStringTypeComputer.INSTANCE, true); + addFunction(ST_M, ADoubleTypeComputer.INSTANCE, true); + addFunction(ST_N_RINGS, AInt32TypeComputer.INSTANCE, true); + addFunction(ST_N_POINTS, AInt32TypeComputer.INSTANCE, true); + addFunction(ST_NUM_GEOMETRIIES, AInt32TypeComputer.INSTANCE, true); + addFunction(ST_NUM_INTERIOR_RINGS, AInt32TypeComputer.INSTANCE, true); + addFunction(ST_SRID, AInt32TypeComputer.INSTANCE, true); + addFunction(ST_X, ADoubleTypeComputer.INSTANCE, true); + addFunction(ST_Y, ADoubleTypeComputer.INSTANCE, true); + addFunction(ST_X_MAX, ADoubleTypeComputer.INSTANCE, true); + addFunction(ST_X_MIN, ADoubleTypeComputer.INSTANCE, true); + addFunction(ST_Y_MAX, ADoubleTypeComputer.INSTANCE, true); + addFunction(ST_Y_MIN, ADoubleTypeComputer.INSTANCE, true); + addFunction(ST_Z, ADoubleTypeComputer.INSTANCE, true); + addFunction(ST_Z_MIN, ADoubleTypeComputer.INSTANCE, true); + addFunction(ST_Z_MAX, ADoubleTypeComputer.INSTANCE, true); + addFunction(ST_AS_BINARY, ABinaryTypeComputer.INSTANCE, true); + addFunction(ST_AS_TEXT, AStringTypeComputer.INSTANCE, true); + addFunction(ST_AS_GEOJSON, AStringTypeComputer.INSTANCE, true); + addFunction(ST_DISTANCE, ADoubleTypeComputer.INSTANCE, true); + addFunction(ST_LENGTH, ADoubleTypeComputer.INSTANCE, true); + addFunction(ST_GEOM_FROM_TEXT, AGeometryTypeComputer.INSTANCE, true); + addFunction(ST_GEOM_FROM_TEXT_SRID, AGeometryTypeComputer.INSTANCE, true); + addFunction(ST_GEOM_FROM_WKB, AGeometryTypeComputer.INSTANCE, true); + addFunction(ST_GEOM_FROM_WKB_SRID, AGeometryTypeComputer.INSTANCE, true); + addFunction(ST_LINE_FROM_MULTIPOINT, AGeometryTypeComputer.INSTANCE, true); + addFunction(ST_MAKE_ENVELOPE, AGeometryTypeComputer.INSTANCE, true); + addFunction(ST_IS_CLOSED, ABooleanTypeComputer.INSTANCE, true); + addFunction(ST_IS_RING, ABooleanTypeComputer.INSTANCE, true); + addFunction(ST_RELATE, ABooleanTypeComputer.INSTANCE, true); + addFunction(ST_BOUNDARY, AGeometryTypeComputer.INSTANCE, true); + addFunction(ST_END_POINT, AGeometryTypeComputer.INSTANCE, true); + addFunction(ST_ENVELOPE, AGeometryTypeComputer.INSTANCE, true); + addFunction(ST_EXTERIOR_RING, AGeometryTypeComputer.INSTANCE, true); + addFunction(ST_GEOMETRY_N, AGeometryTypeComputer.INSTANCE, true); + addFunction(ST_INTERIOR_RING_N, AGeometryTypeComputer.INSTANCE, true); + addFunction(ST_POINT_N, AGeometryTypeComputer.INSTANCE, true); + addFunction(ST_DIFFERENCE, AGeometryTypeComputer.INSTANCE, true); + addFunction(ST_START_POINT, AGeometryTypeComputer.INSTANCE, true); + addFunction(ST_INTERSECTION, AGeometryTypeComputer.INSTANCE, true); + addFunction(ST_SYM_DIFFERENCE, AGeometryTypeComputer.INSTANCE, true); + addFunction(SCALAR_ST_UNION_AGG, AGeometryTypeComputer.INSTANCE, true); + addPrivateFunction(ST_UNION_AGG, AGeometryTypeComputer.INSTANCE, true); + addFunction(ST_POLYGONIZE, AGeometryTypeComputer.INSTANCE, true); + // Binary functions addFunction(BINARY_HEX_CONSTRUCTOR, ABinaryTypeComputer.INSTANCE, true); addFunction(BINARY_BASE64_CONSTRUCTOR, ABinaryTypeComputer.INSTANCE, true); @@ -1215,6 +1403,7 @@ public class BuiltinFunctions { addFunction(GET_RECORD_FIELDS, OrderedListOfAnyTypeComputer.INSTANCE, true); addFunction(GET_RECORD_FIELD_VALUE, FieldAccessNestedResultType.INSTANCE, true); addFunction(RECORD_PAIRS, RecordPairsTypeComputer.INSTANCE, true); + addFunction(GEOMETRY_CONSTRUCTOR, AGeometryTypeComputer.INSTANCE, true); // temporal type accessors addFunction(ACCESSOR_TEMPORAL_YEAR, AInt64TypeComputer.INSTANCE, true); @@ -1546,6 +1735,13 @@ public class BuiltinFunctions { addDistinctAgg(SQL_SUM_DISTINCT, SCALAR_SQL_SUM); addScalarAgg(SQL_SUM_DISTINCT, SCALAR_SQL_SUM_DISTINCT); + + // SPATIAL AGGREGATES + + addAgg(ST_UNION_AGG); + addLocalAgg(ST_UNION_AGG, ST_UNION_AGG); + addIntermediateAgg(ST_UNION_AGG, ST_UNION_AGG); + addGlobalAgg(ST_UNION_AGG, ST_UNION_AGG); } static { http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8cc88253/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/AGeometryTypeComputer.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/AGeometryTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/AGeometryTypeComputer.java new file mode 100644 index 0000000..e85410a --- /dev/null +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/AGeometryTypeComputer.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ +package org.apache.asterix.om.typecomputer.impl; + +import org.apache.asterix.om.typecomputer.base.AbstractResultTypeComputer; +import org.apache.asterix.om.types.BuiltinType; +import org.apache.asterix.om.types.IAType; +import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; +import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression; + +public class AGeometryTypeComputer extends AbstractResultTypeComputer { + + public static final AGeometryTypeComputer INSTANCE = new AGeometryTypeComputer(); + + private AGeometryTypeComputer() { + } + + @Override + protected IAType getResultType(ILogicalExpression expr, IAType... strippedInputTypes) throws AlgebricksException { + return BuiltinType.AGEOMETRY; + } +} http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8cc88253/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ATypeTag.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ATypeTag.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ATypeTag.java index 825ed70..a79588d 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ATypeTag.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ATypeTag.java @@ -66,7 +66,8 @@ public enum ATypeTag implements IEnumSerializer { DAYTIMEDURATION(37), UUID(38), SHORTWITHOUTTYPEINFO(40), - NULL(41); + NULL(41), + GEOMETRY(42); /* * Serialized Tags begin @@ -100,6 +101,7 @@ public enum ATypeTag implements IEnumSerializer { public static final byte SERIALIZED_FLOAT_TYPE_TAG = FLOAT.serialize(); public static final byte SERIALIZED_BINARY_TYPE_TAG = BINARY.serialize(); public static final byte SERIALIZED_UUID_TYPE_TAG = UUID.serialize(); + public static final byte SERIALIZED_GEOMETRY_TYPE_TAG = GEOMETRY.serialize(); /* * Serialized Tags end http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8cc88253/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java index 3037e7c..a36e0e4 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java @@ -682,6 +682,33 @@ public abstract class BuiltinType implements IAType { } }; + public final static BuiltinType AGEOMETRY = new LowerCaseConstructorType() { + + private static final long serialVersionUID = 1L; + + @Override + public String getDisplayName() { + return "AGEOMETRY"; + } + + @Override + public ATypeTag getTypeTag() { + return ATypeTag.GEOMETRY; + } + + @Override + public String getTypeName() { + return "geometry"; + } + + @Override + public ObjectNode toJSON() { + ObjectNode type = new ObjectMapper().createObjectNode(); + type.put("type", "AGEOMETRY"); + return type; + } + }; + public final static BuiltinType ACIRCLE = new LowerCaseConstructorType() { private static final long serialVersionUID = 1L; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8cc88253/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/TypeTagUtil.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/TypeTagUtil.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/TypeTagUtil.java index cfc1b55..254dbee 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/TypeTagUtil.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/TypeTagUtil.java @@ -88,6 +88,8 @@ public class TypeTagUtil { return AUnorderedListType.FULLY_OPEN_UNORDEREDLIST_TYPE; case ARRAY: return AOrderedListType.FULL_OPEN_ORDEREDLIST_TYPE; + case GEOMETRY: + return BuiltinType.AGEOMETRY; default: // TODO(tillw) should be an internal error throw new HyracksDataException("Typetag " + typeTag + " is not a built-in type"); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8cc88253/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/NonTaggedFormatUtil.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/NonTaggedFormatUtil.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/NonTaggedFormatUtil.java index 8558538..7da0263 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/NonTaggedFormatUtil.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/NonTaggedFormatUtil.java @@ -21,6 +21,7 @@ package org.apache.asterix.om.utils; import org.apache.asterix.common.config.DatasetConfig.IndexType; import org.apache.asterix.common.exceptions.ErrorCode; import org.apache.asterix.dataflow.data.nontagged.serde.AInt16SerializerDeserializer; +import org.apache.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer; import org.apache.asterix.dataflow.data.nontagged.serde.AIntervalSerializerDeserializer; import org.apache.asterix.dataflow.data.nontagged.serde.AOrderedListSerializerDeserializer; import org.apache.asterix.dataflow.data.nontagged.serde.ARecordSerializerDeserializer; @@ -68,6 +69,7 @@ public final class NonTaggedFormatUtil { case ARRAY: case MULTISET: case POLYGON: + case GEOMETRY: case ANY: return false; default: @@ -193,6 +195,14 @@ public final class NonTaggedFormatUtil { } else { return AUnorderedListSerializerDeserializer.getUnorderedListLength(serNonTaggedAObject, offset) - 1; } + case GEOMETRY: + // Since Geometry is variable size, we store its size at the first 32 bits for efficiency + // @see: STGeomFromTextDescriptor#createEvaluatorFactory, AGeometrySerializerDeserializer#serialize + if (tagged) { + return AInt32SerializerDeserializer.getInt(serNonTaggedAObject, offset + 1) + 4; + } else { + return AInt32SerializerDeserializer.getInt(serNonTaggedAObject, offset) + 4; + } default: throw new NotImplementedException( "No getLength implemented for a value of this type " + typeTag + " ."); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8cc88253/asterixdb/asterix-server/pom.xml ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-server/pom.xml b/asterixdb/asterix-server/pom.xml index fd6dd79..c334509 100644 --- a/asterixdb/asterix-server/pom.xml +++ b/asterixdb/asterix-server/pom.xml @@ -372,6 +372,7 @@ <usedDependency>org.apache.asterix:asterix-external-data</usedDependency> <usedDependency>org.codehaus.mojo.appassembler:appassembler-booter</usedDependency> <usedDependency>org.apache.asterix:asterix-fuzzyjoin</usedDependency> + <usedDependency>org.apache.asterix:asterix-geo</usedDependency> </usedDependencies> </configuration> </plugin> @@ -625,5 +626,10 @@ <artifactId>hyracks-test-support</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>org.apache.asterix</groupId> + <artifactId>asterix-geo</artifactId> + <version>${project.version}</version> + </dependency> </dependencies> </project> http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8cc88253/asterixdb/pom.xml ---------------------------------------------------------------------- diff --git a/asterixdb/pom.xml b/asterixdb/pom.xml index b555cde..45d5297 100644 --- a/asterixdb/pom.xml +++ b/asterixdb/pom.xml @@ -802,6 +802,7 @@ <module>asterix-active</module> <module>asterix-client-helper</module> <module>asterix-license</module> + <module>asterix-geo</module> </modules> <dependencyManagement>
