GH-46128:[C++] Add CompactArray method to BinaryViewArray types - #46229

Closed
andishgar wants to merge 4 commits into
apache:mainfrom
andishgar:add-compact-method-to-binary-view-types
Closed

GH-46128:[C++] Add CompactArray method to BinaryViewArray types#46229
andishgar wants to merge 4 commits into
apache:mainfrom
andishgar:add-compact-method-to-binary-view-types

Conversation

@andishgar

@andishgarandishgar commented Apr 25, 2025

Copy link
Copy Markdown
Contributor

Rationale for this change

As we discussed here, the following method copies only data that is used in data buffers to a new buffer

What changes are included in this PR?

Add a new method the name of which is CompactArray

Are these changes tested?

I run the relevant unit tests

Are there any user-facing changes?

Yes, I add ComapctArray method to BinaryViewArray class

@andishgar
andishgar marked this pull request as draft April 25, 2025 16:28
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #46128has been automatically assigned in GitHub to PR creator.

@andishgar
andishgar marked this pull request as ready for review April 26, 2025 13:56
@andishgar

Copy link
Copy Markdown
ContributorAuthor

@pitrou When I suggested adding these methods, I wasn't aware thatarrow::BinaryViewBuilder::AppendArraySlice already serves the same purpose. What do you recommend I do? Should I drop this PR?

@andishgar

Copy link
Copy Markdown
ContributorAuthor

Another note:
I found that the following code results in an error when using arrow::BinaryViewBuilder::AppendArraySlice. Is there any priority or plan to address this?

#include<iostream>
#include<arrow/api.h>
arrow::Status Run() {
int32_t length = std::numeric_limits<int32_t>::max();
std::string input( length,'a');
arrow::StringViewBuilder builder;
ARROW_RETURN_NOT_OK(builder.Append(input));
ARROW_RETURN_NOT_OK(builder.Append(input));
ARROW_ASSIGN_OR_RAISE(auto result, builder.Finish());
arrow::ArraySpan span(*result->data());
// The following line ends to Capacity errorARROW_RETURN_NOT_OK(builder.AppendArraySlice(span,0,2));
returnarrow::Status::OK();
}
intmain() {
auto status = Run();
if (!status.ok()) {
std::cerr << status.ToString() << std::endl;
}
return0;
}
Error

Capacity error: BinaryView or StringView elements cannot reference strings larger than 2GB

@pitrou

Copy link
Copy Markdown
Member

When I suggested adding these methods, I wasn't aware thatarrow::BinaryViewBuilder::AppendArraySlice already serves the same purpose. What do you recommend I do?

I still think it's a useful utility method to have. cc @bkietz for additional opinions.

I found that the following code results in an error when using arrow::BinaryViewBuilder::AppendArraySlice. Is there any priority or plan to address this?

I don't think this bug is already reported, so there is no "priority or plan". Can you open a separate issue for it, and perhaps submit a PR if you're motivated?

@andishgar

Copy link
Copy Markdown
ContributorAuthor

I don't think this bug is already reported, so there is no "priority or plan". Can you open a separate issue for it, and perhaps submit a PR if you're motivated?

Thank you for your response. Yes, of course

@pitroupitrou left a comment

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.

Thanks for posting this PR and sorry for the delay @andishgar . I added some comments below.

Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
@github-actionsgithub-actionsBot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels Jul 1, 2025
@andishgar

Copy link
Copy Markdown
ContributorAuthor

@pitrou Thanks for the review. I’ll look into it and follow up soon.

@andishgar

andishgar commented Jul 5, 2025

Copy link
Copy Markdown
ContributorAuthor

@pitrou
Note: This is unrelated to the PR.
I plan to contribute to Arrow until August 2, and then I will resume contributions from August 30.
If you think there are any issues or pull requests related to me that have higher priority and should be addressed before August 2, please let me know so I can take care of them in time.

Another Note
If you plan to review any of my other PRs, I’d really appreciate it if you could let me know beforehand. I’d like to take a final look and possibly make some improvements first.
(I’ve had a few valuable code review sessions with Kou and learned quite a bit through them. Since most of my code was written before those PRs , I’d prefer to apply those learnings before others take the time to review my work.)

@andishgarandishgar changed the title GH-46128:[C++][Compute] Add CompactArray method to BinaryViewArray typesGH-46128:[C++] Add CompactArray method to BinaryViewArray typesJul 5, 2025
@andishgar
andishgar marked this pull request as draft July 7, 2025 12:26
@andishgar
andishgarforce-pushed the add-compact-method-to-binary-view-types branch from 81d18fc to 419db99CompareJuly 15, 2025 11:14
@andishgar
andishgar marked this pull request as ready for review July 15, 2025 12:39
@andishgar
andishgar requested a review from pitrouJuly 15, 2025 12:39
@andishgar

Copy link
Copy Markdown
ContributorAuthor

@pitrou I’ve applied your suggestion. The changes are ready for review.

Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
@andishgar

Copy link
Copy Markdown
ContributorAuthor

Thank you for your feedback. I will look into this.

@andishgar
andishgar marked this pull request as draft July 20, 2025 11:28
@andishgar
andishgarforce-pushed the add-compact-method-to-binary-view-types branch 4 times, most recently from e3ed39e to 53334d5CompareJuly 20, 2025 11:39
relocate GetOrCopyNullBitmapBuffer
reclocate IntervalMerger to util/interval.h
Write tests to cover all branches and lines of Interval Merger
@andishgar
andishgarforce-pushed the add-compact-method-to-binary-view-types branch from 53334d5 to 15698fcCompareJuly 20, 2025 11:46
@andishgar
andishgar marked this pull request as ready for review July 20, 2025 14:24
@andishgar
andishgar requested a review from pitrouJuly 20, 2025 14:24
@andishgar

andishgar commented Jul 20, 2025

Copy link
Copy Markdown
ContributorAuthor

@pitrou I applied your suggestions.
Two notes:

1-Regarding this comment, my current algorithm for adding intervals even updates interval.start, so I believe the suggestion to use a std::map doesn't apply in this case. However, if you're still in favor of using std::map, please let me know, and I’ll adjust the logic accordingly.

2- I use a lot of if statements in TryFastInsert for MergeOrInsertInterval, and the tests I wrote cover all the branches. However, if you believe the number of if statements should be reduced, it is possible, since most of them are independent of each other. That said, it's also possible to increase the number of if statements—for example, in every place I use std::max, it could be broken down into several ifs. Another example is the "less than" case in TryFastInsert, which I mentioned in my comments.

@github-actions

Copy link
Copy Markdown

Thank you for your contribution. Unfortunately, this pull request has been marked as stale because it has had no activity in the past 365 days. Please remove the stale label or comment below, or this PR will be closed in 14 days. Feel free to re-open this if it has been closed in error. If you do not have repository permissions to reopen the PR, please tag a maintainer.

@github-actionsgithub-actionsBot added the Status: stale-warning Issues and PRs flagged as stale which are due to be closed if no indication otherwise label Jul 21, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting committer reviewAwaiting committer reviewComponent: C++Status: stale-warningIssues and PRs flagged as stale which are due to be closed if no indication otherwise

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@andishgar@pitrou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content

