This is an automated email from the ASF dual-hosted git repository.
bkietz pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/main by this push:
new d9ee3a7961 GH-37643: [C++] Enhance arrow::Datum::ToString (#37646)
d9ee3a7961 is described below
commit d9ee3a7961df44a1e30d3fe615ee3a20af569025
Author: mwish <[email protected]>
AuthorDate: Fri Sep 15 23:38:23 2023 +0800
GH-37643: [C++] Enhance arrow::Datum::ToString (#37646)
### Rationale for this change
Add print child fields for `arrow::Datum::ToString`. Because previously it
just print a type.
### What changes are included in this PR?
Add detail in `arrow::Datum::ToString`
### Are these changes tested?
no
### Are there any user-facing changes?
Yes
* Closes: #37643
Authored-by: mwish <[email protected]>
Signed-off-by: Benjamin Kietzman <[email protected]>
---
c_glib/test/test-array-datum.rb | 2 +-
c_glib/test/test-chunked-array-datum.rb | 2 +-
c_glib/test/test-record-batch-datum.rb | 2 +-
c_glib/test/test-scalar-datum.rb | 2 +-
c_glib/test/test-table-datum.rb | 11 ++++++++++-
cpp/src/arrow/datum.cc | 10 +++++-----
cpp/src/arrow/datum.h | 1 -
cpp/src/arrow/datum_test.cc | 4 ++--
8 files changed, 21 insertions(+), 13 deletions(-)
diff --git a/c_glib/test/test-array-datum.rb b/c_glib/test/test-array-datum.rb
index 623e5589ce..1b2c9f91e2 100644
--- a/c_glib/test/test-array-datum.rb
+++ b/c_glib/test/test-array-datum.rb
@@ -61,7 +61,7 @@ class TestArrayDatum < Test::Unit::TestCase
end
def test_to_string
- assert_equal("Array", @datum.to_s)
+ assert_equal("Array([\n" + " true,\n" + " false\n" + "])", @datum.to_s)
end
def test_value
diff --git a/c_glib/test/test-chunked-array-datum.rb
b/c_glib/test/test-chunked-array-datum.rb
index 7631731532..b82f3eed8a 100644
--- a/c_glib/test/test-chunked-array-datum.rb
+++ b/c_glib/test/test-chunked-array-datum.rb
@@ -49,7 +49,7 @@ class TestChunkedArrayDatum < Test::Unit::TestCase
end
def test_to_string
- assert_equal("ChunkedArray", @datum.to_s)
+ assert_equal("ChunkedArray([\n" + " [\n" + " true,\n" + " false\n"
+ " ]\n" + "])", @datum.to_s)
end
def test_value
diff --git a/c_glib/test/test-record-batch-datum.rb
b/c_glib/test/test-record-batch-datum.rb
index 33eb793ba8..ec572e0f13 100644
--- a/c_glib/test/test-record-batch-datum.rb
+++ b/c_glib/test/test-record-batch-datum.rb
@@ -49,7 +49,7 @@ class TestRecordBatchDatum < Test::Unit::TestCase
end
def test_to_string
- assert_equal("RecordBatch", @datum.to_s)
+ assert_equal("RecordBatch(visible: [\n" + " true,\n" + " false\n"
+ " ]\n" + ")", @datum.to_s)
end
def test_value
diff --git a/c_glib/test/test-scalar-datum.rb b/c_glib/test/test-scalar-datum.rb
index 17e5d6b061..32a5331518 100644
--- a/c_glib/test/test-scalar-datum.rb
+++ b/c_glib/test/test-scalar-datum.rb
@@ -60,7 +60,7 @@ class TestScalarDatum < Test::Unit::TestCase
end
def test_to_string
- assert_equal("Scalar", @datum.to_s)
+ assert_equal("Scalar(true)", @datum.to_s)
end
def test_value
diff --git a/c_glib/test/test-table-datum.rb b/c_glib/test/test-table-datum.rb
index 7ff3997e88..c34ecf6314 100644
--- a/c_glib/test/test-table-datum.rb
+++ b/c_glib/test/test-table-datum.rb
@@ -49,7 +49,16 @@ class TestTableDatum < Test::Unit::TestCase
end
def test_to_string
- assert_equal("Table", @datum.to_s)
+ assert_equal("Table(visible: bool\n" +
+ "----\n" +
+ "visible:\n" +
+ " [\n" +
+ " [\n" +
+ " true,\n" +
+ " false\n" +
+ " ]\n" +
+ " ]\n" +
+ ")", @datum.to_s)
end
def test_value
diff --git a/cpp/src/arrow/datum.cc b/cpp/src/arrow/datum.cc
index d0b5cf62c6..2ac230232e 100644
--- a/cpp/src/arrow/datum.cc
+++ b/cpp/src/arrow/datum.cc
@@ -182,15 +182,15 @@ std::string Datum::ToString() const {
case Datum::NONE:
return "nullptr";
case Datum::SCALAR:
- return "Scalar";
+ return "Scalar(" + scalar()->ToString() + ")";
case Datum::ARRAY:
- return "Array";
+ return "Array(" + make_array()->ToString() + ")";
case Datum::CHUNKED_ARRAY:
- return "ChunkedArray";
+ return "ChunkedArray(" + chunked_array()->ToString() + ")";
case Datum::RECORD_BATCH:
- return "RecordBatch";
+ return "RecordBatch(" + record_batch()->ToString() + ")";
case Datum::TABLE:
- return "Table";
+ return "Table(" + table()->ToString() + ")";
default:
DCHECK(false);
return "";
diff --git a/cpp/src/arrow/datum.h b/cpp/src/arrow/datum.h
index 57ae3731b5..31b2d2274c 100644
--- a/cpp/src/arrow/datum.h
+++ b/cpp/src/arrow/datum.h
@@ -301,7 +301,6 @@ struct ARROW_EXPORT Datum {
bool operator==(const Datum& other) const { return Equals(other); }
bool operator!=(const Datum& other) const { return !Equals(other); }
- /// \brief Return a string representation of the kind of datum stored.
std::string ToString() const;
};
diff --git a/cpp/src/arrow/datum_test.cc b/cpp/src/arrow/datum_test.cc
index 14daac6a79..909d2577e6 100644
--- a/cpp/src/arrow/datum_test.cc
+++ b/cpp/src/arrow/datum_test.cc
@@ -154,8 +154,8 @@ TEST(Datum, ToString) {
Datum v1(arr);
Datum v2(std::make_shared<Int8Scalar>(1));
- ASSERT_EQ("Array", v1.ToString());
- ASSERT_EQ("Scalar", v2.ToString());
+ ASSERT_EQ("Array([\n 1,\n 2,\n 3,\n 4\n])", v1.ToString());
+ ASSERT_EQ("Scalar(1)", v2.ToString());
}
TEST(Datum, TotalBufferSize) {