ARROW-6110: [Java][Integration] Support LargeList Type and add integration test with C++ - #7275

Closed
rymurr wants to merge 1 commit into
apache:masterfrom
rymurr:ARROW-6110
Closed

ARROW-6110: [Java][Integration] Support LargeList Type and add integration test with C++#7275
rymurr wants to merge 1 commit into
apache:masterfrom
rymurr:ARROW-6110

Conversation

@rymurr

Copy link
Copy Markdown
Contributor

Add large list and ensure it works with Integration tests. As noted in the JIRA
ticket this is rather limited as the underlying vector doesn't support int64 addressing

The important downcasts to int32 have been noted for a follow up once vectors with
long addresses are supported

@github-actions

Copy link
Copy Markdown

@emkornfield

Copy link
Copy Markdown
Contributor

@BryanCutler would you have time to review?

@emkornfield

Copy link
Copy Markdown
Contributor

@rymurr looks like this needs a rebase

@rymurr

Copy link
Copy Markdown
ContributorAuthor

@rymurr looks like this needs a rebase

Thanks for the reminder @emkornfield, done.

@BryanCutler

Copy link
Copy Markdown
Member

I'm a little swamped right now, but I'll try to review sometime this week

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here we need to cast the argument of getLong to long, to avoid integer overflow.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here we need to cast the first argument, too.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I think we can replace the old implementation

void setBit(ArrowBuf validityBuffer, int index)

with this one, as now ArrowBuf is based on 64-bit index.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here we need to cast getLong argument to long.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

We need to cast (numRecords + 1) to long. Otherwise, integer overflow may happen before promoting the result to long.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

@rymurr
rymurrforce-pushed the ARROW-6110 branch 3 times, most recently from 4383a6d to 8ca2cb2CompareJune 22, 2020 15:11
@nealrichardson

Copy link
Copy Markdown
Member

Is this good to merge now? @BryanCutler are you still planning to review this? Would like to get this in 1.0.

@BryanCutler

Copy link
Copy Markdown
Member

Is this good to merge now? @BryanCutler are you still planning to review this? Would like to get this in 1.0.

I'm taking a look now, I'd like to get it in for 1.0 too.

@BryanCutlerBryanCutler 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 working on this @rymurr ! Apologies for taking so long to review.. It looks pretty good, but I saw what looked like inconsistencies in the LargeListVector APIs using ints vs longs to me, and otherwise only minor things to fix up.

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.

It would be nice not to add a new template and combine with the UnionListWriter if possible. That doesn't have to be done here though, it can be looked at later.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

agreed, I fixed this...was just being lazy ;-)

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.

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.

Since this is the relative bit index, it's not possible to return long. Can you change return value to an int?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

From the comment above, I think this should still be an int

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

shouldn't this be long?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

yup! Done

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.

return int

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

Could you add a TODO to revisit once 64 bit vectors are supported?

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.

Also indicate this in the javadoc here and probably for the class. It might even be a good idea to raise an error if the user tries to add too many elements, otherwise things might just start looking wrong.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

This should return long and not be casted to int

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

same here

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

could you add a check for Types.MinorType.LARGELIST here are remove the changes below?

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.

you also won't need typeBitWidth as an arg

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

thanks, done

@rymurr

Copy link
Copy Markdown
ContributorAuthor

Thanks for working on this @rymurr ! Apologies for taking so long to review.. It looks pretty good, but I saw what looked like inconsistencies in the LargeListVector APIs using ints vs longs to me, and otherwise only minor things to fix up.

Thanks a lot for the thorough review. I have fixed up everything you mentioned. It appears some of the confusion was related to changes for 64-bit allocations that were recently merged and the rest was my ignorance!

I have pushed a change with all your recommended fixes.

@BryanCutlerBryanCutler 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 the quick update @rymurr , it looks pretty good! Only a couple minor things. I see quite a few instances of offsetBuffer.getLong/setLong(i * OFFSET_WIDTH) that I believe need to be cast to long to avoid overflow. Could you take a quick pass and fix those up? I think we will be good to go after that.

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.

does this arg need to be cast to long?

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.

also here

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.

cast to long?

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.

was there a reason for this change?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

IDE autoformatting...reverted!

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.

why is this needed? the vector only supports integer max_value number of elements right?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

you are correct. Removed

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.

doesn't value need to be passed in here?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

value is always of type Void. None of the other visitors pass value to children.

@rymurr

Copy link
Copy Markdown
ContributorAuthor

Thanks for the quick update @rymurr , it looks pretty good! Only a couple minor things. I see quite a few instances of offsetBuffer.getLong/setLong(i * OFFSET_WIDTH) that I believe need to be cast to long to avoid overflow. Could you take a quick pass and fix those up? I think we will be good to go after that.

Thanks for another thorough review @BryanCutler ! I think that I addressed everything. I may have went over the top w/ the casting but it doesn't hurt :-)

Add large list and ensure it works with Integration tests. As noted in the JIRA
ticket this is rather limited as the underlying vector doesn't support int64 addressing
The important downcasts to int32 have been noted for a follow up once vectors with
long addresses are supported

@BryanCutlerBryanCutler 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.

LGTM

@BryanCutler

Copy link
Copy Markdown
Member

merged to master, thanks @rymurr !

@rymurr
rymurr deleted the ARROW-6110 branch July 6, 2020 08:32
pribor pushed a commit to GlobalWebIndex/arrow that referenced this pull request Oct 24, 2025
…ation test with C++
Add large list and ensure it works with Integration tests. As noted in the JIRA
ticket this is rather limited as the underlying vector doesn't support int64 addressing
The important downcasts to int32 have been noted for a follow up once vectors with
long addresses are supported
Closesapache#7275 from rymurr/ARROW-6110
Authored-by: Ryan Murray <rymurr@dremio.com>
Signed-off-by: Bryan Cutler <cutlerb@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@rymurr@emkornfield@BryanCutler@nealrichardson@liyafan82@fsaintjacques
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 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

