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