GH-46128:[C++] Add CompactArray method to BinaryViewArray types - #46229

Closed
andishgar wants to merge 4 commits into
apache:mainfrom
andishgar:add-compact-method-to-binary-view-types
Closed

GH-46128:[C++] Add CompactArray method to BinaryViewArray types#46229
andishgar wants to merge 4 commits into
apache:mainfrom
andishgar:add-compact-method-to-binary-view-types

Conversation

@andishgar

@andishgarandishgar commented Apr 25, 2025

Copy link
Copy Markdown
Contributor

Rationale for this change

As we discussed here, the following method copies only data that is used in data buffers to a new buffer

What changes are included in this PR?

Add a new method the name of which is CompactArray

Are these changes tested?

I run the relevant unit tests

Are there any user-facing changes?

Yes, I add ComapctArray method to BinaryViewArray class

@andishgar
andishgar marked this pull request as draft April 25, 2025 16:28
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #46128has been automatically assigned in GitHub to PR creator.

@andishgar
andishgar marked this pull request as ready for review April 26, 2025 13:56
@andishgar

Copy link
Copy Markdown
ContributorAuthor

@pitrou When I suggested adding these methods, I wasn't aware thatarrow::BinaryViewBuilder::AppendArraySlice already serves the same purpose. What do you recommend I do? Should I drop this PR?

@andishgar

Copy link
Copy Markdown
ContributorAuthor

Another note:
I found that the following code results in an error when using arrow::BinaryViewBuilder::AppendArraySlice. Is there any priority or plan to address this?

#include<iostream>
#include<arrow/api.h>
arrow::Status Run() {
int32_t length = std::numeric_limits<int32_t>::max();
std::string input( length,'a');
arrow::StringViewBuilder builder;
ARROW_RETURN_NOT_OK(builder.Append(input));
ARROW_RETURN_NOT_OK(builder.Append(input));
ARROW_ASSIGN_OR_RAISE(auto result, builder.Finish());
arrow::ArraySpan span(*result->data());
// The following line ends to Capacity errorARROW_RETURN_NOT_OK(builder.AppendArraySlice(span,0,2));
returnarrow::Status::OK();
}
intmain() {
auto status = Run();
if (!status.ok()) {
std::cerr << status.ToString() << std::endl;
}
return0;
}
Error

Capacity error: BinaryView or StringView elements cannot reference strings larger than 2GB

@pitrou

Copy link
Copy Markdown
Member

When I suggested adding these methods, I wasn't aware thatarrow::BinaryViewBuilder::AppendArraySlice already serves the same purpose. What do you recommend I do?

I still think it's a useful utility method to have. cc @bkietz for additional opinions.

I found that the following code results in an error when using arrow::BinaryViewBuilder::AppendArraySlice. Is there any priority or plan to address this?

I don't think this bug is already reported, so there is no "priority or plan". Can you open a separate issue for it, and perhaps submit a PR if you're motivated?

@andishgar

Copy link
Copy Markdown
ContributorAuthor

I don't think this bug is already reported, so there is no "priority or plan". Can you open a separate issue for it, and perhaps submit a PR if you're motivated?

Thank you for your response. Yes, of course

@pitroupitrou left a comment

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.

Thanks for posting this PR and sorry for the delay @andishgar . I added some comments below.

Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
@github-actionsgithub-actionsBot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels Jul 1, 2025
@andishgar

Copy link
Copy Markdown
ContributorAuthor

@pitrou Thanks for the review. I’ll look into it and follow up soon.

@andishgar

andishgar commented Jul 5, 2025

Copy link
Copy Markdown
ContributorAuthor

@pitrou
Note: This is unrelated to the PR.
I plan to contribute to Arrow until August 2, and then I will resume contributions from August 30.
If you think there are any issues or pull requests related to me that have higher priority and should be addressed before August 2, please let me know so I can take care of them in time.

Another Note
If you plan to review any of my other PRs, I’d really appreciate it if you could let me know beforehand. I’d like to take a final look and possibly make some improvements first.
(I’ve had a few valuable code review sessions with Kou and learned quite a bit through them. Since most of my code was written before those PRs , I’d prefer to apply those learnings before others take the time to review my work.)

@andishgarandishgar changed the title GH-46128:[C++][Compute] Add CompactArray method to BinaryViewArray typesGH-46128:[C++] Add CompactArray method to BinaryViewArray typesJul 5, 2025
@andishgar
andishgar marked this pull request as draft July 7, 2025 12:26
@andishgar
andishgarforce-pushed the add-compact-method-to-binary-view-types branch from 81d18fc to 419db99CompareJuly 15, 2025 11:14
@andishgar
andishgar marked this pull request as ready for review July 15, 2025 12:39
@andishgar
andishgar requested a review from pitrouJuly 15, 2025 12:39
@andishgar

Copy link
Copy Markdown
ContributorAuthor

@pitrou I’ve applied your suggestion. The changes are ready for review.

Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
@andishgar

Copy link
Copy Markdown
ContributorAuthor

Thank you for your feedback. I will look into this.

@andishgar
andishgar marked this pull request as draft July 20, 2025 11:28
@andishgar
andishgarforce-pushed the add-compact-method-to-binary-view-types branch 4 times, most recently from e3ed39e to 53334d5CompareJuly 20, 2025 11:39
relocate GetOrCopyNullBitmapBuffer
reclocate IntervalMerger to util/interval.h
Write tests to cover all branches and lines of Interval Merger
@andishgar
andishgarforce-pushed the add-compact-method-to-binary-view-types branch from 53334d5 to 15698fcCompareJuly 20, 2025 11:46
@andishgar
andishgar marked this pull request as ready for review July 20, 2025 14:24
@andishgar
andishgar requested a review from pitrouJuly 20, 2025 14:24
@andishgar

andishgar commented Jul 20, 2025

Copy link
Copy Markdown
ContributorAuthor

@pitrou I applied your suggestions.
Two notes:

1-Regarding this comment, my current algorithm for adding intervals even updates interval.start, so I believe the suggestion to use a std::map doesn't apply in this case. However, if you're still in favor of using std::map, please let me know, and I’ll adjust the logic accordingly.

2- I use a lot of if statements in TryFastInsert for MergeOrInsertInterval, and the tests I wrote cover all the branches. However, if you believe the number of if statements should be reduced, it is possible, since most of them are independent of each other. That said, it's also possible to increase the number of if statements—for example, in every place I use std::max, it could be broken down into several ifs. Another example is the "less than" case in TryFastInsert, which I mentioned in my comments.

@github-actions

Copy link
Copy Markdown

Thank you for your contribution. Unfortunately, this pull request has been marked as stale because it has had no activity in the past 365 days. Please remove the stale label or comment below, or this PR will be closed in 14 days. Feel free to re-open this if it has been closed in error. If you do not have repository permissions to reopen the PR, please tag a maintainer.

@github-actionsgithub-actionsBot added the Status: stale-warning Issues and PRs flagged as stale which are due to be closed if no indication otherwise label Jul 21, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting committer reviewAwaiting committer reviewComponent: C++Status: stale-warningIssues and PRs flagged as stale which are due to be closed if no indication otherwise

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@andishgar@pitrou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