ARROW-6110: [Java][Integration] Support LargeList Type and add integration test with C++ - #7275

Closed
rymurr wants to merge 1 commit into
apache:masterfrom
rymurr:ARROW-6110
Closed

ARROW-6110: [Java][Integration] Support LargeList Type and add integration test with C++#7275
rymurr wants to merge 1 commit into
apache:masterfrom
rymurr:ARROW-6110

Conversation

@rymurr

Copy link
Copy Markdown
Contributor

Add large list and ensure it works with Integration tests. As noted in the JIRA
ticket this is rather limited as the underlying vector doesn't support int64 addressing

The important downcasts to int32 have been noted for a follow up once vectors with
long addresses are supported

@github-actions

Copy link
Copy Markdown

@emkornfield

Copy link
Copy Markdown
Contributor

@BryanCutler would you have time to review?

@emkornfield

Copy link
Copy Markdown
Contributor

@rymurr looks like this needs a rebase

@rymurr

Copy link
Copy Markdown
ContributorAuthor

@rymurr looks like this needs a rebase

Thanks for the reminder @emkornfield, done.

@BryanCutler

Copy link
Copy Markdown
Member

I'm a little swamped right now, but I'll try to review sometime this week

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here we need to cast the argument of getLong to long, to avoid integer overflow.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here we need to cast the first argument, too.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I think we can replace the old implementation

void setBit(ArrowBuf validityBuffer, int index)

with this one, as now ArrowBuf is based on 64-bit index.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here we need to cast getLong argument to long.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

We need to cast (numRecords + 1) to long. Otherwise, integer overflow may happen before promoting the result to long.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

@rymurr
rymurrforce-pushed the ARROW-6110 branch 3 times, most recently from 4383a6d to 8ca2cb2CompareJune 22, 2020 15:11
@nealrichardson

Copy link
Copy Markdown
Member

Is this good to merge now? @BryanCutler are you still planning to review this? Would like to get this in 1.0.

@BryanCutler

Copy link
Copy Markdown
Member

Is this good to merge now? @BryanCutler are you still planning to review this? Would like to get this in 1.0.

I'm taking a look now, I'd like to get it in for 1.0 too.

@BryanCutlerBryanCutler 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 working on this @rymurr ! Apologies for taking so long to review.. It looks pretty good, but I saw what looked like inconsistencies in the LargeListVector APIs using ints vs longs to me, and otherwise only minor things to fix up.

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.

It would be nice not to add a new template and combine with the UnionListWriter if possible. That doesn't have to be done here though, it can be looked at later.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

agreed, I fixed this...was just being lazy ;-)

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.

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.

Since this is the relative bit index, it's not possible to return long. Can you change return value to an int?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

From the comment above, I think this should still be an int

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

shouldn't this be long?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

yup! Done

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.

return int

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

Could you add a TODO to revisit once 64 bit vectors are supported?

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.

Also indicate this in the javadoc here and probably for the class. It might even be a good idea to raise an error if the user tries to add too many elements, otherwise things might just start looking wrong.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

This should return long and not be casted to int

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

same here

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

could you add a check for Types.MinorType.LARGELIST here are remove the changes below?

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.

you also won't need typeBitWidth as an arg

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

thanks, done

@rymurr

Copy link
Copy Markdown
ContributorAuthor

Thanks for working on this @rymurr ! Apologies for taking so long to review.. It looks pretty good, but I saw what looked like inconsistencies in the LargeListVector APIs using ints vs longs to me, and otherwise only minor things to fix up.

Thanks a lot for the thorough review. I have fixed up everything you mentioned. It appears some of the confusion was related to changes for 64-bit allocations that were recently merged and the rest was my ignorance!

I have pushed a change with all your recommended fixes.

@BryanCutlerBryanCutler 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 the quick update @rymurr , it looks pretty good! Only a couple minor things. I see quite a few instances of offsetBuffer.getLong/setLong(i * OFFSET_WIDTH) that I believe need to be cast to long to avoid overflow. Could you take a quick pass and fix those up? I think we will be good to go after that.

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.

does this arg need to be cast to long?

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.

also here

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.

cast to long?

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.

was there a reason for this change?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

IDE autoformatting...reverted!

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.

why is this needed? the vector only supports integer max_value number of elements right?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

you are correct. Removed

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.

doesn't value need to be passed in here?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

value is always of type Void. None of the other visitors pass value to children.

@rymurr

Copy link
Copy Markdown
ContributorAuthor

Thanks for the quick update @rymurr , it looks pretty good! Only a couple minor things. I see quite a few instances of offsetBuffer.getLong/setLong(i * OFFSET_WIDTH) that I believe need to be cast to long to avoid overflow. Could you take a quick pass and fix those up? I think we will be good to go after that.

Thanks for another thorough review @BryanCutler ! I think that I addressed everything. I may have went over the top w/ the casting but it doesn't hurt :-)

Add large list and ensure it works with Integration tests. As noted in the JIRA
ticket this is rather limited as the underlying vector doesn't support int64 addressing
The important downcasts to int32 have been noted for a follow up once vectors with
long addresses are supported

@BryanCutlerBryanCutler 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.

LGTM

@BryanCutler

Copy link
Copy Markdown
Member

merged to master, thanks @rymurr !

@rymurr
rymurr deleted the ARROW-6110 branch July 6, 2020 08:32
pribor pushed a commit to GlobalWebIndex/arrow that referenced this pull request Oct 24, 2025
…ation test with C++
Add large list and ensure it works with Integration tests. As noted in the JIRA
ticket this is rather limited as the underlying vector doesn't support int64 addressing
The important downcasts to int32 have been noted for a follow up once vectors with
long addresses are supported
Closesapache#7275 from rymurr/ARROW-6110
Authored-by: Ryan Murray <rymurr@dremio.com>
Signed-off-by: Bryan Cutler <cutlerb@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@rymurr@emkornfield@BryanCutler@nealrichardson@liyafan82@fsaintjacques
, '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

