Commit Graph

199 Commits

Author SHA1 Message Date
Piotr Jastrzebski
c01f39aefb Make it possible to get row values as &str
This allows to avoid some unneeded copies and allocations.

Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 18:51:47 +02:00
Piotr Jastrzebski
4a9e0dfc4d Add tests for primary key
Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 17:55:04 +02:00
Piotr Jastrzebski
77f50e7f7c Stop ignoring test_column_is_rowid_alias_single_integer_separate_primary_key_definition
Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 17:55:04 +02:00
Piotr Jastrzebski
861716f343 Use BTreeTable::primary_key_column_names in column_is_rowid_alias
Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 17:55:04 +02:00
Piotr Jastrzebski
f98c62bfb7 Setup BTreeTable::primary_key_column_names correctly
Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 17:54:47 +02:00
Piotr Jastrzebski
6bf9fbb0de Add primary_key_column_names to BTreeTable
Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 17:20:49 +02:00
Piotr Jastrzebski
828c4ce459 Add tests for BTreeTable::column_is_rowid_alias
Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 15:14:38 +02:00
Piotr Jastrzebski
73e037afa2 Add tests for hes_rowid field
Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 14:52:20 +02:00
Piotr Jastrzebski
50ecea0c86 Use has_rowid in column_is_rowid_alias
Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 14:52:20 +02:00
Piotr Jastrzebski
2aa0a92955 Setup has_rowid correctly for BTreeTable
Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 14:52:00 +02:00
Piotr Jastrzebski
9ddb0befc4 Add has_rowid field to BTreeTable
Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 14:32:28 +02:00
Pekka Enberg
5deea70a77 Merge pull request #92 from haaawk/to_sql
Simplify BTreeTable::to_sql
2024-07-07 14:20:02 +03:00
Pekka Enberg
b8165f52b1 Merge pull request #90 from crrow/topic/fix-error-handling-for-invalid-file
Replace unwrap() in PageIO.get() with proper error handling
2024-07-07 14:19:47 +03:00
Piotr Jastrzebski
708cae99b8 Simplify BTreeTable::to_sql
Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 13:15:04 +02:00
Ryan Tan
9c2988e0ed fix: replace unwrap() with ? 2024-07-07 19:12:48 +08:00
Piotr Jastrzebski
81cf0430de Improve normalize_ident
Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 13:05:00 +02:00
Pekka Enberg
f1206ef29d Merge pull request #88 from haaawk/tests
Mark test code cfg(test) instead of allow(dead_code)
2024-07-07 14:00:00 +03:00
Pekka Enberg
ae92e2f7e7 Merge pull request #87 from haaawk/remove_allocation
Remove unneded allocation
2024-07-07 13:59:37 +03:00
Piotr Jastrzebski
8ce1c4a1ab Mark test code cfg(test) instead of allow(dead_code)
Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 12:59:06 +02:00
Pekka Enberg
30ec86a81e Add sorter utility functions and opcodes
This adds basic in-memory sorting utility functions, similar to SQLite's
src/vdbesort.c. We need to improve this later with external sorting so
to support large data sets.

