ARROW-9861: [Java] Support big-endian in DecimalVector - #8056

Closed
kiszk wants to merge 6 commits into
apache:masterfrom
kiszk:ARROW-9861
Closed

ARROW-9861: [Java] Support big-endian in DecimalVector#8056
kiszk wants to merge 6 commits into
apache:masterfrom
kiszk:ARROW-9861

Conversation

@kiszk

Copy link
Copy Markdown
Member

This PR fixes failures in DecimalVectorTest on a big-endian platform

@kiszkkiszk changed the title ARROW-9861: [java] Support big-endian in DecimalVectorARROW-9861: [Java] Support big-endian in DecimalVectorAug 26, 2020
@github-actions

Copy link
Copy Markdown

@emkornfield

Copy link
Copy Markdown
Contributor

@kiszk you'll probably need to make some fixes for Decimal256 as well, I think.

@BryanCutler you mentioned you could devote some time to reviewing Big Endian changes? Would you mind taking a look through this one and @kiszk other Java changes?

@BryanCutler

Copy link
Copy Markdown
Member

Sure, I can take a look. It might a day or two before I can though @kiszk .

@kiszk

Copy link
Copy Markdown
MemberAuthor

@emkornfield Sure, I will work for supporting Decimal256.

@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, just a couple minor things

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 seems a bit odd that it's writing long values at 2 different indices, but I guess that was here before. Do you know what it's trying to do 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.

Hmm, I guess it's to write a long value to be used as BigDecimal? So it writes the long in 8-bytes and then pads the remaining 8-bytes. It would be nice if the doc was a little better, but no big deal..

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

This is used for DecialVector that is a fixed-width (16-byte) vector. This routine extends the signed bit to a new long. I will write a document in the comment.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

In addition, this PR will support to write it to a 256-bit entry for the future.

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 not return if length == TYPE_WIDTH?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

If we add if (length == TYPE_WIDTH) return before line 244, no data is copied from value to outAddress. I will add a comment copy data from value to outAddress after line 244.

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.

ok, I see above it is already set during the swap. I guess there is no harm in calling PlatformDependent.setMemory(outAddress, DecimalVector.TYPE_WIDTH - length, pad) if length == TYPE_WIDTH

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 probably be in a Preconditions.checkArgument, but we are not trying to change things in this PR so don't need to do that 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.

you could move padBytes out of the if statements

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.

I don't think you need 2 loops here, just move the Integer.MAX_VALUE and MIN_VALUE here

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Sure, I will drop lines 49-57.

@kiszk

kiszk commented Nov 2, 2020

Copy link
Copy Markdown
MemberAuthor

I will update the Decimal256Vector class late today or tomorrow.

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

Looks good, just a few minor nits

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.

ok, I see above it is already set during the swap. I guess there is no harm in calling PlatformDependent.setMemory(outAddress, DecimalVector.TYPE_WIDTH - length, pad) if length == TYPE_WIDTH

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.

typo: DeciimalUtility -> DecimalUtility

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 use DecimalVector.TYPE_WIDTH 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.

Same here

@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. Looks like a flaky test, will try again.

@BryanCutler

Copy link
Copy Markdown
Member

The test error with Java JNI looks unrelated and seems to be an env issue with ORC, I'll go ahead with merging this.

@BryanCutler

Copy link
Copy Markdown
Member

merged to master, thanks @kiszk !

@kiszk

kiszk commented Nov 5, 2020

Copy link
Copy Markdown
MemberAuthor

@BryanCutler Thank you. One comment.
According to the document, benchmarking is necessary before merging features (I think that the test code does not affect the performance)

Benchmarks for performance critical parts of the code to demonstrate no regression.

I am working for benchmark bot for Java here. It would be good to merge new features after this bot will be available.

cc @emkornfield

@BryanCutler

Copy link
Copy Markdown
Member

I did not see anything that looks like it would affect performance here, but I agree we should get some benchmarks going to be sure. I will look at you other PR next.

pribor pushed a commit to GlobalWebIndex/arrow that referenced this pull request Oct 24, 2025
This PR fixes failures in DecimalVectorTest on a big-endian platform
Closesapache#8056 from kiszk/ARROW-9861
Authored-by: Kazuaki Ishizaki <ishizaki@jp.ibm.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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kiszk@emkornfield@BryanCutler
, '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-9861: [Java] Support big-endian in DecimalVector - #8056