ARROW-6110: [Java][Integration] Support LargeList Type and add integration test with C++ - #7275

Closed
rymurr wants to merge 1 commit into
apache:masterfrom
rymurr:ARROW-6110
Closed

ARROW-6110: [Java][Integration] Support LargeList Type and add integration test with C++#7275
rymurr wants to merge 1 commit into
apache:masterfrom
rymurr:ARROW-6110

Conversation

@rymurr

Copy link
Copy Markdown
Contributor

Add large list and ensure it works with Integration tests. As noted in the JIRA
ticket this is rather limited as the underlying vector doesn't support int64 addressing

The important downcasts to int32 have been noted for a follow up once vectors with
long addresses are supported

@github-actions

Copy link
Copy Markdown

@emkornfield

Copy link
Copy Markdown
Contributor

@BryanCutler would you have time to review?

@emkornfield

Copy link
Copy Markdown
Contributor

@rymurr looks like this needs a rebase

@rymurr

Copy link
Copy Markdown
ContributorAuthor

@rymurr looks like this needs a rebase

Thanks for the reminder @emkornfield, done.

@BryanCutler

Copy link
Copy Markdown
Member

I'm a little swamped right now, but I'll try to review sometime this week

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here we need to cast the argument of getLong to long, to avoid integer overflow.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here we need to cast the first argument, too.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I think we can replace the old implementation

void setBit(ArrowBuf validityBuffer, int index)

with this one, as now ArrowBuf is based on 64-bit index.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here we need to cast getLong argument to long.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

We need to cast (numRecords + 1) to long. Otherwise, integer overflow may happen before promoting the result to long.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

@rymurr
rymurrforce-pushed the ARROW-6110 branch 3 times, most recently from 4383a6d to 8ca2cb2CompareJune 22, 2020 15:11
@nealrichardson

Copy link
Copy Markdown
Member

Is this good to merge now? @BryanCutler are you still planning to review this? Would like to get this in 1.0.

@BryanCutler

Copy link
Copy Markdown
Member

Is this good to merge now? @BryanCutler are you still planning to review this? Would like to get this in 1.0.

I'm taking a look now, I'd like to get it in for 1.0 too.

@BryanCutlerBryanCutler 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 working on this @rymurr ! Apologies for taking so long to review.. It looks pretty good, but I saw what looked like inconsistencies in the LargeListVector APIs using ints vs longs to me, and otherwise only minor things to fix up.

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.

It would be nice not to add a new template and combine with the UnionListWriter if possible. That doesn't have to be done here though, it can be looked at later.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

agreed, I fixed this...was just being lazy ;-)

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.

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.

Since this is the relative bit index, it's not possible to return long. Can you change return value to an int?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

From the comment above, I think this should still be an int

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

shouldn't this be long?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

yup! Done

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.

return int

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

Could you add a TODO to revisit once 64 bit vectors are supported?

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.

Also indicate this in the javadoc here and probably for the class. It might even be a good idea to raise an error if the user tries to add too many elements, otherwise things might just start looking wrong.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

This should return long and not be casted to int

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

same here

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

could you add a check for Types.MinorType.LARGELIST here are remove the changes below?

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.

you also won't need typeBitWidth as an arg

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

thanks, done

@rymurr

Copy link
Copy Markdown
ContributorAuthor

Thanks for working on this @rymurr ! Apologies for taking so long to review.. It looks pretty good, but I saw what looked like inconsistencies in the LargeListVector APIs using ints vs longs to me, and otherwise only minor things to fix up.

Thanks a lot for the thorough review. I have fixed up everything you mentioned. It appears some of the confusion was related to changes for 64-bit allocations that were recently merged and the rest was my ignorance!

I have pushed a change with all your recommended fixes.

@BryanCutlerBryanCutler 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 the quick update @rymurr , it looks pretty good! Only a couple minor things. I see quite a few instances of offsetBuffer.getLong/setLong(i * OFFSET_WIDTH) that I believe need to be cast to long to avoid overflow. Could you take a quick pass and fix those up? I think we will be good to go after that.

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.

does this arg need to be cast to long?

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.

also here

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.

cast to long?

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.

was there a reason for this change?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

IDE autoformatting...reverted!

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.

why is this needed? the vector only supports integer max_value number of elements right?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

you are correct. Removed

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.

doesn't value need to be passed in here?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

value is always of type Void. None of the other visitors pass value to children.

@rymurr

Copy link
Copy Markdown
ContributorAuthor

Thanks for the quick update @rymurr , it looks pretty good! Only a couple minor things. I see quite a few instances of offsetBuffer.getLong/setLong(i * OFFSET_WIDTH) that I believe need to be cast to long to avoid overflow. Could you take a quick pass and fix those up? I think we will be good to go after that.

Thanks for another thorough review @BryanCutler ! I think that I addressed everything. I may have went over the top w/ the casting but it doesn't hurt :-)

Add large list and ensure it works with Integration tests. As noted in the JIRA
ticket this is rather limited as the underlying vector doesn't support int64 addressing
The important downcasts to int32 have been noted for a follow up once vectors with
long addresses are supported

@BryanCutlerBryanCutler 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.

LGTM

@BryanCutler

Copy link
Copy Markdown
Member

merged to master, thanks @rymurr !

@rymurr
rymurr deleted the ARROW-6110 branch July 6, 2020 08:32
pribor pushed a commit to GlobalWebIndex/arrow that referenced this pull request Oct 24, 2025
…ation test with C++
Add large list and ensure it works with Integration tests. As noted in the JIRA
ticket this is rather limited as the underlying vector doesn't support int64 addressing
The important downcasts to int32 have been noted for a follow up once vectors with
long addresses are supported
Closesapache#7275 from rymurr/ARROW-6110
Authored-by: Ryan Murray <rymurr@dremio.com>
Signed-off-by: Bryan Cutler <cutlerb@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@rymurr@emkornfield@BryanCutler@nealrichardson@liyafan82@fsaintjacques
, '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 > 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