GH-46128:[C++] Add CompactArray method to BinaryViewArray types - #46229

Closed
andishgar wants to merge 4 commits into
apache:mainfrom
andishgar:add-compact-method-to-binary-view-types
Closed

GH-46128:[C++] Add CompactArray method to BinaryViewArray types#46229
andishgar wants to merge 4 commits into
apache:mainfrom
andishgar:add-compact-method-to-binary-view-types

Conversation

@andishgar

@andishgarandishgar commented Apr 25, 2025

Copy link
Copy Markdown
Contributor

Rationale for this change

As we discussed here, the following method copies only data that is used in data buffers to a new buffer

What changes are included in this PR?

Add a new method the name of which is CompactArray

Are these changes tested?

I run the relevant unit tests

Are there any user-facing changes?

Yes, I add ComapctArray method to BinaryViewArray class

@andishgar
andishgar marked this pull request as draft April 25, 2025 16:28
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #46128has been automatically assigned in GitHub to PR creator.

@andishgar
andishgar marked this pull request as ready for review April 26, 2025 13:56
@andishgar

Copy link
Copy Markdown
ContributorAuthor

@pitrou When I suggested adding these methods, I wasn't aware thatarrow::BinaryViewBuilder::AppendArraySlice already serves the same purpose. What do you recommend I do? Should I drop this PR?

@andishgar

Copy link
Copy Markdown
ContributorAuthor

Another note:
I found that the following code results in an error when using arrow::BinaryViewBuilder::AppendArraySlice. Is there any priority or plan to address this?

#include<iostream>
#include<arrow/api.h>
arrow::Status Run() {
int32_t length = std::numeric_limits<int32_t>::max();
std::string input( length,'a');
arrow::StringViewBuilder builder;
ARROW_RETURN_NOT_OK(builder.Append(input));
ARROW_RETURN_NOT_OK(builder.Append(input));
ARROW_ASSIGN_OR_RAISE(auto result, builder.Finish());
arrow::ArraySpan span(*result->data());
// The following line ends to Capacity errorARROW_RETURN_NOT_OK(builder.AppendArraySlice(span,0,2));
returnarrow::Status::OK();
}
intmain() {
auto status = Run();
if (!status.ok()) {
std::cerr << status.ToString() << std::endl;
}
return0;
}
Error

Capacity error: BinaryView or StringView elements cannot reference strings larger than 2GB

@pitrou

Copy link
Copy Markdown
Member

When I suggested adding these methods, I wasn't aware thatarrow::BinaryViewBuilder::AppendArraySlice already serves the same purpose. What do you recommend I do?

I still think it's a useful utility method to have. cc @bkietz for additional opinions.

I found that the following code results in an error when using arrow::BinaryViewBuilder::AppendArraySlice. Is there any priority or plan to address this?

I don't think this bug is already reported, so there is no "priority or plan". Can you open a separate issue for it, and perhaps submit a PR if you're motivated?

@andishgar

Copy link
Copy Markdown
ContributorAuthor

I don't think this bug is already reported, so there is no "priority or plan". Can you open a separate issue for it, and perhaps submit a PR if you're motivated?

Thank you for your response. Yes, of course

@pitroupitrou left a comment

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.

Thanks for posting this PR and sorry for the delay @andishgar . I added some comments below.

Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
@github-actionsgithub-actionsBot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels Jul 1, 2025
@andishgar

Copy link
Copy Markdown
ContributorAuthor

@pitrou Thanks for the review. I’ll look into it and follow up soon.

@andishgar

andishgar commented Jul 5, 2025

Copy link
Copy Markdown
ContributorAuthor

@pitrou
Note: This is unrelated to the PR.
I plan to contribute to Arrow until August 2, and then I will resume contributions from August 30.
If you think there are any issues or pull requests related to me that have higher priority and should be addressed before August 2, please let me know so I can take care of them in time.

Another Note
If you plan to review any of my other PRs, I’d really appreciate it if you could let me know beforehand. I’d like to take a final look and possibly make some improvements first.
(I’ve had a few valuable code review sessions with Kou and learned quite a bit through them. Since most of my code was written before those PRs , I’d prefer to apply those learnings before others take the time to review my work.)

@andishgarandishgar changed the title GH-46128:[C++][Compute] Add CompactArray method to BinaryViewArray typesGH-46128:[C++] Add CompactArray method to BinaryViewArray typesJul 5, 2025
@andishgar
andishgar marked this pull request as draft July 7, 2025 12:26
@andishgar
andishgarforce-pushed the add-compact-method-to-binary-view-types branch from 81d18fc to 419db99CompareJuly 15, 2025 11:14
@andishgar
andishgar marked this pull request as ready for review July 15, 2025 12:39
@andishgar
andishgar requested a review from pitrouJuly 15, 2025 12:39
@andishgar

Copy link
Copy Markdown
ContributorAuthor

@pitrou I’ve applied your suggestion. The changes are ready for review.

Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
@andishgar

Copy link
Copy Markdown
ContributorAuthor

Thank you for your feedback. I will look into this.

@andishgar
andishgar marked this pull request as draft July 20, 2025 11:28
@andishgar
andishgarforce-pushed the add-compact-method-to-binary-view-types branch 4 times, most recently from e3ed39e to 53334d5CompareJuly 20, 2025 11:39
relocate GetOrCopyNullBitmapBuffer
reclocate IntervalMerger to util/interval.h
Write tests to cover all branches and lines of Interval Merger
@andishgar
andishgarforce-pushed the add-compact-method-to-binary-view-types branch from 53334d5 to 15698fcCompareJuly 20, 2025 11:46
@andishgar
andishgar marked this pull request as ready for review July 20, 2025 14:24
@andishgar
andishgar requested a review from pitrouJuly 20, 2025 14:24
@andishgar

andishgar commented Jul 20, 2025

Copy link
Copy Markdown
ContributorAuthor

@pitrou I applied your suggestions.
Two notes:

1-Regarding this comment, my current algorithm for adding intervals even updates interval.start, so I believe the suggestion to use a std::map doesn't apply in this case. However, if you're still in favor of using std::map, please let me know, and I’ll adjust the logic accordingly.

2- I use a lot of if statements in TryFastInsert for MergeOrInsertInterval, and the tests I wrote cover all the branches. However, if you believe the number of if statements should be reduced, it is possible, since most of them are independent of each other. That said, it's also possible to increase the number of if statements—for example, in every place I use std::max, it could be broken down into several ifs. Another example is the "less than" case in TryFastInsert, which I mentioned in my comments.

@github-actions

Copy link
Copy Markdown

Thank you for your contribution. Unfortunately, this pull request has been marked as stale because it has had no activity in the past 365 days. Please remove the stale label or comment below, or this PR will be closed in 14 days. Feel free to re-open this if it has been closed in error. If you do not have repository permissions to reopen the PR, please tag a maintainer.

@github-actionsgithub-actionsBot added the Status: stale-warning Issues and PRs flagged as stale which are due to be closed if no indication otherwise label Jul 21, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting committer reviewAwaiting committer reviewComponent: C++Status: stale-warningIssues and PRs flagged as stale which are due to be closed if no indication otherwise

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@andishgar@pitrou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

GH-46128:[C++] Add CompactArray method to BinaryViewArray types - #46229