Closed
kiszk wants to merge 6 commits into
apache:masterfrom
kiszk:ARROW-9861
Closed

ARROW-9861: [Java] Support big-endian in DecimalVector#8056
kiszk wants to merge 6 commits into
apache:masterfrom
kiszk:ARROW-9861

Conversation

@kiszk

Copy link
Copy Markdown
Member

This PR fixes failures in DecimalVectorTest on a big-endian platform

@kiszkkiszk changed the title ARROW-9861: [java] Support big-endian in DecimalVectorARROW-9861: [Java] Support big-endian in DecimalVectorAug 26, 2020
@github-actions

Copy link
Copy Markdown

@emkornfield

Copy link
Copy Markdown
Contributor

@kiszk you'll probably need to make some fixes for Decimal256 as well, I think.

@BryanCutler you mentioned you could devote some time to reviewing Big Endian changes? Would you mind taking a look through this one and @kiszk other Java changes?

@BryanCutler

Copy link
Copy Markdown
Member

Sure, I can take a look. It might a day or two before I can though @kiszk .

@kiszk

Copy link
Copy Markdown
MemberAuthor

@emkornfield Sure, I will work for supporting Decimal256.

@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, just a couple minor things

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 seems a bit odd that it's writing long values at 2 different indices, but I guess that was here before. Do you know what it's trying to do 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.

Hmm, I guess it's to write a long value to be used as BigDecimal? So it writes the long in 8-bytes and then pads the remaining 8-bytes. It would be nice if the doc was a little better, but no big deal..

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

This is used for DecialVector that is a fixed-width (16-byte) vector. This routine extends the signed bit to a new long. I will write a document in the comment.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

In addition, this PR will support to write it to a 256-bit entry for the future.

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 not return if length == TYPE_WIDTH?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

If we add if (length == TYPE_WIDTH) return before line 244, no data is copied from value to outAddress. I will add a comment copy data from value to outAddress after line 244.

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.

ok, I see above it is already set during the swap. I guess there is no harm in calling PlatformDependent.setMemory(outAddress, DecimalVector.TYPE_WIDTH - length, pad) if length == TYPE_WIDTH

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 probably be in a Preconditions.checkArgument, but we are not trying to change things in this PR so don't need to do that 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.

you could move padBytes out of the if statements

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.

I don't think you need 2 loops here, just move the Integer.MAX_VALUE and MIN_VALUE here

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Sure, I will drop lines 49-57.

@kiszk

kiszk commented Nov 2, 2020

Copy link
Copy Markdown
MemberAuthor

I will update the Decimal256Vector class late today or tomorrow.

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

Looks good, just a few minor nits

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.

ok, I see above it is already set during the swap. I guess there is no harm in calling PlatformDependent.setMemory(outAddress, DecimalVector.TYPE_WIDTH - length, pad) if length == TYPE_WIDTH

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.

typo: DeciimalUtility -> DecimalUtility

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 use DecimalVector.TYPE_WIDTH 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.

Same here

@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. Looks like a flaky test, will try again.

@BryanCutler

Copy link
Copy Markdown
Member

The test error with Java JNI looks unrelated and seems to be an env issue with ORC, I'll go ahead with merging this.

@BryanCutler

Copy link
Copy Markdown
Member

merged to master, thanks @kiszk !

@kiszk

kiszk commented Nov 5, 2020

Copy link
Copy Markdown
MemberAuthor

@BryanCutler Thank you. One comment.
According to the document, benchmarking is necessary before merging features (I think that the test code does not affect the performance)

Benchmarks for performance critical parts of the code to demonstrate no regression.

I am working for benchmark bot for Java here. It would be good to merge new features after this bot will be available.

cc @emkornfield

@BryanCutler

Copy link
Copy Markdown
Member

I did not see anything that looks like it would affect performance here, but I agree we should get some benchmarks going to be sure. I will look at you other PR next.

pribor pushed a commit to GlobalWebIndex/arrow that referenced this pull request Oct 24, 2025
This PR fixes failures in DecimalVectorTest on a big-endian platform
Closesapache#8056 from kiszk/ARROW-9861
Authored-by: Kazuaki Ishizaki <ishizaki@jp.ibm.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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kiszk@emkornfield@BryanCutler
, '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-9861: [Java] Support big-endian in DecimalVector - #8056