ARROW-6110: [Java][Integration] Support LargeList Type and add integration test with C++ - #7275

Closed
rymurr wants to merge 1 commit into
apache:masterfrom
rymurr:ARROW-6110
Closed

ARROW-6110: [Java][Integration] Support LargeList Type and add integration test with C++#7275
rymurr wants to merge 1 commit into
apache:masterfrom
rymurr:ARROW-6110

Conversation

@rymurr

Copy link
Copy Markdown
Contributor

Add large list and ensure it works with Integration tests. As noted in the JIRA
ticket this is rather limited as the underlying vector doesn't support int64 addressing

The important downcasts to int32 have been noted for a follow up once vectors with
long addresses are supported

@github-actions

Copy link
Copy Markdown

@emkornfield

Copy link
Copy Markdown
Contributor

@BryanCutler would you have time to review?

@emkornfield

Copy link
Copy Markdown
Contributor

@rymurr looks like this needs a rebase

@rymurr

Copy link
Copy Markdown
ContributorAuthor

@rymurr looks like this needs a rebase

Thanks for the reminder @emkornfield, done.

@BryanCutler

Copy link
Copy Markdown
Member

I'm a little swamped right now, but I'll try to review sometime this week

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here we need to cast the argument of getLong to long, to avoid integer overflow.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here we need to cast the first argument, too.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I think we can replace the old implementation

void setBit(ArrowBuf validityBuffer, int index)

with this one, as now ArrowBuf is based on 64-bit index.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here we need to cast getLong argument to long.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

We need to cast (numRecords + 1) to long. Otherwise, integer overflow may happen before promoting the result to long.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

@rymurr
rymurrforce-pushed the ARROW-6110 branch 3 times, most recently from 4383a6d to 8ca2cb2CompareJune 22, 2020 15:11
@nealrichardson

Copy link
Copy Markdown
Member

Is this good to merge now? @BryanCutler are you still planning to review this? Would like to get this in 1.0.

@BryanCutler

Copy link
Copy Markdown
Member

Is this good to merge now? @BryanCutler are you still planning to review this? Would like to get this in 1.0.

I'm taking a look now, I'd like to get it in for 1.0 too.

@BryanCutlerBryanCutler 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 working on this @rymurr ! Apologies for taking so long to review.. It looks pretty good, but I saw what looked like inconsistencies in the LargeListVector APIs using ints vs longs to me, and otherwise only minor things to fix up.

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.

It would be nice not to add a new template and combine with the UnionListWriter if possible. That doesn't have to be done here though, it can be looked at later.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

agreed, I fixed this...was just being lazy ;-)

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.

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.

Since this is the relative bit index, it's not possible to return long. Can you change return value to an int?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

From the comment above, I think this should still be an int

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

shouldn't this be long?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

yup! Done

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.

return int

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

Could you add a TODO to revisit once 64 bit vectors are supported?

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.

Also indicate this in the javadoc here and probably for the class. It might even be a good idea to raise an error if the user tries to add too many elements, otherwise things might just start looking wrong.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

This should return long and not be casted to int

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

same here

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

could you add a check for Types.MinorType.LARGELIST here are remove the changes below?

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.

you also won't need typeBitWidth as an arg

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

thanks, done

@rymurr

Copy link
Copy Markdown
ContributorAuthor

Thanks for working on this @rymurr ! Apologies for taking so long to review.. It looks pretty good, but I saw what looked like inconsistencies in the LargeListVector APIs using ints vs longs to me, and otherwise only minor things to fix up.

Thanks a lot for the thorough review. I have fixed up everything you mentioned. It appears some of the confusion was related to changes for 64-bit allocations that were recently merged and the rest was my ignorance!

I have pushed a change with all your recommended fixes.

@BryanCutlerBryanCutler 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 the quick update @rymurr , it looks pretty good! Only a couple minor things. I see quite a few instances of offsetBuffer.getLong/setLong(i * OFFSET_WIDTH) that I believe need to be cast to long to avoid overflow. Could you take a quick pass and fix those up? I think we will be good to go after that.

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.

does this arg need to be cast to long?

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.

also here

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.

cast to long?

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.

was there a reason for this change?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

IDE autoformatting...reverted!

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.

why is this needed? the vector only supports integer max_value number of elements right?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

you are correct. Removed

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.

doesn't value need to be passed in here?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

value is always of type Void. None of the other visitors pass value to children.

@rymurr

Copy link
Copy Markdown
ContributorAuthor

Thanks for the quick update @rymurr , it looks pretty good! Only a couple minor things. I see quite a few instances of offsetBuffer.getLong/setLong(i * OFFSET_WIDTH) that I believe need to be cast to long to avoid overflow. Could you take a quick pass and fix those up? I think we will be good to go after that.

Thanks for another thorough review @BryanCutler ! I think that I addressed everything. I may have went over the top w/ the casting but it doesn't hurt :-)

Add large list and ensure it works with Integration tests. As noted in the JIRA
ticket this is rather limited as the underlying vector doesn't support int64 addressing
The important downcasts to int32 have been noted for a follow up once vectors with
long addresses are supported

@BryanCutlerBryanCutler 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.

LGTM

@BryanCutler

Copy link
Copy Markdown
Member

merged to master, thanks @rymurr !

@rymurr
rymurr deleted the ARROW-6110 branch July 6, 2020 08:32
pribor pushed a commit to GlobalWebIndex/arrow that referenced this pull request Oct 24, 2025
…ation test with C++
Add large list and ensure it works with Integration tests. As noted in the JIRA
ticket this is rather limited as the underlying vector doesn't support int64 addressing
The important downcasts to int32 have been noted for a follow up once vectors with
long addresses are supported
Closesapache#7275 from rymurr/ARROW-6110
Authored-by: Ryan Murray <rymurr@dremio.com>
Signed-off-by: Bryan Cutler <cutlerb@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@rymurr@emkornfield@BryanCutler@nealrichardson@liyafan82@fsaintjacques
, '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

