-
Notifications
You must be signed in to change notification settings - Fork 3.4k
Add more type operator implementations for flat representations #27196
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
Reviewer's GuideThis PR introduces direct flat-slice operator implementations for EQUAL, HASH_CODE, and XX_HASH_64 across fixed-width SPI types to avoid intermediate object allocations, and adds explicit @Flat* annotations on flat operator parameters for clearer intent and correctness. Class diagram for updated operator methods with flat-slice support and annotationsclassDiagram
class LongTimeWithTimeZoneType {
+writeFlat(LongTimeWithTimeZone value, @FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
+writeBlockFlat(@BlockPosition Fixed12Block block, @BlockIndex int position, @FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
+equalOperator(@FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset, @BlockPosition Fixed12Block rightBlock, @BlockIndex int rightPosition)
+hashCodeOperator(@FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
+xxHash64Operator(@FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
}
class LongTimestampType {
+writeFlat(LongTimestamp value, @FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
+writeBlockFlat(@BlockPosition Fixed12Block block, @BlockIndex int position, @FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
+equalOperator(@FlatFixed byte[] leftFixedSizeSlice, @FlatFixedOffset int leftFixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset, @BlockPosition Fixed12Block rightBlock, @BlockIndex int rightPosition)
+xxHash64Operator(@FlatFixed byte[] leftFixedSizeSlice, @FlatFixedOffset int leftFixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
}
class LongTimestampWithTimeZoneType {
+writeFlat(LongTimestampWithTimeZone value, @FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
+writeBlockFlat(@BlockPosition Fixed12Block block, @BlockIndex int position, @FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
+equalOperator(@FlatFixed byte[] leftFixedSizeSlice, @FlatFixedOffset int leftFixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset, @BlockPosition Fixed12Block rightBlock, @BlockIndex int rightPosition)
+xxHash64Operator(@FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
}
class LongDecimalType {
+writeFlat(Int128 value, @FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
+writeBlockToFlat(@BlockPosition Int128ArrayBlock block, @BlockIndex int position, @FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
+equalOperator(@FlatFixed byte[] leftFixedSizeSlice, @FlatFixedOffset int leftFixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset, @BlockPosition Int128ArrayBlock rightBlock, @BlockIndex int rightPosition)
+xxHash64Operator(@FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
}
class IpAddressType {
+writeFlat(Slice value, @FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
+equalOperator(@FlatFixed byte[] leftFixedSizeSlice, @FlatFixedOffset int leftFixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset, @BlockPosition Int128ArrayBlock rightBlock, @BlockIndex int rightPosition)
+xxHash64Operator(@FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
}
class UuidType {
+writeFlat(Slice sourceSlice, @FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
+equalOperator(@FlatFixed byte[] leftFixedSizeSlice, @FlatFixedOffset int leftFixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset, @BlockPosition Int128ArrayBlock rightBlock, @BlockIndex int rightPosition)
+xxHash64Operator(@FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
}
class ShortDecimalType {
+writeFlat(long value, @FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
+equalOperator(@FlatFixed byte[] leftFixedSizeSlice, @FlatFixedOffset int leftFixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset, @BlockPosition LongArrayBlock rightBlock, @BlockIndex int rightPosition)
}
class AbstractIntType {
+writeFlat(long value, @FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
}
class AbstractLongType {
+writeFlat(long value, @FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
}
class BooleanType {
+writeFlat(boolean value, @FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
}
class DoubleType {
+writeFlat(double value, @FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
}
class RealType {
+writeFlat(long value, @FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
}
class ShortTimeWithTimeZoneType {
+writeFlat(long value, @FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
}
class ShortTimestampType {
+writeFlat(long value, @FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
}
class TimeType {
+writeFlat(long value, @FlatFixed byte[] fixedSizeSlice, @FlatFixedOffset int fixedSizeOffset, @FlatVariableWidth byte[] unusedVariableSizeSlice, @FlatVariableOffset int unusedVariableSizeOffset)
}
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
49f7b91 to
091c4e8
Compare
091c4e8 to
2ae4c41
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hey there - I've reviewed your changes - here's some feedback:
- There’s a lot of repeated flat-block operator boilerplate across types—consider refactoring common logic into a shared helper or code generator to reduce duplication and maintenance overhead.
- Double-check that each fixed-width type has a consistent set of EQUAL, HASH_CODE, and XX_HASH_64 flat implementations so you don’t end up with gaps in operator support.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- There’s a lot of repeated flat-block operator boilerplate across types—consider refactoring common logic into a shared helper or code generator to reduce duplication and maintenance overhead.
- Double-check that each fixed-width type has a consistent set of EQUAL, HASH_CODE, and XX_HASH_64 flat implementations so you don’t end up with gaps in operator support.Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
8b7b781 to
c273385
Compare
|
Started benchmark workflow for this PR with test type =
|
|
@pettyjamesm running benchmarks now :) |
|
Started benchmark workflow for this PR with test type =
|
Description
Adds equals operator implementations for various fixed width types to directly check block position vs flat representations for equality. Also adds xxhash64 operator implementations that directly hash the flat representation as well. Previously, these types had synthesized equals and xxhash operator implementations that would read the flat and block implementations into on-stack representations and compare (or hash) those which often involved extra ephemeral object creations.
Also adds a slew of parameter annotations for operator methods working on flat types. The missing annotations caused no issue, but adding them clarifies the intent and usage.
Release notes
(x) This is not user-visible or is docs only, and no release notes are required.
( ) Release notes are required. Please propose a release note for me.
( ) Release notes are required, with the following suggested text:
Summary by Sourcery
Add direct equals operator implementations for fixed-width SPI types and annotate flat-type operator parameters for clearer intent
Enhancements:
Summary by Sourcery
Implement direct scalar operators for fixed-width SPI types to compare and hash flat and block representations without creating temporary objects, and add flat-type parameter annotations for clearer intent.
New Features:
Enhancements: