Pekka Enberg
5e47dfabaf
Drop Select::from member field
...
It's not used anywhere.
2024-07-10 15:17:04 +03:00
Pekka Enberg
a46912c355
Merge pull request #113 from penberg/kill-select-context
...
Fold SelectContext to Select
2024-07-10 15:13:37 +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
Pekka Enberg
5b36ca12ad
Merge pull request #111 from Ramkarthik/main
2024-07-09 22:54:43 +03:00
Ramkarthik Krishnamurthy
ae68c96635
Indent EXPLAIN output like SQLite
2024-07-10 00:01:52 +05:30
Pekka Enberg
fee82542d4
Merge pull request #109 from pereman2/refactor-sqlite3WhereBegin
2024-07-09 20:16:33 +03:00
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
90a4fc6bb8
test: cross-join-specific-columns
...
Signed-off-by: Pere Diaz Bou <pere-altea@hotmail.com >
2024-07-09 18:08:16 +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
e0431fdde1
testing: update testing with products table and cross join test
...
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
Pekka Enberg
c5272afdd6
Add JSON functions to sqlite-compat.md
2024-07-09 12:28:31 +03:00
Pekka Enberg
704a9c214e
Update compatibility doc and changelog
2024-07-09 12:17:55 +03:00
Pekka Enberg
01ed0f8257
Merge pull request #107 from ishanjain28/iouring_direct
2024-07-09 09:19:11 +03:00
Ishan Jain
c171b63ec2
use O_DIRECT for file read operations
2024-07-09 11:41:20 +05:30
Pekka Enberg
32df171786
Merge pull request #106 from mazchew/add-min-aggregate-function
2024-07-08 22:21:20 +03:00
Pekka Enberg
3c76a68a6d
Update compatibility matrix and changelog
2024-07-08 22:18:12 +03:00
mazchew
fc0c3d539a
add min aggregate function
...
add changes for all.test
2024-07-09 03:14:02 +08:00
Pekka Enberg
7bc83e5a0f
Merge pull request #105 from mazchew/add-max-aggregate-function
2024-07-08 21:59:59 +03:00
mazchew
3f339d07d3
add max aggregate function
2024-07-09 02:45:34 +08:00
Pekka Enberg
e5d55398db
Merge pull request #104 from KunalSin9h/dot-commands
2024-07-08 20:51:50 +03:00
Kunal Singh
46cd1f067b
fix: missing dot command description in unknown command message
2024-07-08 23:19:21 +05:30
Pekka Enberg
3a9a54e8d2
Merge pull request #103 from KunalSin9h/clippy
2024-07-08 20:37:33 +03:00
Kunal Singh
00c26286ce
fix: lint warnings
2024-07-08 22:43:11 +05:30
Pekka Enberg
0e60f077ca
Merge pull request #102 from KunalSin9h/empty-args
...
fix: unhanded empty args in aggregate function
2024-07-08 17:37:30 +03:00
Kunal Singh
fab8f1777a
fix: unhandled empty args in aggregate function
2024-07-08 19:13:53 +05:30
Pekka Enberg
57cdabcc99
Merge pull request #100 from vivek378521/add-agg-fn-count
2024-07-08 11:53:30 +03:00
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
Pekka Enberg
b7566ae720
Add opcodes to SQLite compatibility doc
2024-07-08 09:13:37 +03:00
Pekka Enberg
910b3bc84c
Merge pull request #99 from vivek378521/improve-makefile
2024-07-08 08:58:13 +03:00
Pekka Enberg
5be71e9b9b
Merge pull request #98 from haaawk/remove_copies
2024-07-07 20:07:10 +03:00
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
Pekka Enberg
7818a97ac9
Merge pull request #97 from haaawk/primary_key
...
Fix primary key handling in BTreeTable
2024-07-07 19:14:15 +03: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
Pekka Enberg
caf888151c
Merge pull request #95 from haaawk/schema
2024-07-07 16:18:21 +03: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
541e966834
Add SELECT ... LIMIT to changelog
2024-07-07 14:28:36 +03:00