ARROW-6110: [Java][Integration] Support LargeList Type and add integration test with C++ - #7275

Closed
rymurr wants to merge 1 commit into
apache:masterfrom
rymurr:ARROW-6110
Closed

ARROW-6110: [Java][Integration] Support LargeList Type and add integration test with C++#7275
rymurr wants to merge 1 commit into
apache:masterfrom
rymurr:ARROW-6110

Conversation

@rymurr

Copy link
Copy Markdown
Contributor

Add large list and ensure it works with Integration tests. As noted in the JIRA
ticket this is rather limited as the underlying vector doesn't support int64 addressing

The important downcasts to int32 have been noted for a follow up once vectors with
long addresses are supported

@github-actions

Copy link
Copy Markdown

@emkornfield

Copy link
Copy Markdown
Contributor

@BryanCutler would you have time to review?

@emkornfield

Copy link
Copy Markdown
Contributor

@rymurr looks like this needs a rebase

@rymurr

Copy link
Copy Markdown
ContributorAuthor

@rymurr looks like this needs a rebase

Thanks for the reminder @emkornfield, done.

@BryanCutler

Copy link
Copy Markdown
Member

I'm a little swamped right now, but I'll try to review sometime this week

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here we need to cast the argument of getLong to long, to avoid integer overflow.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here we need to cast the first argument, too.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I think we can replace the old implementation

void setBit(ArrowBuf validityBuffer, int index)

with this one, as now ArrowBuf is based on 64-bit index.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here we need to cast getLong argument to long.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

We need to cast (numRecords + 1) to long. Otherwise, integer overflow may happen before promoting the result to long.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

@rymurr
rymurrforce-pushed the ARROW-6110 branch 3 times, most recently from 4383a6d to 8ca2cb2CompareJune 22, 2020 15:11
@nealrichardson

Copy link
Copy Markdown
Member

Is this good to merge now? @BryanCutler are you still planning to review this? Would like to get this in 1.0.

@BryanCutler

Copy link
Copy Markdown
Member

Is this good to merge now? @BryanCutler are you still planning to review this? Would like to get this in 1.0.

I'm taking a look now, I'd like to get it in for 1.0 too.

@BryanCutlerBryanCutler 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 working on this @rymurr ! Apologies for taking so long to review.. It looks pretty good, but I saw what looked like inconsistencies in the LargeListVector APIs using ints vs longs to me, and otherwise only minor things to fix up.

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.

It would be nice not to add a new template and combine with the UnionListWriter if possible. That doesn't have to be done here though, it can be looked at later.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

agreed, I fixed this...was just being lazy ;-)

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.

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.

Since this is the relative bit index, it's not possible to return long. Can you change return value to an int?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

From the comment above, I think this should still be an int

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

shouldn't this be long?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

yup! Done

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.

return int

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

Could you add a TODO to revisit once 64 bit vectors are supported?

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.

Also indicate this in the javadoc here and probably for the class. It might even be a good idea to raise an error if the user tries to add too many elements, otherwise things might just start looking wrong.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

This should return long and not be casted to int

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

same here

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

could you add a check for Types.MinorType.LARGELIST here are remove the changes below?

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.

you also won't need typeBitWidth as an arg

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

thanks, done

@rymurr

Copy link
Copy Markdown
ContributorAuthor

Thanks for working on this @rymurr ! Apologies for taking so long to review.. It looks pretty good, but I saw what looked like inconsistencies in the LargeListVector APIs using ints vs longs to me, and otherwise only minor things to fix up.

Thanks a lot for the thorough review. I have fixed up everything you mentioned. It appears some of the confusion was related to changes for 64-bit allocations that were recently merged and the rest was my ignorance!

I have pushed a change with all your recommended fixes.

@BryanCutlerBryanCutler 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 the quick update @rymurr , it looks pretty good! Only a couple minor things. I see quite a few instances of offsetBuffer.getLong/setLong(i * OFFSET_WIDTH) that I believe need to be cast to long to avoid overflow. Could you take a quick pass and fix those up? I think we will be good to go after that.

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.

does this arg need to be cast to long?

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.

also here

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.

cast to long?

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.

was there a reason for this change?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

IDE autoformatting...reverted!

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.

why is this needed? the vector only supports integer max_value number of elements right?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

you are correct. Removed

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.

doesn't value need to be passed in here?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

value is always of type Void. None of the other visitors pass value to children.

@rymurr

Copy link
Copy Markdown
ContributorAuthor

Thanks for the quick update @rymurr , it looks pretty good! Only a couple minor things. I see quite a few instances of offsetBuffer.getLong/setLong(i * OFFSET_WIDTH) that I believe need to be cast to long to avoid overflow. Could you take a quick pass and fix those up? I think we will be good to go after that.

Thanks for another thorough review @BryanCutler ! I think that I addressed everything. I may have went over the top w/ the casting but it doesn't hurt :-)

Add large list and ensure it works with Integration tests. As noted in the JIRA
ticket this is rather limited as the underlying vector doesn't support int64 addressing
The important downcasts to int32 have been noted for a follow up once vectors with
long addresses are supported

@BryanCutlerBryanCutler 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.

LGTM

@BryanCutler

Copy link
Copy Markdown
Member

merged to master, thanks @rymurr !

@rymurr
rymurr deleted the ARROW-6110 branch July 6, 2020 08:32
pribor pushed a commit to GlobalWebIndex/arrow that referenced this pull request Oct 24, 2025
…ation test with C++
Add large list and ensure it works with Integration tests. As noted in the JIRA
ticket this is rather limited as the underlying vector doesn't support int64 addressing
The important downcasts to int32 have been noted for a follow up once vectors with
long addresses are supported
Closesapache#7275 from rymurr/ARROW-6110
Authored-by: Ryan Murray <rymurr@dremio.com>
Signed-off-by: Bryan Cutler <cutlerb@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@rymurr@emkornfield@BryanCutler@nealrichardson@liyafan82@fsaintjacques
, '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

