diff --git a/c_glib/test/test-decimal128-data-type.rb b/c_glib/test/test-decimal128-data-type.rb index bcee24187f4..92f2f47f0bd 100644 --- a/c_glib/test/test-decimal128-data-type.rb +++ b/c_glib/test/test-decimal128-data-type.rb @@ -48,7 +48,7 @@ def test_deciaml_data_type_new def test_invalid_precision message = - "[decimal128-data-type][new]: Invalid: Decimal precision out of range: 39" + "[decimal128-data-type][new]: Invalid: Decimal precision out of range [1, 38]: 39" assert_raise(Arrow::Error::Invalid.new(message)) do Arrow::Decimal128DataType.new(39, 1) end diff --git a/c_glib/test/test-decimal256-data-type.rb b/c_glib/test/test-decimal256-data-type.rb index 3070a4e4c6c..b26f7396043 100644 --- a/c_glib/test/test-decimal256-data-type.rb +++ b/c_glib/test/test-decimal256-data-type.rb @@ -48,7 +48,7 @@ def test_deciaml_data_type_new def test_invalid_precision message = - "[decimal256-data-type][new]: Invalid: Decimal precision out of range: 77" + "[decimal256-data-type][new]: Invalid: Decimal precision out of range [1, 76]: 77" assert_raise(Arrow::Error::Invalid.new(message)) do Arrow::Decimal256DataType.new(77, 1) end diff --git a/cpp/src/arrow/type.cc b/cpp/src/arrow/type.cc index bed7536319e..a01ba0532c5 100644 --- a/cpp/src/arrow/type.cc +++ b/cpp/src/arrow/type.cc @@ -831,7 +831,8 @@ Decimal128Type::Decimal128Type(int32_t precision, int32_t scale) Result> Decimal128Type::Make(int32_t precision, int32_t scale) { if (precision < kMinPrecision || precision > kMaxPrecision) { - return Status::Invalid("Decimal precision out of range: ", precision); + return Status::Invalid("Decimal precision out of range [", int32_t(kMinPrecision), + ", ", int32_t(kMaxPrecision), "]: ", precision); } return std::make_shared(precision, scale); } @@ -847,7 +848,8 @@ Decimal256Type::Decimal256Type(int32_t precision, int32_t scale) Result> Decimal256Type::Make(int32_t precision, int32_t scale) { if (precision < kMinPrecision || precision > kMaxPrecision) { - return Status::Invalid("Decimal precision out of range: ", precision); + return Status::Invalid("Decimal precision out of range [", int32_t(kMinPrecision), + ", ", int32_t(kMaxPrecision), "]: ", precision); } return std::make_shared(precision, scale); } diff --git a/r/tests/testthat/test-data-type.R b/r/tests/testthat/test-data-type.R index a9d0879b8a0..98dc9ebfbda 100644 --- a/r/tests/testthat/test-data-type.R +++ b/r/tests/testthat/test-data-type.R @@ -390,8 +390,8 @@ test_that("decimal type and validation", { expect_error(decimal(4)) expect_error(decimal(4, "two"), '"scale" must be an integer') expect_error(decimal(NA, 2), '"precision" must be an integer') - expect_error(decimal(0, 2), "Invalid: Decimal precision out of range: 0") - expect_error(decimal(100, 2), "Invalid: Decimal precision out of range: 100") + expect_error(decimal(0, 2), "Invalid: Decimal precision out of range [1, 38]: 0", fixed = TRUE) + expect_error(decimal(100, 2), "Invalid: Decimal precision out of range [1, 38]: 100", fixed = TRUE) expect_error(decimal(4, NA), '"scale" must be an integer') expect_r6_class(decimal(4, 2), "Decimal128Type")