Closed
andishgar wants to merge 4 commits into
apache:mainfrom
andishgar:add-compact-method-to-binary-view-types
Closed

GH-46128:[C++] Add CompactArray method to BinaryViewArray types#46229
andishgar wants to merge 4 commits into
apache:mainfrom
andishgar:add-compact-method-to-binary-view-types

Conversation

@andishgar

@andishgarandishgar commented Apr 25, 2025

Copy link
Copy Markdown
Contributor

Rationale for this change

As we discussed here, the following method copies only data that is used in data buffers to a new buffer

What changes are included in this PR?

Add a new method the name of which is CompactArray

Are these changes tested?

I run the relevant unit tests

Are there any user-facing changes?

Yes, I add ComapctArray method to BinaryViewArray class

@andishgar
andishgar marked this pull request as draft April 25, 2025 16:28
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #46128has been automatically assigned in GitHub to PR creator.

@andishgar
andishgar marked this pull request as ready for review April 26, 2025 13:56
@andishgar

Copy link
Copy Markdown
ContributorAuthor

@pitrou When I suggested adding these methods, I wasn't aware thatarrow::BinaryViewBuilder::AppendArraySlice already serves the same purpose. What do you recommend I do? Should I drop this PR?

@andishgar

Copy link
Copy Markdown
ContributorAuthor

Another note:
I found that the following code results in an error when using arrow::BinaryViewBuilder::AppendArraySlice. Is there any priority or plan to address this?

#include<iostream>
#include<arrow/api.h>
arrow::Status Run() {
int32_t length = std::numeric_limits<int32_t>::max();
std::string input( length,'a');
arrow::StringViewBuilder builder;
ARROW_RETURN_NOT_OK(builder.Append(input));
ARROW_RETURN_NOT_OK(builder.Append(input));
ARROW_ASSIGN_OR_RAISE(auto result, builder.Finish());
arrow::ArraySpan span(*result->data());
// The following line ends to Capacity errorARROW_RETURN_NOT_OK(builder.AppendArraySlice(span,0,2));
returnarrow::Status::OK();
}
intmain() {
auto status = Run();
if (!status.ok()) {
std::cerr << status.ToString() << std::endl;
}
return0;
}
Error

Capacity error: BinaryView or StringView elements cannot reference strings larger than 2GB

@pitrou

Copy link
Copy Markdown
Member

When I suggested adding these methods, I wasn't aware thatarrow::BinaryViewBuilder::AppendArraySlice already serves the same purpose. What do you recommend I do?

I still think it's a useful utility method to have. cc @bkietz for additional opinions.

I found that the following code results in an error when using arrow::BinaryViewBuilder::AppendArraySlice. Is there any priority or plan to address this?

I don't think this bug is already reported, so there is no "priority or plan". Can you open a separate issue for it, and perhaps submit a PR if you're motivated?

@andishgar

Copy link
Copy Markdown
ContributorAuthor

I don't think this bug is already reported, so there is no "priority or plan". Can you open a separate issue for it, and perhaps submit a PR if you're motivated?

Thank you for your response. Yes, of course

@pitroupitrou left a comment

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.

Thanks for posting this PR and sorry for the delay @andishgar . I added some comments below.

Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
@github-actionsgithub-actionsBot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels Jul 1, 2025
@andishgar

Copy link
Copy Markdown
ContributorAuthor

@pitrou Thanks for the review. I’ll look into it and follow up soon.

@andishgar

andishgar commented Jul 5, 2025

Copy link
Copy Markdown
ContributorAuthor

@pitrou
Note: This is unrelated to the PR.
I plan to contribute to Arrow until August 2, and then I will resume contributions from August 30.
If you think there are any issues or pull requests related to me that have higher priority and should be addressed before August 2, please let me know so I can take care of them in time.

Another Note
If you plan to review any of my other PRs, I’d really appreciate it if you could let me know beforehand. I’d like to take a final look and possibly make some improvements first.
(I’ve had a few valuable code review sessions with Kou and learned quite a bit through them. Since most of my code was written before those PRs , I’d prefer to apply those learnings before others take the time to review my work.)

@andishgarandishgar changed the title GH-46128:[C++][Compute] Add CompactArray method to BinaryViewArray typesGH-46128:[C++] Add CompactArray method to BinaryViewArray typesJul 5, 2025
@andishgar
andishgar marked this pull request as draft July 7, 2025 12:26
@andishgar
andishgarforce-pushed the add-compact-method-to-binary-view-types branch from 81d18fc to 419db99CompareJuly 15, 2025 11:14
@andishgar
andishgar marked this pull request as ready for review July 15, 2025 12:39
@andishgar
andishgar requested a review from pitrouJuly 15, 2025 12:39
@andishgar

Copy link
Copy Markdown
ContributorAuthor

@pitrou I’ve applied your suggestion. The changes are ready for review.

Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
@andishgar

Copy link
Copy Markdown
ContributorAuthor

Thank you for your feedback. I will look into this.

@andishgar
andishgar marked this pull request as draft July 20, 2025 11:28
@andishgar
andishgarforce-pushed the add-compact-method-to-binary-view-types branch 4 times, most recently from e3ed39e to 53334d5CompareJuly 20, 2025 11:39
relocate GetOrCopyNullBitmapBuffer
reclocate IntervalMerger to util/interval.h
Write tests to cover all branches and lines of Interval Merger
@andishgar
andishgarforce-pushed the add-compact-method-to-binary-view-types branch from 53334d5 to 15698fcCompareJuly 20, 2025 11:46
@andishgar
andishgar marked this pull request as ready for review July 20, 2025 14:24
@andishgar
andishgar requested a review from pitrouJuly 20, 2025 14:24
@andishgar

andishgar commented Jul 20, 2025

Copy link
Copy Markdown
ContributorAuthor

@pitrou I applied your suggestions.
Two notes:

1-Regarding this comment, my current algorithm for adding intervals even updates interval.start, so I believe the suggestion to use a std::map doesn't apply in this case. However, if you're still in favor of using std::map, please let me know, and I’ll adjust the logic accordingly.

2- I use a lot of if statements in TryFastInsert for MergeOrInsertInterval, and the tests I wrote cover all the branches. However, if you believe the number of if statements should be reduced, it is possible, since most of them are independent of each other. That said, it's also possible to increase the number of if statements—for example, in every place I use std::max, it could be broken down into several ifs. Another example is the "less than" case in TryFastInsert, which I mentioned in my comments.

@github-actions

Copy link
Copy Markdown

Thank you for your contribution. Unfortunately, this pull request has been marked as stale because it has had no activity in the past 365 days. Please remove the stale label or comment below, or this PR will be closed in 14 days. Feel free to re-open this if it has been closed in error. If you do not have repository permissions to reopen the PR, please tag a maintainer.

@github-actionsgithub-actionsBot added the Status: stale-warning Issues and PRs flagged as stale which are due to be closed if no indication otherwise label Jul 21, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting committer reviewAwaiting committer reviewComponent: C++Status: stale-warningIssues and PRs flagged as stale which are due to be closed if no indication otherwise

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@andishgar@pitrou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

GH-46128:[C++] Add CompactArray method to BinaryViewArray types - #46229