ARROW-6110: [Java][Integration] Support LargeList Type and add integration test with C++ - #7275

Closed
rymurr wants to merge 1 commit into
apache:masterfrom
rymurr:ARROW-6110
Closed

ARROW-6110: [Java][Integration] Support LargeList Type and add integration test with C++#7275
rymurr wants to merge 1 commit into
apache:masterfrom
rymurr:ARROW-6110

Conversation

@rymurr

Copy link
Copy Markdown
Contributor

Add large list and ensure it works with Integration tests. As noted in the JIRA
ticket this is rather limited as the underlying vector doesn't support int64 addressing

The important downcasts to int32 have been noted for a follow up once vectors with
long addresses are supported

@github-actions

Copy link
Copy Markdown

@emkornfield

Copy link
Copy Markdown
Contributor

@BryanCutler would you have time to review?

@emkornfield

Copy link
Copy Markdown
Contributor

@rymurr looks like this needs a rebase

@rymurr

Copy link
Copy Markdown
ContributorAuthor

@rymurr looks like this needs a rebase

Thanks for the reminder @emkornfield, done.

@BryanCutler

Copy link
Copy Markdown
Member

I'm a little swamped right now, but I'll try to review sometime this week

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here we need to cast the argument of getLong to long, to avoid integer overflow.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here we need to cast the first argument, too.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I think we can replace the old implementation

void setBit(ArrowBuf validityBuffer, int index)

with this one, as now ArrowBuf is based on 64-bit index.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here we need to cast getLong argument to long.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

We need to cast (numRecords + 1) to long. Otherwise, integer overflow may happen before promoting the result to long.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

@rymurr
rymurrforce-pushed the ARROW-6110 branch 3 times, most recently from 4383a6d to 8ca2cb2CompareJune 22, 2020 15:11
@nealrichardson

Copy link
Copy Markdown
Member

Is this good to merge now? @BryanCutler are you still planning to review this? Would like to get this in 1.0.

@BryanCutler

Copy link
Copy Markdown
Member

Is this good to merge now? @BryanCutler are you still planning to review this? Would like to get this in 1.0.

I'm taking a look now, I'd like to get it in for 1.0 too.

@BryanCutlerBryanCutler 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 working on this @rymurr ! Apologies for taking so long to review.. It looks pretty good, but I saw what looked like inconsistencies in the LargeListVector APIs using ints vs longs to me, and otherwise only minor things to fix up.

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.

It would be nice not to add a new template and combine with the UnionListWriter if possible. That doesn't have to be done here though, it can be looked at later.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

agreed, I fixed this...was just being lazy ;-)

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.

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.

Since this is the relative bit index, it's not possible to return long. Can you change return value to an int?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

From the comment above, I think this should still be an int

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

shouldn't this be long?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

yup! Done

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.

return int

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

Could you add a TODO to revisit once 64 bit vectors are supported?

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.

Also indicate this in the javadoc here and probably for the class. It might even be a good idea to raise an error if the user tries to add too many elements, otherwise things might just start looking wrong.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

This should return long and not be casted to int

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

same here

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

could you add a check for Types.MinorType.LARGELIST here are remove the changes below?

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.

you also won't need typeBitWidth as an arg

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

thanks, done

@rymurr

Copy link
Copy Markdown
ContributorAuthor

Thanks for working on this @rymurr ! Apologies for taking so long to review.. It looks pretty good, but I saw what looked like inconsistencies in the LargeListVector APIs using ints vs longs to me, and otherwise only minor things to fix up.

Thanks a lot for the thorough review. I have fixed up everything you mentioned. It appears some of the confusion was related to changes for 64-bit allocations that were recently merged and the rest was my ignorance!

I have pushed a change with all your recommended fixes.

@BryanCutlerBryanCutler 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 the quick update @rymurr , it looks pretty good! Only a couple minor things. I see quite a few instances of offsetBuffer.getLong/setLong(i * OFFSET_WIDTH) that I believe need to be cast to long to avoid overflow. Could you take a quick pass and fix those up? I think we will be good to go after that.

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.

does this arg need to be cast to long?

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.

also here

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.

cast to long?

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.

was there a reason for this change?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

IDE autoformatting...reverted!

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.

why is this needed? the vector only supports integer max_value number of elements right?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

you are correct. Removed

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.

doesn't value need to be passed in here?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

value is always of type Void. None of the other visitors pass value to children.

@rymurr

Copy link
Copy Markdown
ContributorAuthor

Thanks for the quick update @rymurr , it looks pretty good! Only a couple minor things. I see quite a few instances of offsetBuffer.getLong/setLong(i * OFFSET_WIDTH) that I believe need to be cast to long to avoid overflow. Could you take a quick pass and fix those up? I think we will be good to go after that.

Thanks for another thorough review @BryanCutler ! I think that I addressed everything. I may have went over the top w/ the casting but it doesn't hurt :-)

Add large list and ensure it works with Integration tests. As noted in the JIRA
ticket this is rather limited as the underlying vector doesn't support int64 addressing
The important downcasts to int32 have been noted for a follow up once vectors with
long addresses are supported

@BryanCutlerBryanCutler 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.

LGTM

@BryanCutler

Copy link
Copy Markdown
Member

merged to master, thanks @rymurr !

@rymurr
rymurr deleted the ARROW-6110 branch July 6, 2020 08:32
pribor pushed a commit to GlobalWebIndex/arrow that referenced this pull request Oct 24, 2025
…ation test with C++
Add large list and ensure it works with Integration tests. As noted in the JIRA
ticket this is rather limited as the underlying vector doesn't support int64 addressing
The important downcasts to int32 have been noted for a follow up once vectors with
long addresses are supported
Closesapache#7275 from rymurr/ARROW-6110
Authored-by: Ryan Murray <rymurr@dremio.com>
Signed-off-by: Bryan Cutler <cutlerb@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@rymurr@emkornfield@BryanCutler@nealrichardson@liyafan82@fsaintjacques
, '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