Closed
kiszk wants to merge 6 commits into
apache:masterfrom
kiszk:ARROW-9861
Closed

ARROW-9861: [Java] Support big-endian in DecimalVector#8056
kiszk wants to merge 6 commits into
apache:masterfrom
kiszk:ARROW-9861

Conversation

@kiszk

Copy link
Copy Markdown
Member

This PR fixes failures in DecimalVectorTest on a big-endian platform

@kiszkkiszk changed the title ARROW-9861: [java] Support big-endian in DecimalVectorARROW-9861: [Java] Support big-endian in DecimalVectorAug 26, 2020
@github-actions

Copy link
Copy Markdown

@emkornfield

Copy link
Copy Markdown
Contributor

@kiszk you'll probably need to make some fixes for Decimal256 as well, I think.

@BryanCutler you mentioned you could devote some time to reviewing Big Endian changes? Would you mind taking a look through this one and @kiszk other Java changes?

@BryanCutler

Copy link
Copy Markdown
Member

Sure, I can take a look. It might a day or two before I can though @kiszk .

@kiszk

Copy link
Copy Markdown
MemberAuthor

@emkornfield Sure, I will work for supporting Decimal256.

@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, just a couple minor things

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 seems a bit odd that it's writing long values at 2 different indices, but I guess that was here before. Do you know what it's trying to do 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.

Hmm, I guess it's to write a long value to be used as BigDecimal? So it writes the long in 8-bytes and then pads the remaining 8-bytes. It would be nice if the doc was a little better, but no big deal..

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

This is used for DecialVector that is a fixed-width (16-byte) vector. This routine extends the signed bit to a new long. I will write a document in the comment.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

In addition, this PR will support to write it to a 256-bit entry for the future.

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 not return if length == TYPE_WIDTH?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

If we add if (length == TYPE_WIDTH) return before line 244, no data is copied from value to outAddress. I will add a comment copy data from value to outAddress after line 244.

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.

ok, I see above it is already set during the swap. I guess there is no harm in calling PlatformDependent.setMemory(outAddress, DecimalVector.TYPE_WIDTH - length, pad) if length == TYPE_WIDTH

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 probably be in a Preconditions.checkArgument, but we are not trying to change things in this PR so don't need to do that 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.

you could move padBytes out of the if statements

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.

I don't think you need 2 loops here, just move the Integer.MAX_VALUE and MIN_VALUE here

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Sure, I will drop lines 49-57.

@kiszk

kiszk commented Nov 2, 2020

Copy link
Copy Markdown
MemberAuthor

I will update the Decimal256Vector class late today or tomorrow.

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

Looks good, just a few minor nits

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.

ok, I see above it is already set during the swap. I guess there is no harm in calling PlatformDependent.setMemory(outAddress, DecimalVector.TYPE_WIDTH - length, pad) if length == TYPE_WIDTH

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.

typo: DeciimalUtility -> DecimalUtility

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 use DecimalVector.TYPE_WIDTH 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.

Same here

@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. Looks like a flaky test, will try again.

@BryanCutler

Copy link
Copy Markdown
Member

The test error with Java JNI looks unrelated and seems to be an env issue with ORC, I'll go ahead with merging this.

@BryanCutler

Copy link
Copy Markdown
Member

merged to master, thanks @kiszk !

@kiszk

kiszk commented Nov 5, 2020

Copy link
Copy Markdown
MemberAuthor

@BryanCutler Thank you. One comment.
According to the document, benchmarking is necessary before merging features (I think that the test code does not affect the performance)

Benchmarks for performance critical parts of the code to demonstrate no regression.

I am working for benchmark bot for Java here. It would be good to merge new features after this bot will be available.

cc @emkornfield

@BryanCutler

Copy link
Copy Markdown
Member

I did not see anything that looks like it would affect performance here, but I agree we should get some benchmarks going to be sure. I will look at you other PR next.

pribor pushed a commit to GlobalWebIndex/arrow that referenced this pull request Oct 24, 2025
This PR fixes failures in DecimalVectorTest on a big-endian platform
Closesapache#8056 from kiszk/ARROW-9861
Authored-by: Kazuaki Ishizaki <ishizaki@jp.ibm.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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kiszk@emkornfield@BryanCutler
, '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-9861: [Java] Support big-endian in DecimalVector - #8056