Closed
andishgar wants to merge 4 commits into
apache:mainfrom
andishgar:add-compact-method-to-binary-view-types
Closed

GH-46128:[C++] Add CompactArray method to BinaryViewArray types#46229
andishgar wants to merge 4 commits into
apache:mainfrom
andishgar:add-compact-method-to-binary-view-types

Conversation

@andishgar

@andishgarandishgar commented Apr 25, 2025

Copy link
Copy Markdown
Contributor

Rationale for this change

As we discussed here, the following method copies only data that is used in data buffers to a new buffer

What changes are included in this PR?

Add a new method the name of which is CompactArray

Are these changes tested?

I run the relevant unit tests

Are there any user-facing changes?

Yes, I add ComapctArray method to BinaryViewArray class

@andishgar
andishgar marked this pull request as draft April 25, 2025 16:28
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #46128has been automatically assigned in GitHub to PR creator.

@andishgar
andishgar marked this pull request as ready for review April 26, 2025 13:56
@andishgar

Copy link
Copy Markdown
ContributorAuthor

@pitrou When I suggested adding these methods, I wasn't aware thatarrow::BinaryViewBuilder::AppendArraySlice already serves the same purpose. What do you recommend I do? Should I drop this PR?

@andishgar

Copy link
Copy Markdown
ContributorAuthor

Another note:
I found that the following code results in an error when using arrow::BinaryViewBuilder::AppendArraySlice. Is there any priority or plan to address this?

#include<iostream>
#include<arrow/api.h>
arrow::Status Run() {
int32_t length = std::numeric_limits<int32_t>::max();
std::string input( length,'a');
arrow::StringViewBuilder builder;
ARROW_RETURN_NOT_OK(builder.Append(input));
ARROW_RETURN_NOT_OK(builder.Append(input));
ARROW_ASSIGN_OR_RAISE(auto result, builder.Finish());
arrow::ArraySpan span(*result->data());
// The following line ends to Capacity errorARROW_RETURN_NOT_OK(builder.AppendArraySlice(span,0,2));
returnarrow::Status::OK();
}
intmain() {
auto status = Run();
if (!status.ok()) {
std::cerr << status.ToString() << std::endl;
}
return0;
}
Error

Capacity error: BinaryView or StringView elements cannot reference strings larger than 2GB

@pitrou

Copy link
Copy Markdown
Member

When I suggested adding these methods, I wasn't aware thatarrow::BinaryViewBuilder::AppendArraySlice already serves the same purpose. What do you recommend I do?

I still think it's a useful utility method to have. cc @bkietz for additional opinions.

I found that the following code results in an error when using arrow::BinaryViewBuilder::AppendArraySlice. Is there any priority or plan to address this?

I don't think this bug is already reported, so there is no "priority or plan". Can you open a separate issue for it, and perhaps submit a PR if you're motivated?

@andishgar

Copy link
Copy Markdown
ContributorAuthor

I don't think this bug is already reported, so there is no "priority or plan". Can you open a separate issue for it, and perhaps submit a PR if you're motivated?

Thank you for your response. Yes, of course

@pitroupitrou left a comment

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.

Thanks for posting this PR and sorry for the delay @andishgar . I added some comments below.

Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
@github-actionsgithub-actionsBot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels Jul 1, 2025
@andishgar

Copy link
Copy Markdown
ContributorAuthor

@pitrou Thanks for the review. I’ll look into it and follow up soon.

@andishgar

andishgar commented Jul 5, 2025

Copy link
Copy Markdown
ContributorAuthor

@pitrou
Note: This is unrelated to the PR.
I plan to contribute to Arrow until August 2, and then I will resume contributions from August 30.
If you think there are any issues or pull requests related to me that have higher priority and should be addressed before August 2, please let me know so I can take care of them in time.

Another Note
If you plan to review any of my other PRs, I’d really appreciate it if you could let me know beforehand. I’d like to take a final look and possibly make some improvements first.
(I’ve had a few valuable code review sessions with Kou and learned quite a bit through them. Since most of my code was written before those PRs , I’d prefer to apply those learnings before others take the time to review my work.)

@andishgarandishgar changed the title GH-46128:[C++][Compute] Add CompactArray method to BinaryViewArray typesGH-46128:[C++] Add CompactArray method to BinaryViewArray typesJul 5, 2025
@andishgar
andishgar marked this pull request as draft July 7, 2025 12:26
@andishgar
andishgarforce-pushed the add-compact-method-to-binary-view-types branch from 81d18fc to 419db99CompareJuly 15, 2025 11:14
@andishgar
andishgar marked this pull request as ready for review July 15, 2025 12:39
@andishgar
andishgar requested a review from pitrouJuly 15, 2025 12:39
@andishgar

Copy link
Copy Markdown
ContributorAuthor

@pitrou I’ve applied your suggestion. The changes are ready for review.

Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
@andishgar

Copy link
Copy Markdown
ContributorAuthor

Thank you for your feedback. I will look into this.

@andishgar
andishgar marked this pull request as draft July 20, 2025 11:28
@andishgar
andishgarforce-pushed the add-compact-method-to-binary-view-types branch 4 times, most recently from e3ed39e to 53334d5CompareJuly 20, 2025 11:39
relocate GetOrCopyNullBitmapBuffer
reclocate IntervalMerger to util/interval.h
Write tests to cover all branches and lines of Interval Merger
@andishgar
andishgarforce-pushed the add-compact-method-to-binary-view-types branch from 53334d5 to 15698fcCompareJuly 20, 2025 11:46
@andishgar
andishgar marked this pull request as ready for review July 20, 2025 14:24
@andishgar
andishgar requested a review from pitrouJuly 20, 2025 14:24
@andishgar

andishgar commented Jul 20, 2025

Copy link
Copy Markdown
ContributorAuthor

@pitrou I applied your suggestions.
Two notes:

1-Regarding this comment, my current algorithm for adding intervals even updates interval.start, so I believe the suggestion to use a std::map doesn't apply in this case. However, if you're still in favor of using std::map, please let me know, and I’ll adjust the logic accordingly.

2- I use a lot of if statements in TryFastInsert for MergeOrInsertInterval, and the tests I wrote cover all the branches. However, if you believe the number of if statements should be reduced, it is possible, since most of them are independent of each other. That said, it's also possible to increase the number of if statements—for example, in every place I use std::max, it could be broken down into several ifs. Another example is the "less than" case in TryFastInsert, which I mentioned in my comments.

@github-actions

Copy link
Copy Markdown

Thank you for your contribution. Unfortunately, this pull request has been marked as stale because it has had no activity in the past 365 days. Please remove the stale label or comment below, or this PR will be closed in 14 days. Feel free to re-open this if it has been closed in error. If you do not have repository permissions to reopen the PR, please tag a maintainer.

@github-actionsgithub-actionsBot added the Status: stale-warning Issues and PRs flagged as stale which are due to be closed if no indication otherwise label Jul 21, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting committer reviewAwaiting committer reviewComponent: C++Status: stale-warningIssues and PRs flagged as stale which are due to be closed if no indication otherwise

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@andishgar@pitrou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

GH-46128:[C++] Add CompactArray method to BinaryViewArray types - #46229