ARROW-6110: [Java][Integration] Support LargeList Type and add integration test with C++ - #7275

Closed
rymurr wants to merge 1 commit into
apache:masterfrom
rymurr:ARROW-6110
Closed

ARROW-6110: [Java][Integration] Support LargeList Type and add integration test with C++#7275
rymurr wants to merge 1 commit into
apache:masterfrom
rymurr:ARROW-6110

Conversation

@rymurr

Copy link
Copy Markdown
Contributor

Add large list and ensure it works with Integration tests. As noted in the JIRA
ticket this is rather limited as the underlying vector doesn't support int64 addressing

The important downcasts to int32 have been noted for a follow up once vectors with
long addresses are supported

@github-actions

Copy link
Copy Markdown

@emkornfield

Copy link
Copy Markdown
Contributor

@BryanCutler would you have time to review?

@emkornfield

Copy link
Copy Markdown
Contributor

@rymurr looks like this needs a rebase

@rymurr

Copy link
Copy Markdown
ContributorAuthor

@rymurr looks like this needs a rebase

Thanks for the reminder @emkornfield, done.

@BryanCutler

Copy link
Copy Markdown
Member

I'm a little swamped right now, but I'll try to review sometime this week

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here we need to cast the argument of getLong to long, to avoid integer overflow.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here we need to cast the first argument, too.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I think we can replace the old implementation

void setBit(ArrowBuf validityBuffer, int index)

with this one, as now ArrowBuf is based on 64-bit index.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here we need to cast getLong argument to long.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

We need to cast (numRecords + 1) to long. Otherwise, integer overflow may happen before promoting the result to long.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

@rymurr
rymurrforce-pushed the ARROW-6110 branch 3 times, most recently from 4383a6d to 8ca2cb2CompareJune 22, 2020 15:11
@nealrichardson

Copy link
Copy Markdown
Member

Is this good to merge now? @BryanCutler are you still planning to review this? Would like to get this in 1.0.

@BryanCutler

Copy link
Copy Markdown
Member

Is this good to merge now? @BryanCutler are you still planning to review this? Would like to get this in 1.0.

I'm taking a look now, I'd like to get it in for 1.0 too.

@BryanCutlerBryanCutler 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 working on this @rymurr ! Apologies for taking so long to review.. It looks pretty good, but I saw what looked like inconsistencies in the LargeListVector APIs using ints vs longs to me, and otherwise only minor things to fix up.

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.

It would be nice not to add a new template and combine with the UnionListWriter if possible. That doesn't have to be done here though, it can be looked at later.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

agreed, I fixed this...was just being lazy ;-)

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.

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.

Since this is the relative bit index, it's not possible to return long. Can you change return value to an int?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

From the comment above, I think this should still be an int

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

shouldn't this be long?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

yup! Done

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.

return int

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

Could you add a TODO to revisit once 64 bit vectors are supported?

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.

Also indicate this in the javadoc here and probably for the class. It might even be a good idea to raise an error if the user tries to add too many elements, otherwise things might just start looking wrong.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

This should return long and not be casted to int

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

same here

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

could you add a check for Types.MinorType.LARGELIST here are remove the changes below?

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.

you also won't need typeBitWidth as an arg

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

thanks, done

@rymurr

Copy link
Copy Markdown
ContributorAuthor

Thanks for working on this @rymurr ! Apologies for taking so long to review.. It looks pretty good, but I saw what looked like inconsistencies in the LargeListVector APIs using ints vs longs to me, and otherwise only minor things to fix up.

Thanks a lot for the thorough review. I have fixed up everything you mentioned. It appears some of the confusion was related to changes for 64-bit allocations that were recently merged and the rest was my ignorance!

I have pushed a change with all your recommended fixes.

@BryanCutlerBryanCutler 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 the quick update @rymurr , it looks pretty good! Only a couple minor things. I see quite a few instances of offsetBuffer.getLong/setLong(i * OFFSET_WIDTH) that I believe need to be cast to long to avoid overflow. Could you take a quick pass and fix those up? I think we will be good to go after that.

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.

does this arg need to be cast to long?

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.

also here

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.

cast to long?

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.

was there a reason for this change?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

IDE autoformatting...reverted!

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.

why is this needed? the vector only supports integer max_value number of elements right?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

you are correct. Removed

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.

doesn't value need to be passed in here?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

value is always of type Void. None of the other visitors pass value to children.

@rymurr

Copy link
Copy Markdown
ContributorAuthor

Thanks for the quick update @rymurr , it looks pretty good! Only a couple minor things. I see quite a few instances of offsetBuffer.getLong/setLong(i * OFFSET_WIDTH) that I believe need to be cast to long to avoid overflow. Could you take a quick pass and fix those up? I think we will be good to go after that.

Thanks for another thorough review @BryanCutler ! I think that I addressed everything. I may have went over the top w/ the casting but it doesn't hurt :-)

Add large list and ensure it works with Integration tests. As noted in the JIRA
ticket this is rather limited as the underlying vector doesn't support int64 addressing
The important downcasts to int32 have been noted for a follow up once vectors with
long addresses are supported

@BryanCutlerBryanCutler 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.

LGTM

@BryanCutler

Copy link
Copy Markdown
Member

merged to master, thanks @rymurr !

@rymurr
rymurr deleted the ARROW-6110 branch July 6, 2020 08:32
pribor pushed a commit to GlobalWebIndex/arrow that referenced this pull request Oct 24, 2025
…ation test with C++
Add large list and ensure it works with Integration tests. As noted in the JIRA
ticket this is rather limited as the underlying vector doesn't support int64 addressing
The important downcasts to int32 have been noted for a follow up once vectors with
long addresses are supported
Closesapache#7275 from rymurr/ARROW-6110
Authored-by: Ryan Murray <rymurr@dremio.com>
Signed-off-by: Bryan Cutler <cutlerb@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@rymurr@emkornfield@BryanCutler@nealrichardson@liyafan82@fsaintjacques
, '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