Closed
kiszk wants to merge 6 commits into
apache:masterfrom
kiszk:ARROW-9861
Closed

ARROW-9861: [Java] Support big-endian in DecimalVector#8056
kiszk wants to merge 6 commits into
apache:masterfrom
kiszk:ARROW-9861

Conversation

@kiszk

Copy link
Copy Markdown
Member

This PR fixes failures in DecimalVectorTest on a big-endian platform

@kiszkkiszk changed the title ARROW-9861: [java] Support big-endian in DecimalVectorARROW-9861: [Java] Support big-endian in DecimalVectorAug 26, 2020
@github-actions

Copy link
Copy Markdown

@emkornfield

Copy link
Copy Markdown
Contributor

@kiszk you'll probably need to make some fixes for Decimal256 as well, I think.

@BryanCutler you mentioned you could devote some time to reviewing Big Endian changes? Would you mind taking a look through this one and @kiszk other Java changes?

@BryanCutler

Copy link
Copy Markdown
Member

Sure, I can take a look. It might a day or two before I can though @kiszk .

@kiszk

Copy link
Copy Markdown
MemberAuthor

@emkornfield Sure, I will work for supporting Decimal256.

@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, just a couple minor things

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 seems a bit odd that it's writing long values at 2 different indices, but I guess that was here before. Do you know what it's trying to do 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.

Hmm, I guess it's to write a long value to be used as BigDecimal? So it writes the long in 8-bytes and then pads the remaining 8-bytes. It would be nice if the doc was a little better, but no big deal..

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

This is used for DecialVector that is a fixed-width (16-byte) vector. This routine extends the signed bit to a new long. I will write a document in the comment.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

In addition, this PR will support to write it to a 256-bit entry for the future.

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 not return if length == TYPE_WIDTH?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

If we add if (length == TYPE_WIDTH) return before line 244, no data is copied from value to outAddress. I will add a comment copy data from value to outAddress after line 244.

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.

ok, I see above it is already set during the swap. I guess there is no harm in calling PlatformDependent.setMemory(outAddress, DecimalVector.TYPE_WIDTH - length, pad) if length == TYPE_WIDTH

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 probably be in a Preconditions.checkArgument, but we are not trying to change things in this PR so don't need to do that 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.

you could move padBytes out of the if statements

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.

I don't think you need 2 loops here, just move the Integer.MAX_VALUE and MIN_VALUE here

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Sure, I will drop lines 49-57.

@kiszk

kiszk commented Nov 2, 2020

Copy link
Copy Markdown
MemberAuthor

I will update the Decimal256Vector class late today or tomorrow.

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

Looks good, just a few minor nits

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.

ok, I see above it is already set during the swap. I guess there is no harm in calling PlatformDependent.setMemory(outAddress, DecimalVector.TYPE_WIDTH - length, pad) if length == TYPE_WIDTH

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.

typo: DeciimalUtility -> DecimalUtility

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 use DecimalVector.TYPE_WIDTH 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.

Same here

@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. Looks like a flaky test, will try again.

@BryanCutler

Copy link
Copy Markdown
Member

The test error with Java JNI looks unrelated and seems to be an env issue with ORC, I'll go ahead with merging this.

@BryanCutler

Copy link
Copy Markdown
Member

merged to master, thanks @kiszk !

@kiszk

kiszk commented Nov 5, 2020

Copy link
Copy Markdown
MemberAuthor

@BryanCutler Thank you. One comment.
According to the document, benchmarking is necessary before merging features (I think that the test code does not affect the performance)

Benchmarks for performance critical parts of the code to demonstrate no regression.

I am working for benchmark bot for Java here. It would be good to merge new features after this bot will be available.

cc @emkornfield

@BryanCutler

Copy link
Copy Markdown
Member

I did not see anything that looks like it would affect performance here, but I agree we should get some benchmarks going to be sure. I will look at you other PR next.

pribor pushed a commit to GlobalWebIndex/arrow that referenced this pull request Oct 24, 2025
This PR fixes failures in DecimalVectorTest on a big-endian platform
Closesapache#8056 from kiszk/ARROW-9861
Authored-by: Kazuaki Ishizaki <ishizaki@jp.ibm.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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kiszk@emkornfield@BryanCutler
, '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-9861: [Java] Support big-endian in DecimalVector - #8056