Closed
andishgar wants to merge 4 commits into
apache:mainfrom
andishgar:add-compact-method-to-binary-view-types
Closed

GH-46128:[C++] Add CompactArray method to BinaryViewArray types#46229
andishgar wants to merge 4 commits into
apache:mainfrom
andishgar:add-compact-method-to-binary-view-types

Conversation

@andishgar

@andishgarandishgar commented Apr 25, 2025

Copy link
Copy Markdown
Contributor

Rationale for this change

As we discussed here, the following method copies only data that is used in data buffers to a new buffer

What changes are included in this PR?

Add a new method the name of which is CompactArray

Are these changes tested?

I run the relevant unit tests

Are there any user-facing changes?

Yes, I add ComapctArray method to BinaryViewArray class

@andishgar
andishgar marked this pull request as draft April 25, 2025 16:28
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #46128has been automatically assigned in GitHub to PR creator.

@andishgar
andishgar marked this pull request as ready for review April 26, 2025 13:56
@andishgar

Copy link
Copy Markdown
ContributorAuthor

@pitrou When I suggested adding these methods, I wasn't aware thatarrow::BinaryViewBuilder::AppendArraySlice already serves the same purpose. What do you recommend I do? Should I drop this PR?

@andishgar

Copy link
Copy Markdown
ContributorAuthor

Another note:
I found that the following code results in an error when using arrow::BinaryViewBuilder::AppendArraySlice. Is there any priority or plan to address this?

#include<iostream>
#include<arrow/api.h>
arrow::Status Run() {
int32_t length = std::numeric_limits<int32_t>::max();
std::string input( length,'a');
arrow::StringViewBuilder builder;
ARROW_RETURN_NOT_OK(builder.Append(input));
ARROW_RETURN_NOT_OK(builder.Append(input));
ARROW_ASSIGN_OR_RAISE(auto result, builder.Finish());
arrow::ArraySpan span(*result->data());
// The following line ends to Capacity errorARROW_RETURN_NOT_OK(builder.AppendArraySlice(span,0,2));
returnarrow::Status::OK();
}
intmain() {
auto status = Run();
if (!status.ok()) {
std::cerr << status.ToString() << std::endl;
}
return0;
}
Error

Capacity error: BinaryView or StringView elements cannot reference strings larger than 2GB

@pitrou

Copy link
Copy Markdown
Member

When I suggested adding these methods, I wasn't aware thatarrow::BinaryViewBuilder::AppendArraySlice already serves the same purpose. What do you recommend I do?

I still think it's a useful utility method to have. cc @bkietz for additional opinions.

I found that the following code results in an error when using arrow::BinaryViewBuilder::AppendArraySlice. Is there any priority or plan to address this?

I don't think this bug is already reported, so there is no "priority or plan". Can you open a separate issue for it, and perhaps submit a PR if you're motivated?

@andishgar

Copy link
Copy Markdown
ContributorAuthor

I don't think this bug is already reported, so there is no "priority or plan". Can you open a separate issue for it, and perhaps submit a PR if you're motivated?

Thank you for your response. Yes, of course

@pitroupitrou left a comment

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.

Thanks for posting this PR and sorry for the delay @andishgar . I added some comments below.

Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
@github-actionsgithub-actionsBot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels Jul 1, 2025
@andishgar

Copy link
Copy Markdown
ContributorAuthor

@pitrou Thanks for the review. I’ll look into it and follow up soon.

@andishgar

andishgar commented Jul 5, 2025

Copy link
Copy Markdown
ContributorAuthor

@pitrou
Note: This is unrelated to the PR.
I plan to contribute to Arrow until August 2, and then I will resume contributions from August 30.
If you think there are any issues or pull requests related to me that have higher priority and should be addressed before August 2, please let me know so I can take care of them in time.

Another Note
If you plan to review any of my other PRs, I’d really appreciate it if you could let me know beforehand. I’d like to take a final look and possibly make some improvements first.
(I’ve had a few valuable code review sessions with Kou and learned quite a bit through them. Since most of my code was written before those PRs , I’d prefer to apply those learnings before others take the time to review my work.)

@andishgarandishgar changed the title GH-46128:[C++][Compute] Add CompactArray method to BinaryViewArray typesGH-46128:[C++] Add CompactArray method to BinaryViewArray typesJul 5, 2025
@andishgar
andishgar marked this pull request as draft July 7, 2025 12:26
@andishgar
andishgarforce-pushed the add-compact-method-to-binary-view-types branch from 81d18fc to 419db99CompareJuly 15, 2025 11:14
@andishgar
andishgar marked this pull request as ready for review July 15, 2025 12:39
@andishgar
andishgar requested a review from pitrouJuly 15, 2025 12:39
@andishgar

Copy link
Copy Markdown
ContributorAuthor

@pitrou I’ve applied your suggestion. The changes are ready for review.

Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
@andishgar

Copy link
Copy Markdown
ContributorAuthor

Thank you for your feedback. I will look into this.

@andishgar
andishgar marked this pull request as draft July 20, 2025 11:28
@andishgar
andishgarforce-pushed the add-compact-method-to-binary-view-types branch 4 times, most recently from e3ed39e to 53334d5CompareJuly 20, 2025 11:39
relocate GetOrCopyNullBitmapBuffer
reclocate IntervalMerger to util/interval.h
Write tests to cover all branches and lines of Interval Merger
@andishgar
andishgarforce-pushed the add-compact-method-to-binary-view-types branch from 53334d5 to 15698fcCompareJuly 20, 2025 11:46
@andishgar
andishgar marked this pull request as ready for review July 20, 2025 14:24
@andishgar
andishgar requested a review from pitrouJuly 20, 2025 14:24
@andishgar

andishgar commented Jul 20, 2025

Copy link
Copy Markdown
ContributorAuthor

@pitrou I applied your suggestions.
Two notes:

1-Regarding this comment, my current algorithm for adding intervals even updates interval.start, so I believe the suggestion to use a std::map doesn't apply in this case. However, if you're still in favor of using std::map, please let me know, and I’ll adjust the logic accordingly.

2- I use a lot of if statements in TryFastInsert for MergeOrInsertInterval, and the tests I wrote cover all the branches. However, if you believe the number of if statements should be reduced, it is possible, since most of them are independent of each other. That said, it's also possible to increase the number of if statements—for example, in every place I use std::max, it could be broken down into several ifs. Another example is the "less than" case in TryFastInsert, which I mentioned in my comments.

@github-actions

Copy link
Copy Markdown

Thank you for your contribution. Unfortunately, this pull request has been marked as stale because it has had no activity in the past 365 days. Please remove the stale label or comment below, or this PR will be closed in 14 days. Feel free to re-open this if it has been closed in error. If you do not have repository permissions to reopen the PR, please tag a maintainer.

@github-actionsgithub-actionsBot added the Status: stale-warning Issues and PRs flagged as stale which are due to be closed if no indication otherwise label Jul 21, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting committer reviewAwaiting committer reviewComponent: C++Status: stale-warningIssues and PRs flagged as stale which are due to be closed if no indication otherwise

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@andishgar@pitrou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

GH-46128:[C++] Add CompactArray method to BinaryViewArray types - #46229

