forked from apache/arrow
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ARROW-7215: [C++][Gandiva] Implement castVARCHAR(numeric_type) functions
This PR implements the castVARCHAR for numeric values inside the Gandiva. It replaces the logic of the apache#8158 PR to change the function output to match the Java language patterns. Closes apache#9816 from anthonylouisbsb/feature/fix-castvarchar-to-match-java-impl and squashes the following commits: 7df55a5 <Anthony Louis> Apply formatting changes 7a724c0 <Anthony Louis> Remove unnecessary macros 4fb8a7f <Anthony Louis> Refactor if chain e787051 <Anthony Louis> Add test to infinity case b62b856 <Anthony Louis> Add comments for changes cec11bb <Anthony Louis> Add tests to check Java compatibility 302139c <Anthony Louis> Add emit trailing point tests efb94b9 <Anthony Louis> Add -0.0 inside cast test 523e60a <Anthony Louis> Add custom constructor inside the class 34f2f92 <Anthony Louis> Add class to print in formatted way e244502 <Anthony Louis> Fix tests to consider java formatting 33bc5b2 <Projjal Chanda> added castvarchar(numeric_types) functions Lead-authored-by: Anthony Louis <anthony@simbioseventures.com> Co-authored-by: Projjal Chanda <iam@pchanda.com> Signed-off-by: Praveen <praveen@dremio.com>
- Loading branch information
1 parent
1e6819c
commit 15137e2
Showing
10 changed files
with
618 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
// 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. | ||
|
||
#pragma once | ||
|
||
#include "arrow/type.h" | ||
#include "arrow/util/formatting.h" | ||
#include "arrow/vendored/double-conversion/double-conversion.h" | ||
|
||
namespace gandiva { | ||
|
||
/// \brief The entry point for conversion to strings. | ||
template <typename ARROW_TYPE, typename Enable = void> | ||
class GdvStringFormatter; | ||
|
||
using double_conversion::DoubleToStringConverter; | ||
|
||
template <typename ARROW_TYPE> | ||
class FloatToStringGdvMixin | ||
: public arrow::internal::FloatToStringFormatterMixin<ARROW_TYPE> { | ||
public: | ||
using arrow::internal::FloatToStringFormatterMixin< | ||
ARROW_TYPE>::FloatToStringFormatterMixin; | ||
|
||
// The mixin is a modified version of the existent FloatToStringFormatterMixin, but | ||
// it defines some specific parameters in the FloatToStringFormatterMixin to cast | ||
// the float numbers to string using the same patterns like Java. | ||
// | ||
// The Java real numbers are represented in two ways following these rules: | ||
//- If the number is greater or equals than 10^7 and less than 10^(-3) | ||
// it will be represented using scientific notation, e.g: | ||
// - 0.000012 -> 1.2E-5 | ||
// - 10000002.3 -> 1.00000023E7 | ||
//- If the numbers are between that interval above, they are showed as is. | ||
explicit FloatToStringGdvMixin(const std::shared_ptr<arrow::DataType>& = NULLPTR) | ||
: arrow::internal::FloatToStringFormatterMixin<ARROW_TYPE>( | ||
DoubleToStringConverter::EMIT_TRAILING_ZERO_AFTER_POINT | | ||
DoubleToStringConverter::EMIT_TRAILING_DECIMAL_POINT, | ||
"Infinity", "NaN", 'E', -3, 7, 3, 1) {} | ||
}; | ||
|
||
template <> | ||
class GdvStringFormatter<arrow::FloatType> | ||
: public FloatToStringGdvMixin<arrow::FloatType> { | ||
public: | ||
using FloatToStringGdvMixin::FloatToStringGdvMixin; | ||
}; | ||
|
||
template <> | ||
class GdvStringFormatter<arrow::DoubleType> | ||
: public FloatToStringGdvMixin<arrow::DoubleType> { | ||
public: | ||
using FloatToStringGdvMixin::FloatToStringGdvMixin; | ||
}; | ||
} // namespace gandiva |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.