Bennett Clement
30e4a70d07
ignore wasm compilation target
2024-07-13 15:17:18 +08:00
Bennett Clement
26152e07e5
Use kqueue for Darwin IO
2024-07-13 09:44:03 +08:00
김선우
6aabd919da
Fix typo
2024-07-12 23:19:44 +09:00
Pekka Enberg
f1bca597cb
Merge pull request #121 from jussisaurio/where-clauses
...
Basic where clause support
2024-07-12 08:21:38 +03:00
jussisaurio
1b0aa568a4
Basic where clause support
2024-07-12 00:26:32 +03:00
Bennett Clement
e377e09498
Fix avg(), total(), count() default value on empty set
2024-07-12 00:20:44 +08:00
Bennett Clement
8a9eb74f9b
Implement total() aggregation function
...
- Returns 0.0 when called on non integer / non float columns
- Always returns floating point number
- fix: default for sum() should be NULL when there is no non-NULL row
per docs
2024-07-11 23:40:55 +08:00
Ramkarthik Krishnamurthy
f038c1c7d2
Indent only the opcode value
2024-07-11 16:19:23 +05:30
Pekka Enberg
d8af1aa73b
Format source code with cargo fmt
2024-07-11 10:43:34 +03:00
Pekka Enberg
d8078d5e19
Simplify LIMIT 0 handling in translate_select()
...
It's a special-case so let's make it special like SQLite does.
Simplifies the logic in `translate_select()` quite a bit.
2024-07-11 09:42:24 +03:00
Pekka Enberg
46e34daccd
Merge pull request #115 from pereman2/real-affinity
2024-07-11 08:11:18 +03:00
Pere Diaz Bou
538d624770
core: apply Real affinity on columns stored as int
...
Values in sqlite3, as expected, can be stored in different formats to
optimize disk usage. In this case, a 79.0 float will be transformed to a
u8.
sqlite3 deals with this by adding a RealAffinity op after each column
that might need it. Therefore, in this pr we do exactly that :).
Signed-off-by: Pere Diaz Bou <pere-altea@hotmail.com >
2024-07-10 21:21:49 +02:00
Pekka Enberg
5e47dfabaf
Drop Select::from member field
...
It's not used anywhere.
2024-07-10 15:17:04 +03:00
Pekka Enberg
0316385150
Fold SelectContext to Select
...
We can use Select to keep track of loops and stuff. Having a separate
SelectContext just means we need to pass around more objects to
functions.
2024-07-10 15:09:30 +03:00
Pekka Enberg
f2b1971def
Simplify AST type paths
...
The `sqlite3_parser` prefix is redundant.
2024-07-10 11:08:07 +03:00
Ramkarthik Krishnamurthy
ae68c96635
Indent EXPLAIN output like SQLite
2024-07-10 00:01:52 +05:30
Pere Diaz Bou
e557b7b9ee
core: add comment for src_tables
...
Signed-off-by: Pere Diaz Bou <pere-altea@hotmail.com >
2024-07-09 18:48:26 +02:00
Pere Diaz Bou
61d0f877e3
core: create list of src tables
...
Instead of having divided "from table" and "join tables", we merge them
in to a list of `src_tables`.
Signed-off-by: Pere Diaz Bou <pere-altea@hotmail.com >
2024-07-09 18:46:35 +02:00
Pere Diaz Bou
d41319a837
core: remove hash for Table
...
Signed-off-by: Pere Diaz Bou <pere-altea@hotmail.com >
2024-07-09 18:14:32 +02:00
Pere Diaz Bou
46592e7b34
core: fix translate_expr args from new agg functions
...
Signed-off-by: Pere Diaz Bou <pere-altea@hotmail.com >
2024-07-09 18:10:18 +02:00
Pere Diaz Bou
110df3cff1
core: fix resolve table name from join
...
Signed-off-by: Pere Diaz Bou <pere-altea@hotmail.com >
2024-07-09 18:08:16 +02:00
Pere Diaz Bou
0b0885325c
core: refactor generation of table row read
...
In sqlite3 generating the loop to read multiple joined tables follows
the pattern:
```c
sqlite3WhereBegin();
sqlite3WhereEnd();
```
and this generates:
```
sqlite> explain select * from users, products;
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 23 0 0 Start at 23
1 OpenRead 0 2 0 10 0 root=2 iDb=0; users
2 OpenRead 1 3 0 3 0 root=3 iDb=0; products
3 Rewind 0 22 0 0
4 Rewind 1 22 0 0
5 Rowid 0 1 0 0 r[1]=users.rowid
6 Column 0 1 2 0 r[2]= cursor 0 column 1
7 Column 0 2 3 0 r[3]= cursor 0 column 2
8 Column 0 3 4 0 r[4]= cursor 0 column 3
9 Column 0 4 5 0 r[5]= cursor 0 column 4
10 Column 0 5 6 0 r[6]= cursor 0 column 5
11 Column 0 6 7 0 r[7]= cursor 0 column 6
12 Column 0 7 8 0 r[8]= cursor 0 column 7
13 Column 0 8 9 0 r[9]= cursor 0 column 8
14 Column 0 9 10 0 r[10]= cursor 0 column 9
15 Rowid 1 11 0 0 r[11]=products.rowid
16 Column 1 1 12 0 r[12]= cursor 1 column 1
17 Column 1 2 13 0 r[13]= cursor 1 column 2
18 RealAffinity 13 0 0 0
19 ResultRow 1 13 0 0 output=r[1..13]
20 Next 1 5 0 1
21 Next 0 4 0 1
22 Halt 0 0 0 0
23 Transaction 0 0 2 0 1 usesStmtJournal=0
24 Goto 0 1 0 0
```
`sqlite3WhereBegin()` as the name represents, mainly does stuff with
`WHERE` expressions + loop generation. This is why I decided to change
the name to `translate_tables_begin` to try improve the naming.
In our case:
```rust
translate_table_open_cursor(program, &mut context, select.from.as_ref().unwrap());
translate_table_open_loop(program, &mut context, loop_index);
```
translates into:
```sql
> explain select * from users, products;
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------
0 Init 0 28 0 0 Start at 28
1 OpenReadAsync 0 2 0 0 root=2
2 OpenReadAwait 0 0 0 0
3 OpenReadAsync 1 3 0 0 root=3
4 OpenReadAwait 0 0 0 0
5 RewindAsync 0 0 0 0
6 RewindAwait 0 27 0 0
7 RewindAsync 1 0 0 0
8 RewindAwait 1 25 0 0
9 RowId 0 0 0 0
10 Column 0 1 1 0 r[1]= cursor 0 column 1
11 Column 0 2 2 0 r[2]= cursor 0 column 2
12 Column 0 3 3 0 r[3]= cursor 0 column 3
13 Column 0 4 4 0 r[4]= cursor 0 column 4
14 Column 0 5 5 0 r[5]= cursor 0 column 5
15 Column 0 6 6 0 r[6]= cursor 0 column 6
16 Column 0 7 7 0 r[7]= cursor 0 column 7
17 Column 0 8 8 0 r[8]= cursor 0 column 8
18 Column 0 9 9 0 r[9]= cursor 0 column 9
19 RowId 1 10 0 0
20 Column 1 1 11 0 r[11]= cursor 1 column 1
21 Column 1 2 12 0 r[12]= cursor 1 column 2
22 ResultRow 0 13 0 0 output=r[0..13]
23 NextAsync 1 0 0 0
24 NextAwait 1 8 0 0
25 NextAsync 0 0 0 0
26 NextAwait 0 6 0 0
27 Halt 0 0 0 0
28 Transaction 0 0 0 0
29 Goto 0 1 0 0
```
This works on as many joined tables but... it is ready to extend for
further join operations.
Signed-off-by: Pere Diaz Bou <pere-altea@hotmail.com >
2024-07-09 18:08:16 +02:00
Ishan Jain
c171b63ec2
use O_DIRECT for file read operations
2024-07-09 11:41:20 +05:30
mazchew
fc0c3d539a
add min aggregate function
...
add changes for all.test
2024-07-09 03:14:02 +08:00
mazchew
3f339d07d3
add max aggregate function
2024-07-09 02:45:34 +08:00
Kunal Singh
00c26286ce
fix: lint warnings
2024-07-08 22:43:11 +05:30
Kunal Singh
fab8f1777a
fix: unhandled empty args in aggregate function
2024-07-08 19:13:53 +05:30
Vivek Khatri
fe7c1b5b1d
Merge branch 'main' into add-agg-fn-count
2024-07-08 13:58:14 +05:30
Vivek
94358dc665
Add aggregate fn: count
2024-07-08 13:55:06 +05:30
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