Closed
andishgar wants to merge 4 commits into
apache:mainfrom
andishgar:add-compact-method-to-binary-view-types
Closed

GH-46128:[C++] Add CompactArray method to BinaryViewArray types#46229
andishgar wants to merge 4 commits into
apache:mainfrom
andishgar:add-compact-method-to-binary-view-types

Conversation

@andishgar

@andishgarandishgar commented Apr 25, 2025

Copy link
Copy Markdown
Contributor

Rationale for this change

As we discussed here, the following method copies only data that is used in data buffers to a new buffer

What changes are included in this PR?

Add a new method the name of which is CompactArray

Are these changes tested?

I run the relevant unit tests

Are there any user-facing changes?

Yes, I add ComapctArray method to BinaryViewArray class

@andishgar
andishgar marked this pull request as draft April 25, 2025 16:28
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #46128has been automatically assigned in GitHub to PR creator.

@andishgar
andishgar marked this pull request as ready for review April 26, 2025 13:56
@andishgar

Copy link
Copy Markdown
ContributorAuthor

@pitrou When I suggested adding these methods, I wasn't aware thatarrow::BinaryViewBuilder::AppendArraySlice already serves the same purpose. What do you recommend I do? Should I drop this PR?

@andishgar

Copy link
Copy Markdown
ContributorAuthor

Another note:
I found that the following code results in an error when using arrow::BinaryViewBuilder::AppendArraySlice. Is there any priority or plan to address this?

#include<iostream>
#include<arrow/api.h>
arrow::Status Run() {
int32_t length = std::numeric_limits<int32_t>::max();
std::string input( length,'a');
arrow::StringViewBuilder builder;
ARROW_RETURN_NOT_OK(builder.Append(input));
ARROW_RETURN_NOT_OK(builder.Append(input));
ARROW_ASSIGN_OR_RAISE(auto result, builder.Finish());
arrow::ArraySpan span(*result->data());
// The following line ends to Capacity errorARROW_RETURN_NOT_OK(builder.AppendArraySlice(span,0,2));
returnarrow::Status::OK();
}
intmain() {
auto status = Run();
if (!status.ok()) {
std::cerr << status.ToString() << std::endl;
}
return0;
}
Error

Capacity error: BinaryView or StringView elements cannot reference strings larger than 2GB

@pitrou

Copy link
Copy Markdown
Member

When I suggested adding these methods, I wasn't aware thatarrow::BinaryViewBuilder::AppendArraySlice already serves the same purpose. What do you recommend I do?

I still think it's a useful utility method to have. cc @bkietz for additional opinions.

I found that the following code results in an error when using arrow::BinaryViewBuilder::AppendArraySlice. Is there any priority or plan to address this?

I don't think this bug is already reported, so there is no "priority or plan". Can you open a separate issue for it, and perhaps submit a PR if you're motivated?

@andishgar

Copy link
Copy Markdown
ContributorAuthor

I don't think this bug is already reported, so there is no "priority or plan". Can you open a separate issue for it, and perhaps submit a PR if you're motivated?

Thank you for your response. Yes, of course

@pitroupitrou left a comment

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.

Thanks for posting this PR and sorry for the delay @andishgar . I added some comments below.

Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
@github-actionsgithub-actionsBot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels Jul 1, 2025
@andishgar

Copy link
Copy Markdown
ContributorAuthor

@pitrou Thanks for the review. I’ll look into it and follow up soon.

@andishgar

andishgar commented Jul 5, 2025

Copy link
Copy Markdown
ContributorAuthor

@pitrou
Note: This is unrelated to the PR.
I plan to contribute to Arrow until August 2, and then I will resume contributions from August 30.
If you think there are any issues or pull requests related to me that have higher priority and should be addressed before August 2, please let me know so I can take care of them in time.

Another Note
If you plan to review any of my other PRs, I’d really appreciate it if you could let me know beforehand. I’d like to take a final look and possibly make some improvements first.
(I’ve had a few valuable code review sessions with Kou and learned quite a bit through them. Since most of my code was written before those PRs , I’d prefer to apply those learnings before others take the time to review my work.)

@andishgarandishgar changed the title GH-46128:[C++][Compute] Add CompactArray method to BinaryViewArray typesGH-46128:[C++] Add CompactArray method to BinaryViewArray typesJul 5, 2025
@andishgar
andishgar marked this pull request as draft July 7, 2025 12:26
@andishgar
andishgarforce-pushed the add-compact-method-to-binary-view-types branch from 81d18fc to 419db99CompareJuly 15, 2025 11:14
@andishgar
andishgar marked this pull request as ready for review July 15, 2025 12:39
@andishgar
andishgar requested a review from pitrouJuly 15, 2025 12:39
@andishgar

Copy link
Copy Markdown
ContributorAuthor

@pitrou I’ve applied your suggestion. The changes are ready for review.

Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
@andishgar

Copy link
Copy Markdown
ContributorAuthor

Thank you for your feedback. I will look into this.

@andishgar
andishgar marked this pull request as draft July 20, 2025 11:28
@andishgar
andishgarforce-pushed the add-compact-method-to-binary-view-types branch 4 times, most recently from e3ed39e to 53334d5CompareJuly 20, 2025 11:39
relocate GetOrCopyNullBitmapBuffer
reclocate IntervalMerger to util/interval.h
Write tests to cover all branches and lines of Interval Merger
@andishgar
andishgarforce-pushed the add-compact-method-to-binary-view-types branch from 53334d5 to 15698fcCompareJuly 20, 2025 11:46
@andishgar
andishgar marked this pull request as ready for review July 20, 2025 14:24
@andishgar
andishgar requested a review from pitrouJuly 20, 2025 14:24
@andishgar

andishgar commented Jul 20, 2025

Copy link
Copy Markdown
ContributorAuthor

@pitrou I applied your suggestions.
Two notes:

1-Regarding this comment, my current algorithm for adding intervals even updates interval.start, so I believe the suggestion to use a std::map doesn't apply in this case. However, if you're still in favor of using std::map, please let me know, and I’ll adjust the logic accordingly.

2- I use a lot of if statements in TryFastInsert for MergeOrInsertInterval, and the tests I wrote cover all the branches. However, if you believe the number of if statements should be reduced, it is possible, since most of them are independent of each other. That said, it's also possible to increase the number of if statements—for example, in every place I use std::max, it could be broken down into several ifs. Another example is the "less than" case in TryFastInsert, which I mentioned in my comments.

@github-actions

Copy link
Copy Markdown

Thank you for your contribution. Unfortunately, this pull request has been marked as stale because it has had no activity in the past 365 days. Please remove the stale label or comment below, or this PR will be closed in 14 days. Feel free to re-open this if it has been closed in error. If you do not have repository permissions to reopen the PR, please tag a maintainer.

@github-actionsgithub-actionsBot added the Status: stale-warning Issues and PRs flagged as stale which are due to be closed if no indication otherwise label Jul 21, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting committer reviewAwaiting committer reviewComponent: C++Status: stale-warningIssues and PRs flagged as stale which are due to be closed if no indication otherwise

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@andishgar@pitrou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

GH-46128:[C++] Add CompactArray method to BinaryViewArray types - #46229

