This PR adds 2 autonomous test suites for use with Antithesis: `bank-
test` and `stress-composer`. It also modifies the existing
`limbo_stress` test to run as a singleton and modifies other Antithesis-
related configuration files.
**bank-test**
- `first_setup.py`
- initializes a DB table with columns accounts and balance
- generates random balances for each account
- stores initial state of the table
- `parallel_driver_generate_transaction.py`
- selects 2 accounts from the table as sender and receiver
- generates a random value which is subtracted from sender and added
to receiver
- `anytime/eventually/finally_validate.py`
- checks that sum of initial balances == sum of current balances
**stress-composer**
- Breaks `limbo_stress` into component parts
- `first_setup.py`
- creates up to 10 tables with up to 10 columns
- stores table details in a separate db
- `parallel_driver_insert.py`
- randomly generates and executes up to 100 insert statements into a
single table using random values derived from the table details
- `parallel_driver_update.py`
- randomly generates and executes up to 100 updates into a single
table using random values derived from the table details
- `parallel_driver_delete.py`
- randomly generates and executes up to 100 deletes from a single
table using random values derived from the table details
Closes#1401
basically serialtype got slower in #1398, maybe because of the wasted
space of `enum SerialType` being 16 bytes, so i've now refactored
`SerialType` to be a transparent newtype wrapper over `u64` and
introduced a separate `SerialTypeKind` enum
at least on my machine the perf regression was nullified, if not even a
bit better
Reviewed-by: Pere Diaz Bou <pere-altea@homail.com>
Closes#1399
1) Fix a bug where cli pretty mode would not print pragma results;
2) Add ability to read page_size using PRAGMA page_size;
Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com>
Closes#1394
This avoids redundant `IsNull` instructions during index seeks if the
seek key columns are primary keys of other tables, which they often are.
Reviewed-by: Preston Thorpe (@PThorpe92)
Closes#1388
### Summary
- Sqlite compatible string to float conversion
- Accompanied with the new `cast_real` fuzz target
- `NonNan` wrapper type over `f64`
- Now we can guarantee that operations that can make result in a NaN
need to be handled
- `Numeric` and `NullableInteger` types that encapsulate all numeric
and bitwise operations
- This is now guaranteed to be 100% compatible with sqlite with the
`expression` fuzz target (with the exception of the commented out
operation that will be implemented in a later PR)
One thing that might be reworked here is the heavy use of traits and
operator overloading, but looks reasonable to me.
Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com>
Closes#1386
This PR adds a python script that uses the `TestLimboShell` setup to run
some semi naive benchmarks/comparisons against `io_uring` and `syscall`
IO back-ends.
### Usage:
```sh
make bench-vfs SQL="insert into products (name, price) values ('testing', randomblob(1024*4));" N=50
```
The script will execute the given `SQL` `N` times with each back-end,
get the average/mean and display them.

😬
Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com>
Closes#1377
I was reading through the `translate_expr` function and `COMPAT.md` to
see what was not implemented yet. I saw that `Expr::Between` was marked
as a `todo!` so I set trying to implement it only to find that it was
being rewritten in the optimizer haha. This PR just adjusts the docs and
add an `unreachable` in the appropriate locations.
Closes#1378