Skip to content

ARROW-75: Fix handling of empty strings - #32

Closed
danrobinson wants to merge 4 commits into
apache:masterfrom
danrobinson:ARROW-75
Closed

ARROW-75: Fix handling of empty strings#32
danrobinson wants to merge 4 commits into
apache:masterfrom
danrobinson:ARROW-75

Conversation

@danrobinson

Copy link
Copy Markdown
Contributor

Fixes ARROW-75 (and changes Python tests to verify that behavior).

Comment threadcpp/src/arrow/types/primitive.h Outdated
RETURN_NOT_OK(Resize(new_capacity));
}
memcpy(raw_buffer() + length_, values, length * elsize_);
if (length > 0) memcpy(raw_buffer() + length_, values, length * elsize_);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Put braces around this (with the memcpy on its own line)?

@wesm

wesm commented Mar 22, 2016

Copy link
Copy Markdown
Member

Could you also add a small unit test to types/string-test.cc (appending one or two empty strings and checking the resulting StringArray will suffice)?

@danrobinson

Copy link
Copy Markdown
ContributorAuthor

It turns out the empty strings only cause a segfault when they are the first item in the array. Both the Python and C++ tests now test for this behavior.

@wesm

wesm commented Mar 22, 2016

Copy link
Copy Markdown
Member

You can add a pre-commit hook to run make lint to avoid cpplint-related travis failures (or also run make lint -- I forgot a lot until I added the pre-commit hook)

@wesm

wesm commented Mar 22, 2016

Copy link
Copy Markdown
Member

+1, thank you

@wesm

wesm commented Mar 22, 2016

Copy link
Copy Markdown
Member

Merged -- note you should be able to self-assign JIRAs now