Closed
andishgar wants to merge 4 commits into
apache:mainfrom
andishgar:add-compact-method-to-binary-view-types
Closed

GH-46128:[C++] Add CompactArray method to BinaryViewArray types#46229
andishgar wants to merge 4 commits into
apache:mainfrom
andishgar:add-compact-method-to-binary-view-types

Conversation

@andishgar

@andishgarandishgar commented Apr 25, 2025

Copy link
Copy Markdown
Contributor

Rationale for this change

As we discussed here, the following method copies only data that is used in data buffers to a new buffer

What changes are included in this PR?

Add a new method the name of which is CompactArray

Are these changes tested?

I run the relevant unit tests

Are there any user-facing changes?

Yes, I add ComapctArray method to BinaryViewArray class

@andishgar
andishgar marked this pull request as draft April 25, 2025 16:28
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #46128has been automatically assigned in GitHub to PR creator.

@andishgar
andishgar marked this pull request as ready for review April 26, 2025 13:56
@andishgar

Copy link
Copy Markdown
ContributorAuthor

@pitrou When I suggested adding these methods, I wasn't aware thatarrow::BinaryViewBuilder::AppendArraySlice already serves the same purpose. What do you recommend I do? Should I drop this PR?

@andishgar

Copy link
Copy Markdown
ContributorAuthor

Another note:
I found that the following code results in an error when using arrow::BinaryViewBuilder::AppendArraySlice. Is there any priority or plan to address this?

#include<iostream>
#include<arrow/api.h>
arrow::Status Run() {
int32_t length = std::numeric_limits<int32_t>::max();
std::string input( length,'a');
arrow::StringViewBuilder builder;
ARROW_RETURN_NOT_OK(builder.Append(input));
ARROW_RETURN_NOT_OK(builder.Append(input));
ARROW_ASSIGN_OR_RAISE(auto result, builder.Finish());
arrow::ArraySpan span(*result->data());
// The following line ends to Capacity errorARROW_RETURN_NOT_OK(builder.AppendArraySlice(span,0,2));
returnarrow::Status::OK();
}
intmain() {
auto status = Run();
if (!status.ok()) {
std::cerr << status.ToString() << std::endl;
}
return0;
}
Error

Capacity error: BinaryView or StringView elements cannot reference strings larger than 2GB

@pitrou

Copy link
Copy Markdown
Member

When I suggested adding these methods, I wasn't aware thatarrow::BinaryViewBuilder::AppendArraySlice already serves the same purpose. What do you recommend I do?

I still think it's a useful utility method to have. cc @bkietz for additional opinions.

I found that the following code results in an error when using arrow::BinaryViewBuilder::AppendArraySlice. Is there any priority or plan to address this?

I don't think this bug is already reported, so there is no "priority or plan". Can you open a separate issue for it, and perhaps submit a PR if you're motivated?

@andishgar

Copy link
Copy Markdown
ContributorAuthor

I don't think this bug is already reported, so there is no "priority or plan". Can you open a separate issue for it, and perhaps submit a PR if you're motivated?

Thank you for your response. Yes, of course

@pitroupitrou left a comment

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.

Thanks for posting this PR and sorry for the delay @andishgar . I added some comments below.

Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
Comment threadcpp/src/arrow/array/array_binary_test.cc Outdated
@github-actionsgithub-actionsBot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels Jul 1, 2025
@andishgar

Copy link
Copy Markdown
ContributorAuthor

@pitrou Thanks for the review. I’ll look into it and follow up soon.

@andishgar

andishgar commented Jul 5, 2025

Copy link
Copy Markdown
ContributorAuthor

@pitrou
Note: This is unrelated to the PR.
I plan to contribute to Arrow until August 2, and then I will resume contributions from August 30.
If you think there are any issues or pull requests related to me that have higher priority and should be addressed before August 2, please let me know so I can take care of them in time.

Another Note
If you plan to review any of my other PRs, I’d really appreciate it if you could let me know beforehand. I’d like to take a final look and possibly make some improvements first.
(I’ve had a few valuable code review sessions with Kou and learned quite a bit through them. Since most of my code was written before those PRs , I’d prefer to apply those learnings before others take the time to review my work.)

@andishgarandishgar changed the title GH-46128:[C++][Compute] Add CompactArray method to BinaryViewArray typesGH-46128:[C++] Add CompactArray method to BinaryViewArray typesJul 5, 2025
@andishgar
andishgar marked this pull request as draft July 7, 2025 12:26
@andishgar
andishgarforce-pushed the add-compact-method-to-binary-view-types branch from 81d18fc to 419db99CompareJuly 15, 2025 11:14
@andishgar
andishgar marked this pull request as ready for review July 15, 2025 12:39
@andishgar
andishgar requested a review from pitrouJuly 15, 2025 12:39
@andishgar

Copy link
Copy Markdown
ContributorAuthor

@pitrou I’ve applied your suggestion. The changes are ready for review.

Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
Comment threadcpp/src/arrow/array/array_binary.cc Outdated
@andishgar

Copy link
Copy Markdown
ContributorAuthor

Thank you for your feedback. I will look into this.

@andishgar
andishgar marked this pull request as draft July 20, 2025 11:28
@andishgar
andishgarforce-pushed the add-compact-method-to-binary-view-types branch 4 times, most recently from e3ed39e to 53334d5CompareJuly 20, 2025 11:39
relocate GetOrCopyNullBitmapBuffer
reclocate IntervalMerger to util/interval.h
Write tests to cover all branches and lines of Interval Merger
@andishgar
andishgarforce-pushed the add-compact-method-to-binary-view-types branch from 53334d5 to 15698fcCompareJuly 20, 2025 11:46
@andishgar
andishgar marked this pull request as ready for review July 20, 2025 14:24
@andishgar
andishgar requested a review from pitrouJuly 20, 2025 14:24
@andishgar

andishgar commented Jul 20, 2025

Copy link
Copy Markdown
ContributorAuthor

@pitrou I applied your suggestions.
Two notes:

1-Regarding this comment, my current algorithm for adding intervals even updates interval.start, so I believe the suggestion to use a std::map doesn't apply in this case. However, if you're still in favor of using std::map, please let me know, and I’ll adjust the logic accordingly.

2- I use a lot of if statements in TryFastInsert for MergeOrInsertInterval, and the tests I wrote cover all the branches. However, if you believe the number of if statements should be reduced, it is possible, since most of them are independent of each other. That said, it's also possible to increase the number of if statements—for example, in every place I use std::max, it could be broken down into several ifs. Another example is the "less than" case in TryFastInsert, which I mentioned in my comments.

@github-actions

Copy link
Copy Markdown

Thank you for your contribution. Unfortunately, this pull request has been marked as stale because it has had no activity in the past 365 days. Please remove the stale label or comment below, or this PR will be closed in 14 days. Feel free to re-open this if it has been closed in error. If you do not have repository permissions to reopen the PR, please tag a maintainer.

@github-actionsgithub-actionsBot added the Status: stale-warning Issues and PRs flagged as stale which are due to be closed if no indication otherwise label Jul 21, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting committer reviewAwaiting committer reviewComponent: C++Status: stale-warningIssues and PRs flagged as stale which are due to be closed if no indication otherwise

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@andishgar@pitrou