Yingyi Bu has submitted this change and it was merged. Change subject: [ASTERIXDB-2000][RT] Fix roundtrip-ability for INF in JSON format. ......................................................................
[ASTERIXDB-2000][RT] Fix roundtrip-ability for INF in JSON format. - user model changes: no - storage format changes: no - interface changes: no Details: - Use INF to represent infinity. Change-Id: I13687822433744afe1ad3439029b2c0887563f9b Reviewed-on: https://asterix-gerrit.ics.uci.edu/1901 Tested-by: Jenkins <[email protected]> BAD: Jenkins <[email protected]> Reviewed-by: Yingyi Bu <[email protected]> --- A asterixdb/asterix-app/data/infinity.adm A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/numeric/infinity/infinity.1.ddl.sqlpp A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/numeric/infinity/infinity.2.update.sqlpp A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/numeric/infinity/infinity.3.query.sqlpp M asterixdb/asterix-app/src/test/resources/runtimets/results/constructor/double_01/double_01.1.adm M asterixdb/asterix-app/src/test/resources/runtimets/results/constructor/float_01/float_01.1.adm M asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/abs2/abs2.1.adm M asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/abs3/abs3.1.adm M asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/caret0/caret0.1.adm M asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/ceiling2/ceiling2.1.adm M asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/ceiling3/ceiling3.1.adm M asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/floor2/floor2.1.adm M asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/floor3/floor3.1.adm A asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/infinity/infinity.1.adm M asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/ln/ln.1.adm M asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/log/log.1.adm M asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/non-finite/non-finite.1.json M asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even2/round-half-to-even2.1.adm M asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even22/round-half-to-even22.1.adm M asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even23/round-half-to-even23.1.adm M asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even3/round-half-to-even3.1.adm M asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_double_02/unary-minus_double_02.1.adm M asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_float_02/unary-minus_float_02.1.adm M asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml M asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java M asterixdb/asterix-external-data/src/main/resources/adm.grammar M asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/PrintTools.java M asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/ADoublePrinterFactory.java M asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AFloatPrinterFactory.java M asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/ADoublePrinterFactory.java M asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/AFloatPrinterFactory.java M asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/ADoublePrinterFactory.java M asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AFloatPrinterFactory.java M asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/ADoublePrinterFactory.java M asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AFloatPrinterFactory.java 35 files changed, 179 insertions(+), 63 deletions(-) Approvals: Yingyi Bu: Looks good to me, approved Jenkins: Verified; No violations found Objections: Jenkins: Violations found diff --git a/asterixdb/asterix-app/data/infinity.adm b/asterixdb/asterix-app/data/infinity.adm new file mode 100644 index 0000000..fd44c8f --- /dev/null +++ b/asterixdb/asterix-app/data/infinity.adm @@ -0,0 +1 @@ +{ "id": 1, "a": INF, "b": -INF, "c":NaN } diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/numeric/infinity/infinity.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/numeric/infinity/infinity.1.ddl.sqlpp new file mode 100644 index 0000000..7059c72 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/numeric/infinity/infinity.1.ddl.sqlpp @@ -0,0 +1,28 @@ +/* + * 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. + */ + +drop dataverse test if exists; +create dataverse test; +use test; + +create type test as { + id: int +} + +create dataset test(test) primary key id; diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/numeric/infinity/infinity.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/numeric/infinity/infinity.2.update.sqlpp new file mode 100644 index 0000000..fd0f6ad --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/numeric/infinity/infinity.2.update.sqlpp @@ -0,0 +1,22 @@ +/* + * 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. + */ + +use test; + +load dataset test using localfs ((`path`=`asterix_nc1://data/infinity.adm`),(`format`=`adm`)); diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/numeric/infinity/infinity.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/numeric/infinity/infinity.3.query.sqlpp new file mode 100644 index 0000000..aeb2c0d --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/numeric/infinity/infinity.3.query.sqlpp @@ -0,0 +1,23 @@ +/* + * 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. + */ + +use test; + + +select value test from test; diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/constructor/double_01/double_01.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/constructor/double_01/double_01.1.adm index ae7413d..0f1f5df 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results/constructor/double_01/double_01.1.adm +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/constructor/double_01/double_01.1.adm @@ -1 +1 @@ -{ "double1": NaN, "double2": Infinity, "double3": -Infinity, "double4": -80.2, "double5": -2.056E-29, "double6": -2.056E-299, "double7": -2.056E-299 } +{ "double1": NaN, "double2": INF, "double3": -INF, "double4": -80.2, "double5": -2.056E-29, "double6": -2.056E-299, "double7": -2.056E-299 } diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/constructor/float_01/float_01.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/constructor/float_01/float_01.1.adm index 9acd764..722697d 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results/constructor/float_01/float_01.1.adm +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/constructor/float_01/float_01.1.adm @@ -1 +1 @@ -{ "float1": NaN, "float2": Infinity, "float3": -Infinity, "float4": -80.2, "float5": -2.056E-29, "float6": -2.056E-29 } +{ "float1": NaN, "float2": INF, "float3": -INF, "float4": -80.2, "float5": -2.056E-29, "float6": -2.056E-29 } diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/abs2/abs2.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/abs2/abs2.1.adm index 22e50da..7429760 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/abs2/abs2.1.adm +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/abs2/abs2.1.adm @@ -1 +1 @@ -{ "f0": 20.1, "f1": 2.056E-29, "f2": NaN, "f3": Infinity, "f4": Infinity, "f5": 0.0, "f6": 0.0 } +{ "f0": 20.1, "f1": 2.056E-29, "f2": NaN, "f3": INF, "f4": INF, "f5": -0.0, "f6": 0.0 } diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/abs3/abs3.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/abs3/abs3.1.adm index f938327..c868b79 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/abs3/abs3.1.adm +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/abs3/abs3.1.adm @@ -1 +1 @@ -{ "d0": 20.1, "d1": 2.056E-29, "d2": NaN, "d3": Infinity, "d4": Infinity, "d5": 0.0, "d6": 0.0 } +{ "d0": 20.1, "d1": 2.056E-29, "d2": NaN, "d3": INF, "d4": INF, "d5": -0.0, "d6": 0.0 } diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/caret0/caret0.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/caret0/caret0.1.adm index 3d2b01c..bec02d6 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/caret0/caret0.1.adm +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/caret0/caret0.1.adm @@ -1 +1 @@ -{ "c1": Infinity, "c2": 1.6777216E7, "c3": 9 } +{ "c1": INF, "c2": 1.6777216E7, "c3": 9 } diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/ceiling2/ceiling2.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/ceiling2/ceiling2.1.adm index 0d2c59f..3311d2a 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/ceiling2/ceiling2.1.adm +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/ceiling2/ceiling2.1.adm @@ -1 +1 @@ -{ "f0": 21.0, "f1": -0.0, "f2": NaN, "f3": Infinity, "f4": -Infinity, "f5": -0.0, "f6": 0.0 } +{ "f0": 21.0, "f1": -0.0, "f2": NaN, "f3": INF, "f4": -INF, "f5": -0.0, "f6": 0.0 } diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/ceiling3/ceiling3.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/ceiling3/ceiling3.1.adm index 6d944b9..c81e935 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/ceiling3/ceiling3.1.adm +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/ceiling3/ceiling3.1.adm @@ -1 +1 @@ -{ "d0": 21.0, "d1": -0.0, "d2": NaN, "d3": Infinity, "d4": -Infinity, "d5": -0.0, "d6": 0.0 } +{ "d0": 21.0, "d1": -0.0, "d2": NaN, "d3": INF, "d4": -INF, "d5": -0.0, "d6": 0.0 } diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/floor2/floor2.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/floor2/floor2.1.adm index 9366300..9e493c2 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/floor2/floor2.1.adm +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/floor2/floor2.1.adm @@ -1 +1 @@ -{ "f0": 20.0, "f1": -1.0, "f2": NaN, "f3": Infinity, "f4": -Infinity, "f5": -0.0, "f6": 0.0 } +{ "f0": 20.0, "f1": -1.0, "f2": NaN, "f3": INF, "f4": -INF, "f5": -0.0, "f6": 0.0 } diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/floor3/floor3.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/floor3/floor3.1.adm index cb452ad..4322a51 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/floor3/floor3.1.adm +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/floor3/floor3.1.adm @@ -1 +1 @@ -{ "d0": 20.0, "d1": -1.0, "d2": NaN, "d3": Infinity, "d4": -Infinity, "d5": -0.0, "d6": 0.0 } +{ "d0": 20.0, "d1": -1.0, "d2": NaN, "d3": INF, "d4": -INF, "d5": -0.0, "d6": 0.0 } diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/infinity/infinity.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/infinity/infinity.1.adm new file mode 100644 index 0000000..8f7401a --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/infinity/infinity.1.adm @@ -0,0 +1 @@ +{ "id": 1, "a": INF, "b": -INF, "c": NaN } diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/ln/ln.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/ln/ln.1.adm index 598faa4..aa6439f 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/ln/ln.1.adm +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/ln/ln.1.adm @@ -1 +1 @@ -{ "a": 4.787491742782046, "b": 4.505349850705881, "c": 4.499809670330265, "d": -Infinity, "e": NaN, "f": 0.0, "g": null } +{ "a": 4.787491742782046, "b": 4.505349850705881, "c": 4.499809670330265, "d": -INF, "e": NaN, "f": 0.0, "g": null } diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/log/log.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/log/log.1.adm index 5280bf9..333cf3e 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/log/log.1.adm +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/log/log.1.adm @@ -1 +1 @@ -{ "a": 2.0791812460476247, "b": 1.9566485792052033, "c": 1.954242509439325, "d": -Infinity, "e": NaN, "f": 0.0, "g": null } +{ "a": 2.0791812460476247, "b": 1.9566485792052033, "c": 1.954242509439325, "d": -INF, "e": NaN, "f": 0.0, "g": null } diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/non-finite/non-finite.1.json b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/non-finite/non-finite.1.json index db5a90c..78d4801 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/non-finite/non-finite.1.json +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/non-finite/non-finite.1.json @@ -1,2 +1,2 @@ -[ { "NaN": "NaN", "Infinity": "Infinity", "-Infinity": "-Infinity" } - ] +[ { "NaN": "NaN", "Infinity": "INF", "-Infinity": "-INF" } + ] \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even2/round-half-to-even2.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even2/round-half-to-even2.1.adm index 2371813..0c4af96 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even2/round-half-to-even2.1.adm +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even2/round-half-to-even2.1.adm @@ -1 +1 @@ -{ "f0": 0.0, "f1": -20.0, "f2": NaN, "f3": Infinity, "f4": -Infinity, "f5": -0.0, "f6": 0.0 } +{ "f0": 0.0, "f1": -20.0, "f2": NaN, "f3": INF, "f4": -INF, "f5": -0.0, "f6": 0.0 } diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even22/round-half-to-even22.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even22/round-half-to-even22.1.adm index ddc981b..0050d53 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even22/round-half-to-even22.1.adm +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even22/round-half-to-even22.1.adm @@ -1 +1 @@ -{ "d0": 0.56, "d1": 0.32, "d2": NaN, "d3": Infinity, "d4": -Infinity, "d5": -0.0, "d6": 0.0 } +{ "d0": 0.56, "d1": 0.32, "d2": NaN, "d3": INF, "d4": -INF, "d5": -0.0, "d6": 0.0 } diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even23/round-half-to-even23.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even23/round-half-to-even23.1.adm index ddc981b..0050d53 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even23/round-half-to-even23.1.adm +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even23/round-half-to-even23.1.adm @@ -1 +1 @@ -{ "d0": 0.56, "d1": 0.32, "d2": NaN, "d3": Infinity, "d4": -Infinity, "d5": -0.0, "d6": 0.0 } +{ "d0": 0.56, "d1": 0.32, "d2": NaN, "d3": INF, "d4": -INF, "d5": -0.0, "d6": 0.0 } diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even3/round-half-to-even3.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even3/round-half-to-even3.1.adm index 8b67144..a58f7bc 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even3/round-half-to-even3.1.adm +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even3/round-half-to-even3.1.adm @@ -1 +1 @@ -{ "d0": 0.0, "d1": -20.0, "d2": NaN, "d3": Infinity, "d4": -Infinity, "d5": -0.0, "d6": 0.0 } +{ "d0": 0.0, "d1": -20.0, "d2": NaN, "d3": INF, "d4": -INF, "d5": -0.0, "d6": 0.0 } diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_double_02/unary-minus_double_02.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_double_02/unary-minus_double_02.1.adm index 399b39c..f848687 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_double_02/unary-minus_double_02.1.adm +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_double_02/unary-minus_double_02.1.adm @@ -1 +1 @@ -{ "double1": 2.056E-29, "double2": NaN, "double3": -Infinity, "double4": Infinity } +{ "double1": 2.056E-29, "double2": NaN, "double3": -INF, "double4": INF } diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_float_02/unary-minus_float_02.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_float_02/unary-minus_float_02.1.adm index d47edae..c7fb8f2 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_float_02/unary-minus_float_02.1.adm +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_float_02/unary-minus_float_02.1.adm @@ -1 +1 @@ -{ "float1": 80.2, "float2": NaN, "float3": -Infinity, "float4": Infinity } +{ "float1": 80.2, "float2": NaN, "float3": -INF, "float4": INF } diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml index cd0355a..47c0529 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml +++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml @@ -4508,6 +4508,11 @@ </compilation-unit> </test-case> <test-case FilePath="numeric"> + <compilation-unit name="infinity"> + <output-dir compare="Text">infinity</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="numeric"> <compilation-unit name="multiply_double"> <output-dir compare="Text">multiply_double</output-dir> </compilation-unit> diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java index 44766ff..d964788 100644 --- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java +++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java @@ -921,11 +921,23 @@ parseInt64(unquoted, out); return true; case FLOAT: - aFloat.setValue(Float.parseFloat(unquoted)); + if ("INF".equals(unquoted)) { + aFloat.setValue(Float.POSITIVE_INFINITY); + } else if ("-INF".equals(unquoted)) { + aFloat.setValue(Float.NEGATIVE_INFINITY); + } else { + aFloat.setValue(Float.parseFloat(unquoted)); + } floatSerde.serialize(aFloat, out); return true; case DOUBLE: - aDouble.setValue(Double.parseDouble(unquoted)); + if ("INF".equals(unquoted)) { + aDouble.setValue(Double.POSITIVE_INFINITY); + } else if ("-INF".equals(unquoted)) { + aDouble.setValue(Double.NEGATIVE_INFINITY); + } else { + aDouble.setValue(Double.parseDouble(unquoted)); + } doubleSerde.serialize(aDouble, out); return true; case STRING: diff --git a/asterixdb/asterix-external-data/src/main/resources/adm.grammar b/asterixdb/asterix-external-data/src/main/resources/adm.grammar index b4f5432..4de729f 100644 --- a/asterixdb/asterix-external-data/src/main/resources/adm.grammar +++ b/asterixdb/asterix-external-data/src/main/resources/adm.grammar @@ -83,8 +83,8 @@ DOUBLE_LITERAL = signOrNothing(), digitSequence(), char(.), digitSequence(), token(@EXPONENT) DOUBLE_LITERAL = signOrNothing(), digitSequence(), token(@EXPONENT) DOUBLE_LITERAL = string(NaN) -DOUBLE_LITERAL = string(Infinity) -DOUBLE_LITERAL = string(-Infinity) +DOUBLE_LITERAL = string(INF) +DOUBLE_LITERAL = string(-INF) DOUBLE_LITERAL = token(DOUBLE_LITERAL), caseInsensitiveChar(d) FLOAT_LITERAL = token(DOUBLE_LITERAL), caseInsensitiveChar(f) diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/PrintTools.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/PrintTools.java index 5b5f53f..b1039a5 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/PrintTools.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/PrintTools.java @@ -22,6 +22,8 @@ import java.io.OutputStream; import java.io.PrintStream; +import org.apache.asterix.dataflow.data.nontagged.serde.ADoubleSerializerDeserializer; +import org.apache.asterix.dataflow.data.nontagged.serde.AFloatSerializerDeserializer; import org.apache.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer; import org.apache.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer; import org.apache.asterix.om.base.temporal.GregorianCalendarSystem; @@ -215,6 +217,46 @@ } } + public static void printDoubleForJson(byte[] b, int s, PrintStream ps) throws HyracksDataException { + final double d = ADoubleSerializerDeserializer.getDouble(b, s + 1); + if (Double.isFinite(d)) { + ps.print(d); + } else { + ps.append('"'); + ps.print(Double.isNaN(d) ? "NaN" : (d == Double.POSITIVE_INFINITY) ? "INF" : "-INF"); + ps.append('"'); + } + } + + public static void printDouble(byte[] b, int s, PrintStream ps) throws HyracksDataException { + final double d = ADoubleSerializerDeserializer.getDouble(b, s + 1); + if (Double.isFinite(d)) { + ps.print(d); + } else { + ps.print(Double.isNaN(d) ? "NaN" : (d == Double.POSITIVE_INFINITY) ? "INF" : "-INF"); + } + } + + public static void printFloatForJson(byte[] b, int s, PrintStream ps) throws HyracksDataException { + final float f = AFloatSerializerDeserializer.getFloat(b, s + 1); + if (Float.isFinite(f)) { + ps.print(f); + } else { + ps.print('"'); + ps.print(Float.isNaN(f) ? "NaN" : (f == Float.POSITIVE_INFINITY) ? "INF" : "-INF"); + ps.print('"'); + } + } + + public static void printFloat(byte[] b, int s, PrintStream ps) throws HyracksDataException { + final float f = AFloatSerializerDeserializer.getFloat(b, s + 1); + if (Float.isFinite(f)) { + ps.print(f); + } else { + ps.print(Float.isNaN(f) ? "NaN" : (f == Float.POSITIVE_INFINITY) ? "INF" : "-INF"); + } + } + public enum CASE { LOWER_CASE, UPPER_CASE, diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/ADoublePrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/ADoublePrinterFactory.java index 15dbbbc..49455d5 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/ADoublePrinterFactory.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/ADoublePrinterFactory.java @@ -20,7 +20,7 @@ import java.io.PrintStream; -import org.apache.asterix.dataflow.data.nontagged.serde.ADoubleSerializerDeserializer; +import org.apache.asterix.dataflow.data.nontagged.printers.PrintTools; import org.apache.hyracks.algebricks.data.IPrinter; import org.apache.hyracks.algebricks.data.IPrinterFactory; @@ -29,8 +29,8 @@ private static final long serialVersionUID = 1L; public static final ADoublePrinterFactory INSTANCE = new ADoublePrinterFactory(); - public static final IPrinter PRINTER = (byte[] b, int s, int l, PrintStream ps) -> ps - .print(ADoubleSerializerDeserializer.getDouble(b, s + 1)); + public static final IPrinter PRINTER = (byte[] b, int s, int l, PrintStream ps) -> PrintTools.printDouble(b, s, + ps); @Override public IPrinter createPrinter() { diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AFloatPrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AFloatPrinterFactory.java index edf1e1d..3f5d4c2 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AFloatPrinterFactory.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AFloatPrinterFactory.java @@ -20,7 +20,7 @@ import java.io.PrintStream; -import org.apache.asterix.dataflow.data.nontagged.serde.AFloatSerializerDeserializer; +import org.apache.asterix.dataflow.data.nontagged.printers.PrintTools; import org.apache.hyracks.algebricks.data.IPrinter; import org.apache.hyracks.algebricks.data.IPrinterFactory; @@ -29,8 +29,7 @@ private static final long serialVersionUID = 1L; public static final AFloatPrinterFactory INSTANCE = new AFloatPrinterFactory(); - public static final IPrinter PRINTER = (byte[] b, int s, int l, PrintStream ps) -> ps - .print(AFloatSerializerDeserializer.getFloat(b, s + 1)); + public static final IPrinter PRINTER = (byte[] b, int s, int l, PrintStream ps) -> PrintTools.printFloat(b, s, ps); @Override public IPrinter createPrinter() { diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/ADoublePrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/ADoublePrinterFactory.java index d08bae5..29f11c4 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/ADoublePrinterFactory.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/ADoublePrinterFactory.java @@ -20,7 +20,7 @@ import java.io.PrintStream; -import org.apache.asterix.dataflow.data.nontagged.serde.ADoubleSerializerDeserializer; +import org.apache.asterix.dataflow.data.nontagged.printers.PrintTools; import org.apache.hyracks.algebricks.data.IPrinter; import org.apache.hyracks.algebricks.data.IPrinterFactory; @@ -29,8 +29,8 @@ private static final long serialVersionUID = 1L; public static final ADoublePrinterFactory INSTANCE = new ADoublePrinterFactory(); - public static final IPrinter PRINTER = (byte[] b, int s, int l, PrintStream ps) -> ps - .print(ADoubleSerializerDeserializer.getDouble(b, s + 1)); + public static final IPrinter PRINTER = (byte[] b, int s, int l, PrintStream ps) -> PrintTools.printDouble(b, s, + ps); @Override public IPrinter createPrinter() { diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/AFloatPrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/AFloatPrinterFactory.java index ed2c2f4..987ed8a 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/AFloatPrinterFactory.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/AFloatPrinterFactory.java @@ -20,7 +20,7 @@ import java.io.PrintStream; -import org.apache.asterix.dataflow.data.nontagged.serde.AFloatSerializerDeserializer; +import org.apache.asterix.dataflow.data.nontagged.printers.PrintTools; import org.apache.hyracks.algebricks.data.IPrinter; import org.apache.hyracks.algebricks.data.IPrinterFactory; @@ -29,8 +29,7 @@ private static final long serialVersionUID = 1L; public static final AFloatPrinterFactory INSTANCE = new AFloatPrinterFactory(); - public static final IPrinter PRINTER = (byte[] b, int s, int l, PrintStream ps) -> ps - .print(AFloatSerializerDeserializer.getFloat(b, s + 1)); + public static final IPrinter PRINTER = (byte[] b, int s, int l, PrintStream ps) -> PrintTools.printFloat(b, s, ps); @Override public IPrinter createPrinter() { diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/ADoublePrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/ADoublePrinterFactory.java index abf9ced..2081162 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/ADoublePrinterFactory.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/ADoublePrinterFactory.java @@ -20,7 +20,7 @@ import java.io.PrintStream; -import org.apache.asterix.dataflow.data.nontagged.serde.ADoubleSerializerDeserializer; +import org.apache.asterix.dataflow.data.nontagged.printers.PrintTools; import org.apache.hyracks.algebricks.data.IPrinter; import org.apache.hyracks.algebricks.data.IPrinterFactory; @@ -29,16 +29,8 @@ private static final long serialVersionUID = 1L; public static final ADoublePrinterFactory INSTANCE = new ADoublePrinterFactory(); - public static final IPrinter PRINTER = (byte[] b, int s, int l, PrintStream ps) -> { - final double d = ADoubleSerializerDeserializer.getDouble(b, s + 1); - if (Double.isFinite(d)) { - ps.print(d); - } else { - ps.append('"'); - ps.print(Double.toString(d)); - ps.append('"'); - } - }; + public static final IPrinter PRINTER = (byte[] b, int s, int l, PrintStream ps) -> PrintTools.printDoubleForJson(b, + s, ps); @Override public IPrinter createPrinter() { diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AFloatPrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AFloatPrinterFactory.java index a6cdc0d..46ff2f7 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AFloatPrinterFactory.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AFloatPrinterFactory.java @@ -20,7 +20,7 @@ import java.io.PrintStream; -import org.apache.asterix.dataflow.data.nontagged.serde.AFloatSerializerDeserializer; +import org.apache.asterix.dataflow.data.nontagged.printers.PrintTools; import org.apache.hyracks.algebricks.data.IPrinter; import org.apache.hyracks.algebricks.data.IPrinterFactory; @@ -29,16 +29,8 @@ private static final long serialVersionUID = 1L; public static final AFloatPrinterFactory INSTANCE = new AFloatPrinterFactory(); - public static final IPrinter PRINTER = (byte[] b, int s, int l, PrintStream ps) -> { - final float aFloat = AFloatSerializerDeserializer.getFloat(b, s + 1); - if (Float.isFinite(aFloat)) { - ps.print(aFloat); - } else { - ps.append('"'); - ps.print(Float.toString(aFloat)); - ps.append('"'); - } - }; + public static final IPrinter PRINTER = (byte[] b, int s, int l, PrintStream ps) -> PrintTools.printFloatForJson(b, + s, ps); @Override public IPrinter createPrinter() { diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/ADoublePrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/ADoublePrinterFactory.java index a14a16f..5d74980 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/ADoublePrinterFactory.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/ADoublePrinterFactory.java @@ -20,7 +20,7 @@ import java.io.PrintStream; -import org.apache.asterix.dataflow.data.nontagged.serde.ADoubleSerializerDeserializer; +import org.apache.asterix.dataflow.data.nontagged.printers.PrintTools; import org.apache.hyracks.algebricks.data.IPrinter; import org.apache.hyracks.algebricks.data.IPrinterFactory; @@ -29,8 +29,8 @@ private static final long serialVersionUID = 1L; public static final ADoublePrinterFactory INSTANCE = new ADoublePrinterFactory(); - public static final IPrinter PRINTER = (byte[] b, int s, int l, PrintStream ps) -> ps - .print(ADoubleSerializerDeserializer.getDouble(b, s + 1)); + public static final IPrinter PRINTER = (byte[] b, int s, int l, PrintStream ps) -> PrintTools.printDoubleForJson(b, + s, ps); @Override public IPrinter createPrinter() { diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AFloatPrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AFloatPrinterFactory.java index 987dbd8..6ed3f98 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AFloatPrinterFactory.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AFloatPrinterFactory.java @@ -20,7 +20,7 @@ import java.io.PrintStream; -import org.apache.asterix.dataflow.data.nontagged.serde.AFloatSerializerDeserializer; +import org.apache.asterix.dataflow.data.nontagged.printers.PrintTools; import org.apache.hyracks.algebricks.data.IPrinter; import org.apache.hyracks.algebricks.data.IPrinterFactory; @@ -29,8 +29,8 @@ private static final long serialVersionUID = 1L; public static final AFloatPrinterFactory INSTANCE = new AFloatPrinterFactory(); - public static final IPrinter PRINTER = (byte[] b, int s, int l, PrintStream ps) -> ps - .print(AFloatSerializerDeserializer.getFloat(b, s + 1)); + public static final IPrinter PRINTER = (byte[] b, int s, int l, PrintStream ps) -> PrintTools.printFloatForJson(b, + s, ps); @Override public IPrinter createPrinter() { -- To view, visit https://asterix-gerrit.ics.uci.edu/1901 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: merged Gerrit-Change-Id: I13687822433744afe1ad3439029b2c0887563f9b Gerrit-PatchSet: 9 Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Owner: Yingyi Bu <[email protected]> Gerrit-Reviewer: Dmitry Lychagin <[email protected]> Gerrit-Reviewer: Jenkins <[email protected]> Gerrit-Reviewer: Till Westmann <[email protected]> Gerrit-Reviewer: Yingyi Bu <[email protected]>