wesm added a commit to wesm/arrow that referenced this pull request Sep 8, 2018
…litate unit testing
Several things in this patch
* Adds PageReader abstraction, and a SerializedPageReader implementation
according to the Parquet file format
* Adds a MockPageReader and a couple unit tests demonstrating end-to-end test
without creating a Parquet file
* Adds a DataPageBuilder test fixture tool, may become part of the main write
path later
* Adds PlainEncoder implementation for a few primitive types
* Fixes a few ColumnReader bugs exposed by the unit tests
Author: Wes McKinney <wes@cloudera.com>
Closesapache#32 from wesm/PARQUET-485 and squashes the following commits:
aa33078 [Wes McKinney] Fix function doc
e897a81 [Wes McKinney] Restore NumRequiredBits function after rebase
ee4d97a [Wes McKinney] Change PageReader::NextPage API to return shared_ptr<Page>(nullptr) on eos
0324021 [Wes McKinney] Clarify some comments
ec871c4 [Wes McKinney] Add include guards
e63bbdd [Wes McKinney] Move vector_equal to util/test-common.h
44a78a1 [Wes McKinney] Refactor to decouple page deserialization from column reader so that mock data pages cna be constructed in unit tests.
Change-Id: I7c4564cc7978d0cde430a7a2c6a2944ba01d80c8
wesm added a commit to wesm/arrow that referenced this pull request Sep 8, 2018
Requires PARQUET-485 (apache#32)
The boolean Encoding::PLAIN code path was using RleDecoder, inconsistent with
other implementations of Parquet. This patch adds an implementation of plain
encoding and uses BitReader instead of RleDecoder to decode plain-encoded
boolean data. Unit tests to verify.
Also closes PR apache#12. Thanks to @edani for reporting.
Author: Wes McKinney <wes@cloudera.com>
Closesapache#34 from wesm/PARQUET-454 and squashes the following commits:
01cb5a7 [Wes McKinney] Use a seed in the data generation
0bf5d8a [Wes McKinney] Fix inconsistencies with boolean PLAIN encoding.
Change-Id: I1be5252c654d4864d14c3cdd70d63c507e0a9403
kou pushed a commit that referenced this pull request May 10, 2020
This PR enables tests for `ARROW_COMPUTE`, `ARROW_DATASET`, `ARROW_FILESYSTEM`, `ARROW_HDFS`, `ARROW_ORC`, and `ARROW_IPC` (default on). #7131 enabled a minimal set of tests as a starting point.
I confirmed that these tests pass locally with the current master. In the current TravisCI environment, we cannot see this result due to a lot of error messages in `arrow-utility-test`.
```
$ git log | head -1
commit ed5f534
% ctest
...
Start 1: arrow-array-test
1/51 Test #1: arrow-array-test ..................... Passed 4.62 sec
Start 2: arrow-buffer-test
2/51 Test #2: arrow-buffer-test .................... Passed 0.14 sec
Start 3: arrow-extension-type-test
3/51 Test #3: arrow-extension-type-test ............ Passed 0.12 sec
Start 4: arrow-misc-test
4/51 Test #4: arrow-misc-test ...................... Passed 0.14 sec
Start 5: arrow-public-api-test
5/51 Test #5: arrow-public-api-test ................ Passed 0.12 sec
Start 6: arrow-scalar-test
6/51 Test #6: arrow-scalar-test .................... Passed 0.13 sec
Start 7: arrow-type-test
7/51 Test #7: arrow-type-test ...................... Passed 0.14 sec
Start 8: arrow-table-test
8/51 Test #8: arrow-table-test ..................... Passed 0.13 sec
Start 9: arrow-tensor-test
9/51 Test #9: arrow-tensor-test .................... Passed 0.13 sec
Start 10: arrow-sparse-tensor-test
10/51 Test #10: arrow-sparse-tensor-test ............. Passed 0.16 sec
Start 11: arrow-stl-test
11/51 Test #11: arrow-stl-test ....................... Passed 0.12 sec
Start 12: arrow-concatenate-test
12/51 Test #12: arrow-concatenate-test ............... Passed 0.53 sec
Start 13: arrow-diff-test
13/51 Test #13: arrow-diff-test ...................... Passed 1.45 sec
Start 14: arrow-c-bridge-test
14/51 Test #14: arrow-c-bridge-test .................. Passed 0.18 sec
Start 15: arrow-io-buffered-test
15/51 Test #15: arrow-io-buffered-test ............... Passed 0.20 sec
Start 16: arrow-io-compressed-test
16/51 Test #16: arrow-io-compressed-test ............. Passed 3.48 sec
Start 17: arrow-io-file-test
17/51 Test #17: arrow-io-file-test ................... Passed 0.74 sec
Start 18: arrow-io-hdfs-test
18/51 Test #18: arrow-io-hdfs-test ................... Passed 0.12 sec
Start 19: arrow-io-memory-test
19/51 Test #19: arrow-io-memory-test ................. Passed 2.77 sec
Start 20: arrow-utility-test
20/51 Test #20: arrow-utility-test ...................***Failed 5.65 sec
Start 21: arrow-threading-utility-test
21/51 Test #21: arrow-threading-utility-test ......... Passed 1.34 sec
Start 22: arrow-compute-compute-test
22/51 Test #22: arrow-compute-compute-test ........... Passed 0.13 sec
Start 23: arrow-compute-boolean-test
23/51 Test #23: arrow-compute-boolean-test ........... Passed 0.15 sec
Start 24: arrow-compute-cast-test
24/51 Test #24: arrow-compute-cast-test .............. Passed 0.22 sec
Start 25: arrow-compute-hash-test
25/51 Test #25: arrow-compute-hash-test .............. Passed 2.61 sec
Start 26: arrow-compute-isin-test
26/51 Test #26: arrow-compute-isin-test .............. Passed 0.81 sec
Start 27: arrow-compute-match-test
27/51 Test #27: arrow-compute-match-test ............. Passed 0.40 sec
Start 28: arrow-compute-sort-to-indices-test
28/51 Test #28: arrow-compute-sort-to-indices-test ... Passed 3.33 sec
Start 29: arrow-compute-nth-to-indices-test
29/51 Test #29: arrow-compute-nth-to-indices-test .... Passed 1.51 sec
Start 30: arrow-compute-util-internal-test
30/51 Test #30: arrow-compute-util-internal-test ..... Passed 0.13 sec
Start 31: arrow-compute-add-test
31/51 Test #31: arrow-compute-add-test ............... Passed 0.12 sec
Start 32: arrow-compute-aggregate-test
32/51 Test #32: arrow-compute-aggregate-test ......... Passed 14.70 sec
Start 33: arrow-compute-compare-test
33/51 Test #33: arrow-compute-compare-test ........... Passed 7.96 sec
Start 34: arrow-compute-take-test
34/51 Test #34: arrow-compute-take-test .............. Passed 4.80 sec
Start 35: arrow-compute-filter-test
35/51 Test #35: arrow-compute-filter-test ............ Passed 8.23 sec
Start 36: arrow-dataset-dataset-test
36/51 Test #36: arrow-dataset-dataset-test ........... Passed 0.25 sec
Start 37: arrow-dataset-discovery-test
37/51 Test #37: arrow-dataset-discovery-test ......... Passed 0.13 sec
Start 38: arrow-dataset-file-ipc-test
38/51 Test #38: arrow-dataset-file-ipc-test .......... Passed 0.21 sec
Start 39: arrow-dataset-file-test
39/51 Test #39: arrow-dataset-file-test .............. Passed 0.12 sec
Start 40: arrow-dataset-filter-test
40/51 Test #40: arrow-dataset-filter-test ............ Passed 0.16 sec
Start 41: arrow-dataset-partition-test
41/51 Test #41: arrow-dataset-partition-test ......... Passed 0.13 sec
Start 42: arrow-dataset-scanner-test
42/51 Test #42: arrow-dataset-scanner-test ........... Passed 0.20 sec
Start 43: arrow-filesystem-test
43/51 Test #43: arrow-filesystem-test ................ Passed 1.62 sec
Start 44: arrow-hdfs-test
44/51 Test #44: arrow-hdfs-test ...................... Passed 0.13 sec
Start 45: arrow-feather-test
45/51 Test #45: arrow-feather-test ................... Passed 0.91 sec
Start 46: arrow-ipc-read-write-test
46/51 Test #46: arrow-ipc-read-write-test ............ Passed 5.77 sec
Start 47: arrow-ipc-json-simple-test
47/51 Test #47: arrow-ipc-json-simple-test ........... Passed 0.16 sec
Start 48: arrow-ipc-json-test
48/51 Test #48: arrow-ipc-json-test .................. Passed 0.27 sec
Start 49: arrow-json-integration-test
49/51 Test #49: arrow-json-integration-test .......... Passed 0.13 sec
Start 50: arrow-json-test
50/51 Test #50: arrow-json-test ...................... Passed 0.26 sec
Start 51: arrow-orc-adapter-test
51/51 Test #51: arrow-orc-adapter-test ............... Passed 1.92 sec
98% tests passed, 1 tests failed out of 51
Label Time Summary:
arrow-tests = 27.38 sec (27 tests)
arrow_compute = 45.11 sec (14 tests)
arrow_dataset = 1.21 sec (7 tests)
arrow_ipc = 6.20 sec (3 tests)
unittest = 79.91 sec (51 tests)
Total Test time (real) = 79.99 sec
The following tests FAILED:
20 - arrow-utility-test (Failed)
Errors while running CTest
```
Closes#7142 from kiszk/ARROW-8754
Authored-by: Kazuaki Ishizaki <ishizaki@jp.ibm.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
jayhomn-bitquill referenced this pull request in Bit-Quill/arrow Aug 10, 2022
…Encryption
Change ssl parameter to UseEncryption
paddyroddy referenced this pull request in rok/arrow Jul 19, 2025
cbb330 added a commit to cbb330/arrow that referenced this pull request Feb 20, 2026
cbb330 added a commit to cbb330/arrow that referenced this pull request Feb 20, 2026
…e#76)
- Extended ORC adapter to extract float/double statistics
- Added NaN filtering in adapter (statistics with NaN are rejected)
- Added IEEE 754 edge case handling in DeriveFieldGuarantee
- Handles infinity values correctly (valid bounds)
- Handles signed zero correctly (-0.0 == +0.0)
- Added comprehensive float predicate pushdown tests
- Tests cover: basic filtering, double precision, infinity, signed zero, ranges
Implementation details:
- ORC FLOAT/DOUBLE types now return min/max statistics
- NaN values filtered at adapter level for safety
- Float-specific validation in predicate evaluation
- 5 test cases covering all edge cases from allium spec
Verified: arrow_orc target builds successfully
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
cbb330 added a commit to cbb330/arrow that referenced this pull request Feb 20, 2026
cbb330 added a commit to cbb330/arrow that referenced this pull request Feb 20, 2026
cbb330 added a commit to cbb330/arrow that referenced this pull request Feb 20, 2026
cbb330 added a commit to cbb330/arrow that referenced this pull request Feb 20, 2026
Reverts PRs apache#76-88 which added:
- Task apache#32: Float32/float64 predicate pushdown
- Task apache#33: String/binary predicate pushdown
- Task apache#34: Timestamp/date predicate pushdown
- Task apache#35: Nested type tests
Tasks 32-35 are now marked as pending for future implementation.
cbb330 added a commit to cbb330/arrow that referenced this pull request Feb 24, 2026
cbb330 added a commit to cbb330/arrow that referenced this pull request Feb 24, 2026
…e#76)
- Extended ORC adapter to extract float/double statistics
- Added NaN filtering in adapter (statistics with NaN are rejected)
- Added IEEE 754 edge case handling in DeriveFieldGuarantee
- Handles infinity values correctly (valid bounds)
- Handles signed zero correctly (-0.0 == +0.0)
- Added comprehensive float predicate pushdown tests
- Tests cover: basic filtering, double precision, infinity, signed zero, ranges
Implementation details:
- ORC FLOAT/DOUBLE types now return min/max statistics
- NaN values filtered at adapter level for safety
- Float-specific validation in predicate evaluation
- 5 test cases covering all edge cases from allium spec
Verified: arrow_orc target builds successfully
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
cbb330 added a commit to cbb330/arrow that referenced this pull request Feb 24, 2026
cbb330 added a commit to cbb330/arrow that referenced this pull request Feb 24, 2026
cbb330 added a commit to cbb330/arrow that referenced this pull request Feb 24, 2026
cbb330 added a commit to cbb330/arrow that referenced this pull request Feb 24, 2026
Reverts PRs apache#76-88 which added:
- Task apache#32: Float32/float64 predicate pushdown
- Task apache#33: String/binary predicate pushdown
- Task apache#34: Timestamp/date predicate pushdown
- Task apache#35: Nested type tests
Tasks 32-35 are now marked as pending for future implementation.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@danrobinson@wesm