Glauber Costa
f1df43633a
change type Display implementation to not show null
...
This is the behavior that things like pragma table_info seem to
expect.
2025-01-30 19:53:36 -05:00
Glauber Costa
69d3fbc797
keep track of notnull constraint on column creation
2025-01-30 17:04:12 -05:00
Glauber Costa
42f93e9bea
add default type to Column definition
2025-01-30 16:45:57 -05:00
Jussi Saurio
9f44d2a7ac
Remove unused Table::Index variant and unused Table methods
2025-01-11 17:07:30 +02:00
Jussi Saurio
9909539b9d
Store cursor type (table,index,pseudo,sorter) when allocating cursor
2025-01-11 17:04:16 +02:00
Jussi Saurio
1b61749c0f
feat/core/translate: create automatic index in CREATE TABLE when necessary
2025-01-04 13:54:44 +02:00
Jussi Saurio
2066475e03
feat: subqueries in FROM clause
2024-12-31 14:18:29 +02:00
adamnemecek
97647ff056
Clean up code to use Self
...
Closes #556
2024-12-29 10:07:38 +02:00
jussisaurio
961e57df94
Fix returning rowid instead of PK when PK is not a rowid alias
2024-12-14 15:51:08 +02:00
jussisaurio
cc902ed25d
GROUP BY and ORDER BY mostly work
2024-11-26 17:31:51 +02:00
jussisaurio
daf5863932
manual fixes based on clippy suggestions
2024-10-13 12:19:04 +03:00
jussisaurio
f02da18acd
index scan wip foo doesnt work yet
2024-10-05 18:25:04 +03:00
김선우
28884181be
Fix clippy
2024-09-15 16:23:27 +09:00
jussisaurio
b6e88ca883
cargo clippy --fix --allow-dirty && cargo fmt
2024-09-15 09:35:39 +03:00
jussisaurio
a108dea825
GROUP BY
2024-09-14 16:14:45 +03:00
Ajaya Agrawal
84a1d29586
fix
2024-09-03 12:20:38 +05:30
Ajaya Agrawal
dcc99148d2
fix
2024-09-03 00:46:53 +05:30
Ajaya Agrawal
cb275feaa2
Index lookup support
...
Adds support for parsing index structure
2024-09-03 00:46:53 +05:30
gandeevanr
2b86f89d8d
use the correct integer PK column idx as the row-id alias
2024-08-04 18:53:54 -07:00
Pere Diaz Bou
affe3443cc
core: vbde coroutine generation with rowid insert
2024-07-31 17:25:01 +02:00
Pekka Enberg
351242561d
Kill anyhow usage
...
Switch anyhow to explicit `LimboError` type using thiserror crate, which
lets us make error handling more structured.
2024-07-25 17:15:08 +03:00
jussisaurio
9eb68524e7
Upgrade sqlite3-parser #185
2024-07-24 14:05:39 +03:00
Bennett Clement
0bf0b41692
Use case insensitive lookup for table and column
2024-07-22 16:27:36 +08:00
Bennett Clement
4590c3cc7c
Support select <columns> for order by operation
2024-07-22 00:28:27 +08:00
Bennett Clement
2e0d4c6fdb
Implement basic ORDER BY
...
- Only SELECT * is supported
- Only ASC is supported
2024-07-22 00:28:00 +08:00
Bennett Clement
865b3a04e9
Implement orderby translation
2024-07-22 00:27:46 +08:00
jussisaurio
ea793e4126
Inner join, table aliases, qualified column names
2024-07-14 20:09:40 +03:00
Raminder Singh
e4a9c5ce6e
fix clippy warnings
2024-07-14 16:50:54 +05:30
Bennett Clement
d64733c0b9
Improve explain comments
...
- Resolve cursor ID to table name and get column name from index
- Since we change the type of BranchOffset to i64, add assertions in
Program.step() function
- opcode generation compatibility with sqlite: change register number to start from 1
- Improve Column,Rowid comment, Add DecrJumpZero comment, Fix Integer
comment
- Fix typos in code comments
2024-07-14 11:35:22 +08: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
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
Kunal Singh
00c26286ce
fix: lint warnings
2024-07-08 22:43:11 +05:30
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
Piotr Jastrzebski
708cae99b8
Simplify BTreeTable::to_sql
...
Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 13:15:04 +02: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
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
7b6c6ef9f1
Remove unneeded clone in add_table
...
Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 08:47:47 +02: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