Merge commit '6453ecf2f0dff1ec1306c8c5c1e4f81a27755431' from release-0.9.4-pre-rc
Change-Id: I6baed7a75ec38755d6e040f2b7f1ede54c191f0f Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/abcdb802 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/abcdb802 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/abcdb802 Branch: refs/heads/master Commit: abcdb802150072c20ddb758fed0cac48b529e9a5 Parents: 8cc8825 6453ecf Author: Michael Blow <[email protected]> Authored: Tue Mar 27 17:33:13 2018 -0400 Committer: Michael Blow <[email protected]> Committed: Tue Mar 27 18:09:01 2018 -0400 ---------------------------------------------------------------------- .../optimizer/rules/am/BTreeAccessMethod.java | 17 +- .../api/http/server/NCQueryServiceServlet.java | 8 +- .../api/http/server/QueryServiceServlet.java | 48 ++-- .../message/ExecuteStatementRequestMessage.java | 14 +- .../apache/asterix/app/nc/RecoveryManager.java | 15 +- .../apache/asterix/app/nc/ReplicaManager.java | 6 + .../asterix/app/result/ResultPrinter.java | 4 +- .../asterix/app/translator/QueryTranslator.java | 2 +- .../hyracks/bootstrap/NCApplication.java | 1 - .../asterix/runtime/ParseDurationTest.java | 4 +- .../composite-prefix.1.ddl.sqlpp | 35 +++ .../composite-prefix.2.update.sqlpp | 28 ++ .../composite-prefix.3.query.sqlpp | 27 ++ .../query-ASTERIXDB-2334.1.ddl.sqlpp | 39 +++ .../query-ASTERIXDB-2334.2.update.sqlpp | 28 ++ .../query-ASTERIXDB-920.3.query.sqlpp | 26 ++ .../queries_sqlpp/objects/ObjectsQueries.xml | 10 + .../object_length/object_length.1.ddl.sqlpp | 49 ++++ .../object_length/object_length.2.update.sqlpp | 29 ++ .../object_length/object_length.3.query.sqlpp | 56 ++++ .../object_names/object_names.1.ddl.sqlpp | 49 ++++ .../object_names/object_names.2.update.sqlpp | 29 ++ .../object_names/object_names.3.query.sqlpp | 59 ++++ .../composite-low-high/composite-low-high.1.adm | 2 +- .../composite-prefix/composite-prefix.1.adm | 2 + .../query-ASTERIXDB-2334.1.adm | 3 + .../objects/object_length/object_length.3.adm | 1 + .../objects/object_names/object_names.3.adm | 1 + .../src/test/resources/runtimets/testsuite.xml | 4 +- .../resources/runtimets/testsuite_sqlpp.xml | 10 + .../org/apache/asterix/common/api/Duration.java | 39 ++- .../common/config/AsterixProperties.java | 2 +- .../context/PrimaryIndexOperationTracker.java | 2 +- .../LSMInsertDeleteOperatorNodePushable.java | 2 +- .../asterix/common/exceptions/ErrorCode.java | 2 + .../asterix/common/storage/IReplicaManager.java | 8 + .../main/resources/asx_errormsg/en.properties | 2 + .../src/main/markdown/builtins/8_record.md | 54 ++++ .../src/main/markdown/sqlpp/3_query.md | 5 +- .../dataflow/FeedStreamDataFlowController.java | 2 +- .../dataflow/RecordDataFlowController.java | 2 +- .../dataflow/StreamDataFlowController.java | 2 +- .../external/dataset/adapter/LookupAdapter.java | 4 +- .../external/feed/dataflow/FrameSpiller.java | 6 +- .../external/indexing/FileOffsetIndexer.java | 4 +- .../external/indexing/IndexingScheduler.java | 6 +- .../indexing/RecordColumnarIndexer.java | 4 +- .../external/input/HDFSDataSourceFactory.java | 2 +- .../record/reader/hdfs/HDFSRecordReader.java | 2 +- .../reader/rss/RSSRecordReaderFactory.java | 2 +- .../stream/StreamRecordReaderFactory.java | 4 +- .../reader/twitter/TwitterPullRecordReader.java | 2 +- .../twitter/TwitterRecordReaderFactory.java | 2 +- .../external/input/stream/HDFSInputStream.java | 2 +- .../library/ExternalFunctionProvider.java | 6 +- .../external/library/java/base/JObject.java | 2 +- .../external/library/java/base/JRecord.java | 2 +- ...xternalDatasetIndexesOperatorDescriptor.java | 2 +- ...ExternalBTreeSearchOperatorNodePushable.java | 2 +- ...rnalIndexBulkModifyOperatorNodePushable.java | 2 +- .../ExternalLookupOperatorDescriptor.java | 6 +- ...ExternalRTreeSearchOperatorNodePushable.java | 4 +- .../ExternalScanOperatorDescriptor.java | 2 +- .../FeedCollectOperatorNodePushable.java | 2 +- .../operators/FeedMetaComputeNodePushable.java | 4 +- .../operators/FeedMetaStoreNodePushable.java | 2 +- .../external/parser/DelimitedDataParser.java | 8 +- .../external/parser/HiveRecordParser.java | 6 +- .../parser/RecordWithMetadataParser.java | 4 +- .../external/parser/RecordWithPKDataParser.java | 2 +- .../asterix/external/parser/TweetParser.java | 2 +- .../provider/DataflowControllerProvider.java | 2 +- .../asterix/external/util/FeedLogManager.java | 2 +- .../external/util/FileSystemWatcher.java | 2 +- .../asterix/external/classad/ClassAd.java | 2 +- .../asterix/external/library/ClassAdParser.java | 4 +- .../common/EditDistanceCheckEvaluator.java | 2 +- .../common/EditDistanceEvaluator.java | 2 +- .../evaluators/common/GramTokensEvaluator.java | 2 +- .../common/SimilarityJaccardCheckEvaluator.java | 2 +- .../common/SimilarityJaccardEvaluator.java | 2 +- .../SimilarityJaccardPrefixEvaluator.java | 2 +- .../evaluators/common/WordTokensEvaluator.java | 2 +- .../EditDistanceListIsFilterableDescriptor.java | 2 +- ...EditDistanceStringIsFilterableEvaluator.java | 2 +- .../functions/PrefixLenDescriptor.java | 2 +- .../functions/PrefixLenJaccardDescriptor.java | 2 +- .../lang/common/util/CommonFunctionMapUtil.java | 96 +++---- .../DatatypeTupleTranslator.java | 2 +- .../asterix/builders/AbstractListBuilder.java | 2 +- .../apache/asterix/builders/RecordBuilder.java | 2 +- .../data/nontagged/MissingWriterFactory.java | 2 +- .../hash/ListItemBinaryHashFunctionFactory.java | 2 +- .../data/nontagged/printers/PrintTools.java | 12 +- .../printers/adm/ABinaryHexPrinterFactory.java | 2 +- .../printers/adm/AInt16PrinterFactory.java | 2 +- .../printers/adm/AInt32PrinterFactory.java | 2 +- .../printers/adm/AInt64PrinterFactory.java | 2 +- .../printers/adm/AInt8PrinterFactory.java | 2 +- .../printers/adm/AStringPrinterFactory.java | 2 +- .../printers/csv/ABinaryHexPrinterFactory.java | 2 +- .../printers/csv/AStringPrinterFactory.java | 2 +- .../json/clean/ABinaryHexPrinterFactory.java | 2 +- .../json/clean/AStringPrinterFactory.java | 2 +- .../clean/AUnorderedlistPrinterFactory.java | 2 +- .../json/lossless/ABinaryHexPrinterFactory.java | 2 +- .../json/lossless/AStringPrinterFactory.java | 2 +- .../lossless/AUnorderedlistPrinterFactory.java | 2 +- .../serde/AGeometrySerializerDeserializer.java | 19 +- .../SerializerDeserializerProvider.java | 2 +- .../java/org/apache/asterix/om/base/AUUID.java | 4 +- .../om/base/temporal/ADateParserFactory.java | 2 +- .../base/temporal/ADateTimeParserFactory.java | 2 +- .../base/temporal/ADurationParserFactory.java | 2 +- .../om/base/temporal/ATimeParserFactory.java | 2 +- .../om/base/temporal/DateTimeFormatUtils.java | 268 ++++++++++++------- .../temporal/DurationArithmeticOperations.java | 10 +- .../base/temporal/GregorianCalendarSystem.java | 148 ++++++++-- .../asterix/om/functions/BuiltinFunctions.java | 6 + .../typecomputer/impl/AInt64TypeComputer.java | 14 +- .../impl/OrderedListOfAStringTypeComputer.java | 13 +- .../replication/api/PartitionReplica.java | 19 +- .../sync/ReplicaFilesSynchronizer.java | 12 + .../replication/sync/ReplicaSynchronizer.java | 13 +- .../ListifyAggregateFunctionEvalFactory.java | 4 +- ...bstractSerializableAvgAggregateFunction.java | 6 +- ...tractSerializableCountAggregateFunction.java | 4 +- ...bstractSerializableSumAggregateFunction.java | 4 +- .../std/AbstractAvgAggregateFunction.java | 4 +- .../std/AbstractCountAggregateFunction.java | 2 +- .../std/AbstractMinMaxAggregateFunction.java | 6 +- .../std/AbstractSumAggregateFunction.java | 2 +- .../accessors/CircleCenterAccessor.java | 2 +- .../accessors/CircleRadiusAccessor.java | 2 +- .../accessors/LineRectanglePolygonAccessor.java | 2 +- .../accessors/PointXCoordinateAccessor.java | 2 +- .../accessors/PointYCoordinateAccessor.java | 2 +- .../accessors/TemporalDayAccessor.java | 2 +- .../accessors/TemporalHourAccessor.java | 2 +- .../accessors/TemporalIntervalEndAccessor.java | 2 +- .../TemporalIntervalEndDateAccessor.java | 2 +- .../TemporalIntervalEndDatetimeAccessor.java | 2 +- .../TemporalIntervalEndTimeAccessor.java | 2 +- .../TemporalIntervalStartAccessor.java | 2 +- .../TemporalIntervalStartDateAccessor.java | 2 +- .../TemporalIntervalStartDatetimeAccessor.java | 2 +- .../TemporalIntervalStartTimeAccessor.java | 2 +- .../accessors/TemporalMillisecondAccessor.java | 2 +- .../accessors/TemporalMinuteAccessor.java | 2 +- .../accessors/TemporalMonthAccessor.java | 2 +- .../accessors/TemporalSecondAccessor.java | 2 +- .../accessors/TemporalYearAccessor.java | 2 +- .../evaluators/common/CreateMBREvalFactory.java | 2 +- .../common/FullTextContainsEvaluator.java | 4 +- ...ervalStartFromDateConstructorDescriptor.java | 5 +- .../OrderedListConstructorDescriptor.java | 6 +- .../UnorderedListConstructorDescriptor.java | 6 +- .../functions/AbstractBinaryStringEval.java | 2 +- .../functions/AbstractQuadStringStringEval.java | 2 +- .../AbstractUnaryNumericFunctionEval.java | 2 +- .../AbstractUnaryStringStringEval.java | 2 +- .../functions/CreateCircleDescriptor.java | 2 +- .../functions/CreateLineDescriptor.java | 2 +- .../functions/CreatePointDescriptor.java | 2 +- .../functions/CreateRectangleDescriptor.java | 2 +- .../functions/DeepEqualityDescriptor.java | 2 +- .../evaluators/functions/LenDescriptor.java | 2 +- .../evaluators/functions/SleepDescriptor.java | 3 +- .../functions/SpatialAreaDescriptor.java | 2 +- .../functions/SpatialCellDescriptor.java | 2 +- .../functions/SpatialDistanceDescriptor.java | 2 +- .../functions/StringLengthDescriptor.java | 2 +- .../functions/StringRepeatDescriptor.java | 2 +- .../functions/StringSplitDescriptor.java | 2 +- .../functions/StringToCodePointDescriptor.java | 2 +- .../functions/Substring2Descriptor.java | 4 +- .../functions/SubstringAfterDescriptor.java | 2 +- .../functions/SubstringBeforeDescriptor.java | 2 +- .../functions/SubstringDescriptor.java | 4 +- .../binary/AbstractSubBinaryEvaluator.java | 2 +- .../functions/binary/PrintBinaryDescriptor.java | 2 +- .../records/GetRecordFieldValueDescriptor.java | 2 +- .../records/GetRecordFieldsDescriptor.java | 2 +- .../records/GetRecordFieldsEvalFactory.java | 3 +- .../records/RecordConcatEvalFactory.java | 4 +- .../records/RecordLengthDescriptor.java | 122 +++++++++ .../records/RecordMergeDescriptor.java | 2 +- .../records/RecordNamesDescriptor.java | 134 ++++++++++ .../records/RecordPairsDescriptor.java | 4 +- .../records/RecordRemoveFieldsEvalFactory.java | 2 +- .../AdjustDateTimeForTimeZoneDescriptor.java | 4 +- .../AdjustTimeForTimeZoneDescriptor.java | 4 +- .../functions/temporal/DayOfWeekDescriptor.java | 31 +-- .../temporal/OverlapBinsDescriptor.java | 2 +- .../functions/temporal/ParseDateDescriptor.java | 49 ++-- .../temporal/ParseDateTimeDescriptor.java | 43 ++- .../functions/temporal/ParseTimeDescriptor.java | 43 ++- .../functions/temporal/PrintDateDescriptor.java | 18 +- .../temporal/PrintDateTimeDescriptor.java | 16 +- .../functions/temporal/PrintTimeDescriptor.java | 16 +- .../runtime/functions/FunctionCollection.java | 4 + .../runtime/functions/FunctionTypeInferers.java | 66 ++--- .../LSMPrimaryUpsertOperatorNodePushable.java | 4 +- .../std/SubsetCollectionDescriptor.java | 2 +- .../LockThenSearchOperationCallbackFactory.java | 2 +- ...maryIndexInstantSearchOperationCallback.java | 2 +- ...exInstantSearchOperationCallbackFactory.java | 2 +- .../PrimaryIndexSearchOperationCallback.java | 4 +- ...maryIndexSearchOperationCallbackFactory.java | 2 +- ...xInstanctSearchOperationCallbackFactory.java | 2 +- ...daryIndexInstantSearchOperationCallback.java | 2 +- ...ndaryIndexModificationOperationCallback.java | 2 +- .../UpsertOperationCallbackFactory.java | 2 +- .../management/runtime/CommitRuntime.java | 6 +- .../common/exceptions/AlgebricksException.java | 4 + .../data/impl/IntegerPrinterFactory.java | 3 +- .../data/impl/UTF8StringPrinterFactory.java | 2 +- .../TupleCountAggregateFunctionFactory.java | 2 +- ...pleCountRunningAggregateFunctionFactory.java | 2 +- .../operators/std/SinkWriterRuntimeFactory.java | 2 +- .../operators/std/SplitOperatorDescriptor.java | 2 +- .../std/StringStreamingRuntimeFactory.java | 2 +- .../operators/std/UnnestRuntimeFactory.java | 2 +- .../writers/SerializedDataWriterFactory.java | 2 +- .../tests/pushruntime/IntArrayUnnester.java | 2 +- .../pushruntime/IntegerAddEvalFactory.java | 3 +- .../hyracks/api/client/HyracksConnection.java | 4 +- .../api/context/IHyracksJobletContext.java | 2 + .../api/exceptions/HyracksDataException.java | 22 +- .../api/exceptions/HyracksException.java | 24 +- .../api/job/JobSerializerDeserializer.java | 6 +- .../apache/hyracks/api/util/ExceptionUtils.java | 12 + .../api/test/TestControlledFrameWriter.java | 2 +- .../hyracks/api/test/TestFrameWriter.java | 2 +- .../hyracks/client/dataset/HyracksDataset.java | 2 +- .../channels/DatasetNetworkInputChannel.java | 2 +- .../comm/channels/NetworkInputChannel.java | 2 +- .../comm/channels/NetworkOutputChannel.java | 2 +- .../control/cc/ClusterControllerService.java | 2 +- .../control/cc/executor/JobExecutor.java | 5 +- .../hyracks/control/cc/job/JobManager.java | 2 +- .../control/common/base/INodeController.java | 2 +- .../ClassLoaderJobSerializerDeserializer.java | 8 +- .../common/deployment/DeploymentUtils.java | 8 +- .../control/common/ipc/CCNCFunctions.java | 16 +- .../common/ipc/NodeControllerRemoteProxy.java | 6 +- .../hyracks/control/common/work/WorkQueue.java | 2 +- .../org/apache/hyracks/control/nc/Joblet.java | 10 +- .../hyracks/control/nc/NodeControllerIPCI.java | 2 +- .../control/nc/NodeControllerService.java | 12 +- .../nc/dataset/DatasetPartitionWriter.java | 2 +- .../hyracks/control/nc/dataset/ResultState.java | 6 +- .../apache/hyracks/control/nc/io/IOManager.java | 8 +- .../MaterializedPartitionInputChannel.java | 2 +- .../ReceiveSideMaterializingCollector.java | 2 +- .../nc/work/EnsureAllCcTasksCompleted.java | 72 +++-- .../hyracks/control/nc/work/StartTasksWork.java | 7 +- .../ByteArraySerializerDeserializer.java | 4 +- .../parsers/ByteArrayBase64ParserFactory.java | 2 +- .../data/parsers/ByteArrayHexParserFactory.java | 2 +- .../data/parsers/DoubleParserFactory.java | 4 +- .../common/data/parsers/FloatParserFactory.java | 4 +- .../data/parsers/IntegerParserFactory.java | 2 +- .../common/data/parsers/LongParserFactory.java | 2 +- .../data/parsers/UTF8StringParserFactory.java | 2 +- .../AbstractReplicateOperatorDescriptor.java | 2 +- .../NonDeterministicChannelReader.java | 2 +- .../NonDeterministicPartitionBatchManager.java | 2 +- .../LocalityAwarePartitionDataWriter.java | 4 +- .../MToNBroadcastConnectorDescriptor.java | 2 +- ...tDeserializedFileScanOperatorDescriptor.java | 4 +- .../file/DelimitedDataTupleParserFactory.java | 2 +- .../std/file/FileRemoveOperatorDescriptor.java | 2 +- .../std/file/FileScanOperatorDescriptor.java | 4 +- .../file/FrameFileWriterOperatorDescriptor.java | 2 +- .../file/LineFileWriteOperatorDescriptor.java | 2 +- .../file/PlainFileWriterOperatorDescriptor.java | 4 +- .../hyracks/dataflow/std/file/RecordWriter.java | 2 +- .../MinMaxStringFieldAggregatorFactory.java | 2 +- .../std/group/external/ExternalHashGroupBy.java | 2 +- .../intersect/IntersectOperatorDescriptor.java | 2 +- ...ConstantTupleSourceOperatorNodePushable.java | 2 +- .../sort/InMemorySortOperatorDescriptor.java | 2 +- .../btree/helper/DataGenOperatorDescriptor.java | 2 +- ...onOnCreatePushRuntimeOperatorDescriptor.java | 2 +- .../tests/util/NoopMissingWriterFactory.java | 2 +- .../examples/text/WordTupleParserFactory.java | 2 +- .../hyracks/hdfs/MiniDFSClusterFactory.java | 2 +- .../hyracks/hdfs/MiniDFSClusterFactory.java | 2 +- .../dataflow/HDFSReadOperatorDescriptor.java | 4 +- .../dataflow/HDFSWriteOperatorDescriptor.java | 2 +- .../hdfs/dataflow/InputSplitsFactory.java | 2 +- .../hdfs/lib/TextTupleWriterFactory.java | 2 +- .../hyracks/hdfs/scheduler/Scheduler.java | 8 +- .../hdfs2/dataflow/FileSplitsFactory.java | 2 +- .../dataflow/HDFSReadOperatorDescriptor.java | 4 +- .../dataflow/HDFSWriteOperatorDescriptor.java | 2 +- .../hyracks/hdfs2/scheduler/Scheduler.java | 2 +- ...xInsertUpdateDeleteOperatorNodePushable.java | 4 +- .../IndexSearchOperatorNodePushable.java | 2 +- .../TreeIndexStatsOperatorNodePushable.java | 2 +- ...xInsertUpdateDeleteOperatorNodePushable.java | 2 +- .../lsm/common/impls/ExternalIndexHarness.java | 2 +- .../search/AbstractTOccurrenceSearcher.java | 2 +- .../InvertedIndexTokenizingTupleIterator.java | 2 +- ...nedInvertedIndexTokenizingTupleIterator.java | 2 +- .../hyracks/storage/am/rtree/impls/RTree.java | 2 +- .../hyracks/test/support/TestJobletContext.java | 7 + 308 files changed, 1875 insertions(+), 835 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/abcdb802/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml ---------------------------------------------------------------------- diff --cc asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml index 6292e2d,832bb06..95c059d --- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml +++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml @@@ -9749,6 -9753,10 +9754,11 @@@ <output-dir compare="Text">composite-low-high</output-dir> </compilation-unit> </test-case> + <test-case FilePath="composite-key"> + <compilation-unit name="composite-prefix"> + <output-dir compare="Text">composite-prefix</output-dir> + </compilation-unit> + </test-case> </test-group> + &GeoQueries; </test-suite> http://git-wip-us.apache.org/repos/asf/asterixdb/blob/abcdb802/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AGeometrySerializerDeserializer.java ---------------------------------------------------------------------- diff --cc asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AGeometrySerializerDeserializer.java index 14450b3,0000000..0a74ab7 mode 100644,000000..100644 --- 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 @@@ -1,75 -1,0 +1,76 @@@ +/* + * 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; + ++import org.apache.asterix.om.base.AGeometry; ++import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer; ++import org.apache.hyracks.api.exceptions.HyracksDataException; ++ ++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; ++ +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); ++ throw HyracksDataException.create(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/abcdb802/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/SerializerDeserializerProvider.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/abcdb802/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java ---------------------------------------------------------------------- diff --cc asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java index 03b5fc9,6b86a26..a15eefe --- 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 @@@ -206,10 -205,12 +206,14 @@@ public class BuiltinFunctions new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "get-object-fields", 1); public static final FunctionIdentifier GET_RECORD_FIELD_VALUE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "get-object-field-value", 2); + public static final FunctionIdentifier RECORD_LENGTH = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "object-length", 1); + public static final FunctionIdentifier RECORD_NAMES = + new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "object-names", 1); 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 = @@@ -1402,8 -1218,9 +1406,10 @@@ addFunction(FIELD_ACCESS_BY_NAME, FieldAccessByNameResultType.INSTANCE, true); addFunction(GET_RECORD_FIELDS, OrderedListOfAnyTypeComputer.INSTANCE, true); addFunction(GET_RECORD_FIELD_VALUE, FieldAccessNestedResultType.INSTANCE, true); + addFunction(RECORD_LENGTH, AInt64TypeComputer.INSTANCE_NULLABLE, true); + addFunction(RECORD_NAMES, OrderedListOfAStringTypeComputer.INSTANCE_NULLABLE, true); addFunction(RECORD_PAIRS, RecordPairsTypeComputer.INSTANCE, true); + addFunction(GEOMETRY_CONSTRUCTOR, AGeometryTypeComputer.INSTANCE, true); // temporal type accessors addFunction(ACCESSOR_TEMPORAL_YEAR, AInt64TypeComputer.INSTANCE, true);