Closed
kiszk wants to merge 6 commits into
apache:masterfrom
kiszk:ARROW-9861
Closed

ARROW-9861: [Java] Support big-endian in DecimalVector#8056
kiszk wants to merge 6 commits into
apache:masterfrom
kiszk:ARROW-9861

Conversation

@kiszk

Copy link
Copy Markdown
Member

This PR fixes failures in DecimalVectorTest on a big-endian platform

@kiszkkiszk changed the title ARROW-9861: [java] Support big-endian in DecimalVectorARROW-9861: [Java] Support big-endian in DecimalVectorAug 26, 2020
@github-actions

Copy link
Copy Markdown

@emkornfield

Copy link
Copy Markdown
Contributor

@kiszk you'll probably need to make some fixes for Decimal256 as well, I think.

@BryanCutler you mentioned you could devote some time to reviewing Big Endian changes? Would you mind taking a look through this one and @kiszk other Java changes?

@BryanCutler

Copy link
Copy Markdown
Member

Sure, I can take a look. It might a day or two before I can though @kiszk .

@kiszk

Copy link
Copy Markdown
MemberAuthor

@emkornfield Sure, I will work for supporting Decimal256.

@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, just a couple minor things

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 seems a bit odd that it's writing long values at 2 different indices, but I guess that was here before. Do you know what it's trying to do 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.

Hmm, I guess it's to write a long value to be used as BigDecimal? So it writes the long in 8-bytes and then pads the remaining 8-bytes. It would be nice if the doc was a little better, but no big deal..

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

This is used for DecialVector that is a fixed-width (16-byte) vector. This routine extends the signed bit to a new long. I will write a document in the comment.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

In addition, this PR will support to write it to a 256-bit entry for the future.

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 not return if length == TYPE_WIDTH?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

If we add if (length == TYPE_WIDTH) return before line 244, no data is copied from value to outAddress. I will add a comment copy data from value to outAddress after line 244.

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.

ok, I see above it is already set during the swap. I guess there is no harm in calling PlatformDependent.setMemory(outAddress, DecimalVector.TYPE_WIDTH - length, pad) if length == TYPE_WIDTH

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 probably be in a Preconditions.checkArgument, but we are not trying to change things in this PR so don't need to do that 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.

you could move padBytes out of the if statements

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.

I don't think you need 2 loops here, just move the Integer.MAX_VALUE and MIN_VALUE here

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Sure, I will drop lines 49-57.

@kiszk

kiszk commented Nov 2, 2020

Copy link
Copy Markdown
MemberAuthor

I will update the Decimal256Vector class late today or tomorrow.

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

Looks good, just a few minor nits

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.

ok, I see above it is already set during the swap. I guess there is no harm in calling PlatformDependent.setMemory(outAddress, DecimalVector.TYPE_WIDTH - length, pad) if length == TYPE_WIDTH

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.

typo: DeciimalUtility -> DecimalUtility

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 use DecimalVector.TYPE_WIDTH 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.

Same here

@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. Looks like a flaky test, will try again.

@BryanCutler

Copy link
Copy Markdown
Member

The test error with Java JNI looks unrelated and seems to be an env issue with ORC, I'll go ahead with merging this.

@BryanCutler

Copy link
Copy Markdown
Member

merged to master, thanks @kiszk !

@kiszk

kiszk commented Nov 5, 2020

Copy link
Copy Markdown
MemberAuthor

@BryanCutler Thank you. One comment.
According to the document, benchmarking is necessary before merging features (I think that the test code does not affect the performance)

Benchmarks for performance critical parts of the code to demonstrate no regression.

I am working for benchmark bot for Java here. It would be good to merge new features after this bot will be available.

cc @emkornfield

@BryanCutler

Copy link
Copy Markdown
Member

I did not see anything that looks like it would affect performance here, but I agree we should get some benchmarks going to be sure. I will look at you other PR next.

pribor pushed a commit to GlobalWebIndex/arrow that referenced this pull request Oct 24, 2025
This PR fixes failures in DecimalVectorTest on a big-endian platform
Closesapache#8056 from kiszk/ARROW-9861
Authored-by: Kazuaki Ishizaki <ishizaki@jp.ibm.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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kiszk@emkornfield@BryanCutler
, '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-9861: [Java] Support big-endian in DecimalVector - #8056

