Pekka Enberg
c4e3cce8a2
Introduce Select struct
...
This introduces an intermediate `Select` struct, which hopefully makes
the codegen a bit simpler by transforming the complext AST to something
more straight-forward.
2024-07-03 22:09:21 +03:00
Pekka Enberg
883e494ac5
Don't import AST types directly
...
Instead, use the `ast::<type>` qualifier in the code to make it more
explicit where we're dealing with AST and where we're dealing with our
own data types. Paves the way for a `Select` struct.
2024-07-03 20:23:55 +03:00
Pekka Enberg
f9647a58d3
Use Vec::with_capacity() in analyze_columns()
2024-07-03 16:25:00 +03:00
Pekka Enberg
400c5210b2
Remove unreachable patterns
2024-07-03 11:41:31 +03:00
Pekka Enberg
4474d067fe
Code cleanups to make Clippy happy
2024-07-03 11:39:29 +03:00
Pekka Enberg
307fed0848
Format source code with cargo fmt
2024-07-03 11:38:12 +03:00
Pekka Enberg
32f72e91fe
Merge pull request #60 from pereman2/agg-uppercase
...
core: fix agg function uppercase parsing
2024-07-03 11:37:48 +03:00
Pere Diaz Bou
9242e5c671
core: fix agg function uppercase parsing
...
Signed-off-by: Pere Diaz Bou <pere-altea@hotmail.com >
2024-07-03 08:56:30 +02:00
Pere Diaz Bou
56badf2513
core: fix initialization of sum vdbe
...
Signed-off-by: Pere Diaz Bou <pere-altea@hotmail.com >
2024-07-01 20:30:45 +02:00
Pere Diaz Bou
271397b214
core: sum aggregation
...
```
Welcome to Limbo SQL shell!
> select sum(age), avg(age) from users;
504915|50.4915
>
fedora :: ~/fun/limbo » sqlite3 database.db
SQLite version 3.40.1 2022-12-28 14:03:47
Enter ".help" for usage hints.
sqlite> select sum(age), avg(age) from users;
504915|50.4915
```
Signed-off-by: Pere Diaz Bou <pere-altea@hotmail.com >
2024-07-01 20:19:50 +02:00
Pekka Enberg
5fbcdbb424
Fix SELECT .. LIMIT not respecting the limit
...
Fix the codegen to emit DecrJumpZero in the right place.
2024-06-30 19:11:45 +03:00
Pere Diaz Bou
123f6353f7
core: rename ColumnAggregationInfo -> ColumnInfo
...
Signed-off-by: Pere Diaz Bou <pere-altea@hotmail.com >
2024-06-30 12:48:19 +02:00
Pere Diaz Bou
1cd6101b44
core: add some comments explaining analyze_column
...
Signed-off-by: Pere Diaz Bou <pere-altea@hotmail.com >
2024-06-30 12:48:19 +02:00
Pere Diaz Bou
18c2f5f8d2
core: clean up warnings
...
Signed-off-by: Pere Diaz Bou <pere-altea@hotmail.com >
2024-06-30 12:48:19 +02:00
Pere Diaz Bou
c7d40806fd
core: Avg aggregation function
...
Simple implementation for aggregation functions. The code added is
purposely so that we can add things like `CEILING(avg(n))` in the future. Aggregation function
impose a higher level of complexity that requires us to plan ahead
several things:
* simple avg: `select avg(id) from users`
* nested avg: `select ceiling(avg(id)) from users`
* avg with other columns: `select ceiling(avg(id)), * from users` (yes,
this is valid sqllite). For now I'm nullifying extra columns for
simplicity.
* avg with other agg functions: `select avg(id), sum(id) from users`.
This should be supported.
* At last -- Order By is a painful enough case to treat alone (not done
in this pr)
Signed-off-by: Pere Diaz Bou <pere-altea@hotmail.com >
2024-06-30 12:48:19 +02:00
Pekka Enberg
1d4850df37
Fix invalid database path
2024-06-29 17:36:36 +03:00
Pekka Enberg
cc101b1b00
Use larger and more realistic database for testing
2024-06-29 10:03:11 +03:00
Pekka Enberg
4d8e0f1214
core: Clean up translate.rs by moving update_pragma()
...
Makes the code flow read better from top to bottom.
2024-06-28 08:44:27 +03:00
Pekka Enberg
2684341bac
Initial pass on deterministic simulator
...
The simulator does not do much, but does discover failures on Linux with
io_uring, though, so it's a start.
2024-06-27 18:32:04 +03:00
Pekka Enberg
df230dc830
Fix DecrJumpZero usage in translate_select()
...
SQLite special-cases `LIMIT 0` by emitting an explicit `Goto` to avoid
executing any `ResultRow` statements. We, however, hacked around this in
DecrJumpZero but also the placement of the generated instruction.
Let's follow SQLite codegen here. We still need to fix `LIMIT 0`,
though.
2024-06-24 21:43:19 +03:00
Pekka Enberg
6290c8167d
Unify SELECT .. LIMIT handling in translate_select()
...
Working towards a saner translate_select(), let's unify `SELECT ..
LIMIT` handling across different types of select statements.
2024-06-24 21:36:34 +03:00
Pekka Enberg
bdbbbda84f
Extract translate_column() function
2024-06-22 09:44:35 +03:00
Pekka Enberg
828fb813a8
core: Fix codegen for rowid alias
...
We should emit `Column` bytecode for a primary key, unless it is an alias for a rowid.
2024-06-21 13:10:21 +03:00
Pekka Enberg
8d4d2f32ee
core: Fix INTEGER data type detection
2024-06-21 13:09:43 +03:00
Pere Diaz Bou
427103b199
core,wasm: add missing write procedure to wasm
2024-06-19 20:54:55 +02:00
Pere Diaz Bou
932ae7bf3f
core: update pragma in transalte
2024-06-19 20:37:17 +02:00
Pere Diaz Bou
7e03cc70d0
core: add minimum cache_size
2024-06-19 20:37:17 +02:00
Pere Diaz Bou
1884aab3b8
core: resize page cache
...
Abstract page cache with PageCache so that we can call resize inside
refcell
2024-06-19 20:37:17 +02:00
Pere Diaz Bou
53c348402a
core: parse unary and write to disk
2024-06-19 20:37:15 +02:00
Pere Diaz Bou
d795a7a3ba
core: introduce pseudo program with pragma
...
Introduced pragma statement parsing and update in memory of default page cache size.
There are some more "improvements" to the print insn procedure — I couldn't decide what was the preferred way in rust to do printing on different int types so I went with the stupidest I could think of at the moment.
2024-06-19 20:32:21 +02:00
Pere Diaz Bou
377073e158
core: I/O write path
2024-06-19 21:26:40 +03:00
Pekka Enberg
ba1ed2ec09
Run I/O loop in benchmarks
...
Fixes #50
2024-06-08 08:43:15 +03:00
Pekka Enberg
a3c4efc13a
Random code cleanups
2024-06-08 08:38:11 +03:00
Pekka Enberg
3f722d5827
core: Extract make_record() function
2024-05-09 07:48:49 -03:00
Pekka Enberg
3afc03cc65
Fix String8 opcode handling
2024-05-08 15:51:10 -03:00
Pekka Enberg
5c0f324b3c
Improve EXPLAIN output
2024-05-08 14:22:38 -03:00
Pekka Enberg
7232683dfe
core: Fix benchmark
2024-05-08 11:13:29 -03:00
Pekka Enberg
042e5476f1
Fix source formatting with cargo fmt
2024-05-08 07:18:22 -03:00
Pekka Enberg
08165fc34e
core: SELECT <string> support
2024-05-08 07:18:22 -03:00
Pekka Enberg
707cc53911
Explanation for pager interface
2024-05-07 07:50:42 -03:00
Pekka Enberg
40e5d58cea
Fix RewindAwait branching when cursor is empty
...
Even if we have a page, the cursor can still be empty if there are no
records.
2024-05-07 06:46:03 -03:00
Pekka Enberg
5ebf51ae5a
Add tracing to prepare() and query()
2024-05-07 06:38:13 -03:00
Pekka Enberg
a447ea0f49
Dynamic cursor ID allocation
...
With sorter, for example, we need more cursors per program.
2024-03-29 09:26:18 +02:00
Pekka Enberg
454b1047ce
Simplify translate_select()
2024-03-29 09:22:02 +02:00
Pekka Enberg
a9eb6918d3
SELECT expression support
2024-03-28 19:41:21 +02:00
Pekka Enberg
3f17ac0e17
Simplify code
2024-03-28 19:32:38 +02:00
Pekka Enberg
9a73ded4fa
Add a Cursor trait and use it
...
We need an abstract cursor trait to implement a sorter, for example.
2024-03-28 15:01:52 +02:00
Pekka Enberg
1dd33bedcd
Remove commented out code
2024-03-28 14:33:59 +02:00
Pekka Enberg
88f335db16
Fix SQL identifiers to be case insensitive
...
SQLite seems to treat everything as case insensitive so let's do that
too.
Fixes #37
2024-03-27 21:00:47 +02:00
Pekka Enberg
81f003d29f
Extract create_table() function
2024-03-27 20:44:52 +02:00