Skip to content

Commit

Permalink
ARROW-16634: [Gandiva][C++] Add udfdegrees alias
Browse files Browse the repository at this point in the history
Add udfdegrees alias (alias for degrees) in Gandiva.

Closes #13124 from Johnnathanalmeida/feature/add-udfdegrees-alias

Authored-by: Johnnathan <johnnathanalmeida@gmail.com>
Signed-off-by: Pindikura Ravindra <ravindra@dremio.com>
  • Loading branch information
Johnnathanalmeida authored and Pindikura Ravindra committed May 24, 2022
1 parent 43a604d commit 6576aa0
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 6 deletions.
4 changes: 2 additions & 2 deletions cpp/src/gandiva/function_registry_math_ops.cc
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,8 @@ std::vector<NativeFunction> GetMathOpsFunctionRegistry() {
MATH_UNARY_OPS(sin, {}), MATH_UNARY_OPS(cos, {}), MATH_UNARY_OPS(asin, {}),
MATH_UNARY_OPS(acos, {}), MATH_UNARY_OPS(tan, {}), MATH_UNARY_OPS(atan, {}),
MATH_UNARY_OPS(sinh, {}), MATH_UNARY_OPS(cosh, {}), MATH_UNARY_OPS(tanh, {}),
MATH_UNARY_OPS(cot, {}), MATH_UNARY_OPS(radians, {}), MATH_UNARY_OPS(degrees, {}),
MATH_BINARY_SAFE(atan2, {}),
MATH_UNARY_OPS(cot, {}), MATH_UNARY_OPS(radians, {}),
MATH_UNARY_OPS(degrees, {"udfdegrees"}), MATH_BINARY_SAFE(atan2, {}),

// decimal functions
UNARY_SAFE_NULL_IF_NULL(abs, {}, decimal128, decimal128),
Expand Down
16 changes: 12 additions & 4 deletions cpp/src/gandiva/tests/projector_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -413,6 +413,7 @@ TEST_F(TestProjector, TestExtendedMath) {
auto field_cot = arrow::field("cot", arrow::float64());
auto field_radians = arrow::field("radians", arrow::float64());
auto field_degrees = arrow::field("degrees", arrow::float64());
auto field_udfdegrees = arrow::field("udfdegrees", arrow::float64());

// Build expression
auto cbrt_expr = TreeExprBuilder::MakeExpression("cbrt", {field0}, field_cbrt);
Expand All @@ -436,13 +437,15 @@ TEST_F(TestProjector, TestExtendedMath) {
auto cot_expr = TreeExprBuilder::MakeExpression("cot", {field0}, field_cot);
auto radians_expr = TreeExprBuilder::MakeExpression("radians", {field0}, field_radians);
auto degrees_expr = TreeExprBuilder::MakeExpression("degrees", {field0}, field_degrees);
auto udfdegrees_expr =
TreeExprBuilder::MakeExpression("udfdegrees", {field0}, field_udfdegrees);

std::shared_ptr<Projector> projector;
auto status = Projector::Make(
schema,
{cbrt_expr, exp_expr, log_expr, log10_expr, logb_expr, power_expr, sin_expr,
cos_expr, asin_expr, acos_expr, tan_expr, atan_expr, sinh_expr, cosh_expr,
tanh_expr, atan2_expr, cot_expr, radians_expr, degrees_expr},
schema, {cbrt_expr, exp_expr, log_expr, log10_expr, logb_expr,
power_expr, sin_expr, cos_expr, asin_expr, acos_expr,
tan_expr, atan_expr, sinh_expr, cosh_expr, tanh_expr,
atan2_expr, cot_expr, radians_expr, degrees_expr, udfdegrees_expr},
TestConfiguration(), &projector);
EXPECT_TRUE(status.ok());

Expand Down Expand Up @@ -475,6 +478,7 @@ TEST_F(TestProjector, TestExtendedMath) {
std::vector<double> cot_vals;
std::vector<double> radians_vals;
std::vector<double> degrees_vals;
std::vector<double> udfdegrees_vals;
for (int i = 0; i < num_records; i++) {
cbrt_vals.push_back(static_cast<double>(cbrtl(input0[i])));
exp_vals.push_back(static_cast<double>(expl(input0[i])));
Expand All @@ -495,6 +499,7 @@ TEST_F(TestProjector, TestExtendedMath) {
cot_vals.push_back(static_cast<double>(tan(M_PI / 2 - input0[i])));
radians_vals.push_back(static_cast<double>(input0[i] * M_PI / 180.0));
degrees_vals.push_back(static_cast<double>(input0[i] * 180.0 / M_PI));
udfdegrees_vals.push_back(static_cast<double>(input0[i] * 180.0 / M_PI));
}
auto expected_cbrt = MakeArrowArray<arrow::DoubleType, double>(cbrt_vals, validity);
auto expected_exp = MakeArrowArray<arrow::DoubleType, double>(exp_vals, validity);
Expand All @@ -517,6 +522,8 @@ TEST_F(TestProjector, TestExtendedMath) {
MakeArrowArray<arrow::DoubleType, double>(radians_vals, validity);
auto expected_degrees =
MakeArrowArray<arrow::DoubleType, double>(degrees_vals, validity);
auto expected_udfdegrees =
MakeArrowArray<arrow::DoubleType, double>(udfdegrees_vals, validity);
// prepare input record batch
auto in_batch = arrow::RecordBatch::Make(schema, num_records, {array0, array1});

Expand Down Expand Up @@ -546,6 +553,7 @@ TEST_F(TestProjector, TestExtendedMath) {
EXPECT_ARROW_ARRAY_APPROX_EQUALS(expected_cot, outputs.at(16), epsilon);
EXPECT_ARROW_ARRAY_APPROX_EQUALS(expected_radians, outputs.at(17), epsilon);
EXPECT_ARROW_ARRAY_APPROX_EQUALS(expected_degrees, outputs.at(18), epsilon);
EXPECT_ARROW_ARRAY_APPROX_EQUALS(expected_udfdegrees, outputs.at(19), epsilon);
}

TEST_F(TestProjector, TestFloatLessThan) {
Expand Down

0 comments on commit 6576aa0

Please sign in to comment.