Closed
kiszk wants to merge 6 commits into
apache:masterfrom
kiszk:ARROW-9861
Closed

ARROW-9861: [Java] Support big-endian in DecimalVector#8056
kiszk wants to merge 6 commits into
apache:masterfrom
kiszk:ARROW-9861

Conversation

@kiszk

Copy link
Copy Markdown
Member

This PR fixes failures in DecimalVectorTest on a big-endian platform

@kiszkkiszk changed the title ARROW-9861: [java] Support big-endian in DecimalVectorARROW-9861: [Java] Support big-endian in DecimalVectorAug 26, 2020
@github-actions

Copy link
Copy Markdown

@emkornfield

Copy link
Copy Markdown
Contributor

@kiszk you'll probably need to make some fixes for Decimal256 as well, I think.

@BryanCutler you mentioned you could devote some time to reviewing Big Endian changes? Would you mind taking a look through this one and @kiszk other Java changes?

@BryanCutler

Copy link
Copy Markdown
Member

Sure, I can take a look. It might a day or two before I can though @kiszk .

@kiszk

Copy link
Copy Markdown
MemberAuthor

@emkornfield Sure, I will work for supporting Decimal256.

@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, just a couple minor things

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 seems a bit odd that it's writing long values at 2 different indices, but I guess that was here before. Do you know what it's trying to do 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.

Hmm, I guess it's to write a long value to be used as BigDecimal? So it writes the long in 8-bytes and then pads the remaining 8-bytes. It would be nice if the doc was a little better, but no big deal..

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

This is used for DecialVector that is a fixed-width (16-byte) vector. This routine extends the signed bit to a new long. I will write a document in the comment.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

In addition, this PR will support to write it to a 256-bit entry for the future.

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 not return if length == TYPE_WIDTH?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

If we add if (length == TYPE_WIDTH) return before line 244, no data is copied from value to outAddress. I will add a comment copy data from value to outAddress after line 244.

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.

ok, I see above it is already set during the swap. I guess there is no harm in calling PlatformDependent.setMemory(outAddress, DecimalVector.TYPE_WIDTH - length, pad) if length == TYPE_WIDTH

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 probably be in a Preconditions.checkArgument, but we are not trying to change things in this PR so don't need to do that 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.

you could move padBytes out of the if statements

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.

I don't think you need 2 loops here, just move the Integer.MAX_VALUE and MIN_VALUE here

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Sure, I will drop lines 49-57.

@kiszk

kiszk commented Nov 2, 2020

Copy link
Copy Markdown
MemberAuthor

I will update the Decimal256Vector class late today or tomorrow.

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

Looks good, just a few minor nits

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.

ok, I see above it is already set during the swap. I guess there is no harm in calling PlatformDependent.setMemory(outAddress, DecimalVector.TYPE_WIDTH - length, pad) if length == TYPE_WIDTH

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.

typo: DeciimalUtility -> DecimalUtility

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 use DecimalVector.TYPE_WIDTH 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.

Same here

@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. Looks like a flaky test, will try again.

@BryanCutler

Copy link
Copy Markdown
Member

The test error with Java JNI looks unrelated and seems to be an env issue with ORC, I'll go ahead with merging this.

@BryanCutler

Copy link
Copy Markdown
Member

merged to master, thanks @kiszk !

@kiszk

kiszk commented Nov 5, 2020

Copy link
Copy Markdown
MemberAuthor

@BryanCutler Thank you. One comment.
According to the document, benchmarking is necessary before merging features (I think that the test code does not affect the performance)

Benchmarks for performance critical parts of the code to demonstrate no regression.

I am working for benchmark bot for Java here. It would be good to merge new features after this bot will be available.

cc @emkornfield

@BryanCutler

Copy link
Copy Markdown
Member

I did not see anything that looks like it would affect performance here, but I agree we should get some benchmarks going to be sure. I will look at you other PR next.

pribor pushed a commit to GlobalWebIndex/arrow that referenced this pull request Oct 24, 2025
This PR fixes failures in DecimalVectorTest on a big-endian platform
Closesapache#8056 from kiszk/ARROW-9861
Authored-by: Kazuaki Ishizaki <ishizaki@jp.ibm.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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kiszk@emkornfield@BryanCutler
, '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-9861: [Java] Support big-endian in DecimalVector - #8056