ARROW-6110: [Java][Integration] Support LargeList Type and add integration test with C++ - #7275

Closed
rymurr wants to merge 1 commit into
apache:masterfrom
rymurr:ARROW-6110
Closed

ARROW-6110: [Java][Integration] Support LargeList Type and add integration test with C++#7275
rymurr wants to merge 1 commit into
apache:masterfrom
rymurr:ARROW-6110

Conversation

@rymurr

Copy link
Copy Markdown
Contributor

Add large list and ensure it works with Integration tests. As noted in the JIRA
ticket this is rather limited as the underlying vector doesn't support int64 addressing

The important downcasts to int32 have been noted for a follow up once vectors with
long addresses are supported

@github-actions

Copy link
Copy Markdown

@emkornfield

Copy link
Copy Markdown
Contributor

@BryanCutler would you have time to review?

@emkornfield

Copy link
Copy Markdown
Contributor

@rymurr looks like this needs a rebase

@rymurr

Copy link
Copy Markdown
ContributorAuthor

@rymurr looks like this needs a rebase

Thanks for the reminder @emkornfield, done.

@BryanCutler

Copy link
Copy Markdown
Member

I'm a little swamped right now, but I'll try to review sometime this week

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here we need to cast the argument of getLong to long, to avoid integer overflow.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here we need to cast the first argument, too.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I think we can replace the old implementation

void setBit(ArrowBuf validityBuffer, int index)

with this one, as now ArrowBuf is based on 64-bit index.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here we need to cast getLong argument to long.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

We need to cast (numRecords + 1) to long. Otherwise, integer overflow may happen before promoting the result to long.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

@rymurr
rymurrforce-pushed the ARROW-6110 branch 3 times, most recently from 4383a6d to 8ca2cb2CompareJune 22, 2020 15:11
@nealrichardson

Copy link
Copy Markdown
Member

Is this good to merge now? @BryanCutler are you still planning to review this? Would like to get this in 1.0.

@BryanCutler

Copy link
Copy Markdown
Member

Is this good to merge now? @BryanCutler are you still planning to review this? Would like to get this in 1.0.

I'm taking a look now, I'd like to get it in for 1.0 too.

@BryanCutlerBryanCutler 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 working on this @rymurr ! Apologies for taking so long to review.. It looks pretty good, but I saw what looked like inconsistencies in the LargeListVector APIs using ints vs longs to me, and otherwise only minor things to fix up.

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.

It would be nice not to add a new template and combine with the UnionListWriter if possible. That doesn't have to be done here though, it can be looked at later.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

agreed, I fixed this...was just being lazy ;-)

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.

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.

Since this is the relative bit index, it's not possible to return long. Can you change return value to an int?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

From the comment above, I think this should still be an int

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

shouldn't this be long?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

yup! Done

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.

return int

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

Could you add a TODO to revisit once 64 bit vectors are supported?

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.

Also indicate this in the javadoc here and probably for the class. It might even be a good idea to raise an error if the user tries to add too many elements, otherwise things might just start looking wrong.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

This should return long and not be casted to int

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

same here

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

done

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.

could you add a check for Types.MinorType.LARGELIST here are remove the changes below?

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.

you also won't need typeBitWidth as an arg

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

thanks, done

@rymurr

Copy link
Copy Markdown
ContributorAuthor

Thanks for working on this @rymurr ! Apologies for taking so long to review.. It looks pretty good, but I saw what looked like inconsistencies in the LargeListVector APIs using ints vs longs to me, and otherwise only minor things to fix up.

Thanks a lot for the thorough review. I have fixed up everything you mentioned. It appears some of the confusion was related to changes for 64-bit allocations that were recently merged and the rest was my ignorance!

I have pushed a change with all your recommended fixes.

@BryanCutlerBryanCutler 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 the quick update @rymurr , it looks pretty good! Only a couple minor things. I see quite a few instances of offsetBuffer.getLong/setLong(i * OFFSET_WIDTH) that I believe need to be cast to long to avoid overflow. Could you take a quick pass and fix those up? I think we will be good to go after that.

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.

does this arg need to be cast to long?

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.

also here

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.

cast to long?

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.

was there a reason for this change?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

IDE autoformatting...reverted!

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.

why is this needed? the vector only supports integer max_value number of elements right?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

you are correct. Removed

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.

doesn't value need to be passed in here?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

value is always of type Void. None of the other visitors pass value to children.

@rymurr

Copy link
Copy Markdown
ContributorAuthor

Thanks for the quick update @rymurr , it looks pretty good! Only a couple minor things. I see quite a few instances of offsetBuffer.getLong/setLong(i * OFFSET_WIDTH) that I believe need to be cast to long to avoid overflow. Could you take a quick pass and fix those up? I think we will be good to go after that.

Thanks for another thorough review @BryanCutler ! I think that I addressed everything. I may have went over the top w/ the casting but it doesn't hurt :-)

Add large list and ensure it works with Integration tests. As noted in the JIRA
ticket this is rather limited as the underlying vector doesn't support int64 addressing
The important downcasts to int32 have been noted for a follow up once vectors with
long addresses are supported

@BryanCutlerBryanCutler 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.

LGTM

@BryanCutler

Copy link
Copy Markdown
Member

merged to master, thanks @rymurr !

@rymurr
rymurr deleted the ARROW-6110 branch July 6, 2020 08:32
pribor pushed a commit to GlobalWebIndex/arrow that referenced this pull request Oct 24, 2025
…ation test with C++
Add large list and ensure it works with Integration tests. As noted in the JIRA
ticket this is rather limited as the underlying vector doesn't support int64 addressing
The important downcasts to int32 have been noted for a follow up once vectors with
long addresses are supported
Closesapache#7275 from rymurr/ARROW-6110
Authored-by: Ryan Murray <rymurr@dremio.com>
Signed-off-by: Bryan Cutler <cutlerb@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@rymurr@emkornfield@BryanCutler@nealrichardson@liyafan82@fsaintjacques