-
Notifications
You must be signed in to change notification settings - Fork 2.8k
HUGEINT type + expanded unittests/interpreted benchmarking #819
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
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
…erformance reasons
…NT to DOUBLE and VARCHAR
… operator overloading to avoid having to specialize functions
…gin converting some storage tests to sqllogictests
…onnection is destroyed after db is destroyed with temporary tables still active
…ts wrapper class that also supports hugeint_t
…nt exponents are always type double
…or hugeint->string conversion
…rors from being thrown
…-> string conversion for large numbers
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR implements the HUGEINT/INT128 type. This type allows for storing exact integer values between
-170141183460469231731687303715884105727and170141183460469231731687303715884105727(i.e. pretty big). The type is supported everywhere that other numbers are supported (i.e. you can store it in tables, perform arithmetic, perform certain functions/ops, join on it, etc). Internally it is stored as follows:The value of a hugeint is equivalent to
upper * 2^64 + lower, i.e. the value1is represented aslower: 1, upper: 0and the value-1is represented asupper: -1, lower: 2^64-1.The primary purpose of the HUGEINT type is overflow prevention (and in the future, larger decimal support). Currently the HUGEINT type can either be manually created, but is also created by performing
SUMonINT32orINT64columns.Persistent Storage Support for SQLLogicTests
Besides the HUGEINT package, this PR also includes basic storage support for the sqllogictests. You can now load a database file on disk using the
loadcommand, e.g.load __TEST_DIR__/hugeint_storage_test.db. Databases can be reloaded (with forced checkpointing enabled) using therestartcommand. This allows most persistent storage tests to be written within the sqllogictests as well.Interpreted Benchmarks
This PR also includes basic support for interpreted benchmarks. They use a format that looks similar to the sqllogictests. Example below:
First the load query will be issued, after which the run query will be issued and verified against the result. Benchmark files should have the
.benchmarkextension and be located in thebenchmarkdirectory. They will automatically be found by the benchmark_runner, much like the unittests are.