Closed
kiszk wants to merge 6 commits into
apache:masterfrom
kiszk:ARROW-9861
Closed

ARROW-9861: [Java] Support big-endian in DecimalVector#8056
kiszk wants to merge 6 commits into
apache:masterfrom
kiszk:ARROW-9861

Conversation

@kiszk

Copy link
Copy Markdown
Member

This PR fixes failures in DecimalVectorTest on a big-endian platform

@kiszkkiszk changed the title ARROW-9861: [java] Support big-endian in DecimalVectorARROW-9861: [Java] Support big-endian in DecimalVectorAug 26, 2020
@github-actions

Copy link
Copy Markdown

@emkornfield

Copy link
Copy Markdown
Contributor

@kiszk you'll probably need to make some fixes for Decimal256 as well, I think.

@BryanCutler you mentioned you could devote some time to reviewing Big Endian changes? Would you mind taking a look through this one and @kiszk other Java changes?

@BryanCutler

Copy link
Copy Markdown
Member

Sure, I can take a look. It might a day or two before I can though @kiszk .

@kiszk

Copy link
Copy Markdown
MemberAuthor

@emkornfield Sure, I will work for supporting Decimal256.

@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, just a couple minor things

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 seems a bit odd that it's writing long values at 2 different indices, but I guess that was here before. Do you know what it's trying to do 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.

Hmm, I guess it's to write a long value to be used as BigDecimal? So it writes the long in 8-bytes and then pads the remaining 8-bytes. It would be nice if the doc was a little better, but no big deal..

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

This is used for DecialVector that is a fixed-width (16-byte) vector. This routine extends the signed bit to a new long. I will write a document in the comment.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

In addition, this PR will support to write it to a 256-bit entry for the future.

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 not return if length == TYPE_WIDTH?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

If we add if (length == TYPE_WIDTH) return before line 244, no data is copied from value to outAddress. I will add a comment copy data from value to outAddress after line 244.

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.

ok, I see above it is already set during the swap. I guess there is no harm in calling PlatformDependent.setMemory(outAddress, DecimalVector.TYPE_WIDTH - length, pad) if length == TYPE_WIDTH

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 probably be in a Preconditions.checkArgument, but we are not trying to change things in this PR so don't need to do that 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.

you could move padBytes out of the if statements

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.

I don't think you need 2 loops here, just move the Integer.MAX_VALUE and MIN_VALUE here

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Sure, I will drop lines 49-57.

@kiszk

kiszk commented Nov 2, 2020

Copy link
Copy Markdown
MemberAuthor

I will update the Decimal256Vector class late today or tomorrow.

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

Looks good, just a few minor nits

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.

ok, I see above it is already set during the swap. I guess there is no harm in calling PlatformDependent.setMemory(outAddress, DecimalVector.TYPE_WIDTH - length, pad) if length == TYPE_WIDTH

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.

typo: DeciimalUtility -> DecimalUtility

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 use DecimalVector.TYPE_WIDTH 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.

Same here

@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. Looks like a flaky test, will try again.

@BryanCutler

Copy link
Copy Markdown
Member

The test error with Java JNI looks unrelated and seems to be an env issue with ORC, I'll go ahead with merging this.

@BryanCutler

Copy link
Copy Markdown
Member

merged to master, thanks @kiszk !

@kiszk

kiszk commented Nov 5, 2020

Copy link
Copy Markdown
MemberAuthor

@BryanCutler Thank you. One comment.
According to the document, benchmarking is necessary before merging features (I think that the test code does not affect the performance)

Benchmarks for performance critical parts of the code to demonstrate no regression.

I am working for benchmark bot for Java here. It would be good to merge new features after this bot will be available.

cc @emkornfield

@BryanCutler

Copy link
Copy Markdown
Member

I did not see anything that looks like it would affect performance here, but I agree we should get some benchmarks going to be sure. I will look at you other PR next.

pribor pushed a commit to GlobalWebIndex/arrow that referenced this pull request Oct 24, 2025
This PR fixes failures in DecimalVectorTest on a big-endian platform
Closesapache#8056 from kiszk/ARROW-9861
Authored-by: Kazuaki Ishizaki <ishizaki@jp.ibm.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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kiszk@emkornfield@BryanCutler
, '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-9861: [Java] Support big-endian in DecimalVector - #8056