This also adds sorting functionality to the VDBE. Note that none of this
is wired to SQL translation yet so it's unused for now.
2024-07-07 13:56:55 +03:00
Piotr Jastrzebski
5eea420994 Simplify normalize_ident
Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 12:46:09 +02:00
Piotr Jastrzebski
83c7e7bd95 Remove unneeded allocation
Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 12:45:49 +02:00
Pekka Enberg
dac8f4dcba Format source code with cargo fmt 2024-07-07 12:28:02 +03:00
Pekka Enberg
519e6b141f Add Table::column_is_rowid_alias() helper
We need to check for rowid alias elsewhere too with ORDER BY, for
example, so let's extract a small helper for that.
2024-07-07 12:27:08 +03:00
Piotr Jastrzebski
fdbd010d89 Remove incorrect Column::is_rowid_alias
Fixes #83

Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 10:06:45 +02:00
Piotr Jastrzebski
3b3ea9a54f Derive Clone for Buffer
Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 09:28:58 +02:00
Piotr Jastrzebski
1004215853 Remove submit from LinuxIO write
Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 09:24:44 +02:00
Piotr Jastrzebski
7b6c6ef9f1 Remove unneeded clone in add_table
Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 08:47:47 +02:00
Pekka Enberg
e54e1e661f Merge pull request #75 from heyrutvik/wait-for-completion
wait for the read completion
2024-07-06 15:37:33 +03:00
Piotr Sarna
5bd3d283d1 translate: special case for LIMIT 0
Fixes #55
2024-07-06 10:58:19 +02:00
Rutvik Patel
fd9af2739e wait for the read completion
The submit_and_wait command waits for `n` completion events.
We were providing an incorrect argument, which caused the issue.
2024-07-06 13:48:58 +05:30
Pekka Enberg
c7a67a1bf4 Fix ResultRow operands
Fix ResultRow operands to follow SQLite bytecode format for consistency.
2024-07-05 18:13:06 +03:00
Pekka Enberg
2f3c3b5404 Clean up insn_to_str()
The SQLite documentation explicitly says that P1, P2, and P3 are 32-bit
signed integers. P4 is a value, and P5 is a 16-bit unsigned integer.
Although we use different types for operands, the `EXPLAIN` output
should be compatible with SQLite and, therefore, use those types.
2024-07-05 11:39:21 +03:00
Pekka Enberg
4a089e6e4e Merge pull request #67 from pereman2/fix-float-parse 2024-07-05 08:43:11 +03:00
Pere Diaz Bou
ae524a07e2 core: Insn::Real support
Signed-off-by: Pere Diaz Bou <pere-altea@hotmail.com>
2024-07-04 17:19:05 +02:00
Pere Diaz Bou
6bebfccd99 core: fix evaluating columns a part from agg
Signed-off-by: Pere Diaz Bou <pere-altea@hotmail.com>
2024-07-04 17:02:54 +02:00
Pekka Enberg
f4369c873f Simplify AggFinal emission in translate_select() 2024-07-04 12:21:27 +03:00
Pekka Enberg
e988ca0129 Consolidate AggregateFunction and AggFunc enums 2024-07-04 12:19:17 +03:00
Pekka Enberg
0f9f178746 Emit DecrJumpZero for aggregations too
SQLite emits a DecrJumpZero instruction after ResultRow even when there
are aggregation functions:

```
sqlite> EXPLAIN SELECT avg(age) FROM users LIMIT 1;
addr  opcode         p1    p2    p3    p4             p5  comment
----  -------------  ----  ----  ----  -------------  --  -------------
0     Init           0     13    0                    0   Start at 13
1     Integer        1     1     0                    0   r[1]=1; LIMIT counter
2     Null           0     2     3                    0   r[2..3]=NULL
3     OpenRead       0     2     0     10             0   root=2 iDb=0; users
4     Rewind         0     8     0                    0
5       Column         0     9     4                    0   r[4]= cursor 0 column 9
6       AggStep        0     4     3     avg(1)         1   accum=r[3] step(r[4])
7     Next           0     5     0                    1
8     AggFinal       3     1     0     avg(1)         0   accum=r[3] N=1
9     Copy           3     5     0                    0   r[5]=r[3]
10    ResultRow      5     1     0                    0   output=r[5]
11    DecrJumpZero   1     12    0                    0   if (--r[1])==0 goto 12
12    Halt           0     0     0                    0
13    Transaction    0     0     1     0              1   usesStmtJournal=0
14    Goto           0     1     0                    0
```

This does not seem to have any user-visible difference in semantics
because we always jump to Halt regardless of the limit. Howwever, to
keep generated code consistent with SQLite and avoid special-case paths,
let's just emit the instruction.
2024-07-04 11:55:10 +03:00
Pekka Enberg
e3031c2594 Simplify translate_select() 2024-07-04 11:37:34 +03:00
Pekka Enberg
3b297dd05b Fix analyze_column() to use RustDoc format 2024-07-04 11:25:37 +03:00
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