Closed
kiszk wants to merge 6 commits into
apache:masterfrom
kiszk:ARROW-9861
Closed

ARROW-9861: [Java] Support big-endian in DecimalVector#8056
kiszk wants to merge 6 commits into
apache:masterfrom
kiszk:ARROW-9861

Conversation

@kiszk

Copy link
Copy Markdown
Member

This PR fixes failures in DecimalVectorTest on a big-endian platform

@kiszkkiszk changed the title ARROW-9861: [java] Support big-endian in DecimalVectorARROW-9861: [Java] Support big-endian in DecimalVectorAug 26, 2020
@github-actions

Copy link
Copy Markdown

@emkornfield

Copy link
Copy Markdown
Contributor

@kiszk you'll probably need to make some fixes for Decimal256 as well, I think.

@BryanCutler you mentioned you could devote some time to reviewing Big Endian changes? Would you mind taking a look through this one and @kiszk other Java changes?

@BryanCutler

Copy link
Copy Markdown
Member

Sure, I can take a look. It might a day or two before I can though @kiszk .

@kiszk

Copy link
Copy Markdown
MemberAuthor

@emkornfield Sure, I will work for supporting Decimal256.

@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, just a couple minor things

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 seems a bit odd that it's writing long values at 2 different indices, but I guess that was here before. Do you know what it's trying to do 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.

Hmm, I guess it's to write a long value to be used as BigDecimal? So it writes the long in 8-bytes and then pads the remaining 8-bytes. It would be nice if the doc was a little better, but no big deal..

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

This is used for DecialVector that is a fixed-width (16-byte) vector. This routine extends the signed bit to a new long. I will write a document in the comment.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

In addition, this PR will support to write it to a 256-bit entry for the future.

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 not return if length == TYPE_WIDTH?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

If we add if (length == TYPE_WIDTH) return before line 244, no data is copied from value to outAddress. I will add a comment copy data from value to outAddress after line 244.

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.

ok, I see above it is already set during the swap. I guess there is no harm in calling PlatformDependent.setMemory(outAddress, DecimalVector.TYPE_WIDTH - length, pad) if length == TYPE_WIDTH

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 probably be in a Preconditions.checkArgument, but we are not trying to change things in this PR so don't need to do that 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.

you could move padBytes out of the if statements

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.

I don't think you need 2 loops here, just move the Integer.MAX_VALUE and MIN_VALUE here

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Sure, I will drop lines 49-57.

@kiszk

kiszk commented Nov 2, 2020

Copy link
Copy Markdown
MemberAuthor

I will update the Decimal256Vector class late today or tomorrow.

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

Looks good, just a few minor nits

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.

ok, I see above it is already set during the swap. I guess there is no harm in calling PlatformDependent.setMemory(outAddress, DecimalVector.TYPE_WIDTH - length, pad) if length == TYPE_WIDTH

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.

typo: DeciimalUtility -> DecimalUtility

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 use DecimalVector.TYPE_WIDTH 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.

Same here

@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. Looks like a flaky test, will try again.

@BryanCutler

Copy link
Copy Markdown
Member

The test error with Java JNI looks unrelated and seems to be an env issue with ORC, I'll go ahead with merging this.

@BryanCutler

Copy link
Copy Markdown
Member

merged to master, thanks @kiszk !

@kiszk

kiszk commented Nov 5, 2020

Copy link
Copy Markdown
MemberAuthor

@BryanCutler Thank you. One comment.
According to the document, benchmarking is necessary before merging features (I think that the test code does not affect the performance)

Benchmarks for performance critical parts of the code to demonstrate no regression.

I am working for benchmark bot for Java here. It would be good to merge new features after this bot will be available.

cc @emkornfield

@BryanCutler

Copy link
Copy Markdown
Member

I did not see anything that looks like it would affect performance here, but I agree we should get some benchmarks going to be sure. I will look at you other PR next.

pribor pushed a commit to GlobalWebIndex/arrow that referenced this pull request Oct 24, 2025
This PR fixes failures in DecimalVectorTest on a big-endian platform
Closesapache#8056 from kiszk/ARROW-9861
Authored-by: Kazuaki Ishizaki <ishizaki@jp.ibm.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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kiszk@emkornfield@BryanCutler