Alex Miller
f7bb7f8dee
Fix typo and improve comment
2024-12-08 14:20:23 -08:00
Alex Miller
c2e3957d73
I misunderstood what a constant instruction was
2024-12-08 14:12:45 -08:00
Alex Miller
eb00226cfe
Add support for CASE expressions.
...
There's two forms of case:
CASE (WHEN [bool expr] THEN [value])+ (ELSE [value])? END
which checks a series of boolean conditions, and:
CASE expr (WHEN [expr] THEN [value})+ (ELSE [value])? END
Which checks a series of equality conditions.
This implements support for both. Note that the ELSE is optional, and
will be equivalent to `ELSE null` if not specified.
sqlite3 gives the implementation as:
sqlite> explain select case a WHEN a THEN b WHEN c THEN d ELSE 0 END from casetest;
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 16 0 0 Start at 16
1 OpenRead 0 3 0 4 0 root=3 iDb=0; casetest
2 Rewind 0 15 0 0
3 Column 0 0 2 0 r[2]= cursor 0 column 0
4 Column 0 0 3 0 r[3]= cursor 0 column 0
5 Ne 3 8 2 BINARY-8 83 if r[2]!=r[3] goto 8
6 Column 0 1 1 0 r[1]= cursor 0 column 1
7 Goto 0 13 0 0
8 Column 0 2 3 0 r[3]= cursor 0 column 2
9 Ne 3 12 2 BINARY-8 83 if r[2]!=r[3] goto 12
10 Column 0 3 1 0 r[1]= cursor 0 column 3
11 Goto 0 13 0 0
12 Integer 0 1 0 0 r[1]=0
13 ResultRow 1 1 0 0 output=r[1]
14 Next 0 3 0 1
15 Halt 0 0 0 0
16 Transaction 0 0 2 0 1 usesStmtJournal=0
17 Goto 0 1 0 0
and after this patch, limbo gives:
addr opcode p1 p2 p3 p4 p5 comment
---- ----------------- ---- ---- ---- ------------- -- -------
0 Init 0 18 0 0 Start at 18
1 OpenReadAsync 0 4 0 0 table=casetest, root=4
2 OpenReadAwait 0 0 0 0
3 RewindAsync 0 0 0 0
4 RewindAwait 0 17 0 0 Rewind table casetest
5 Column 0 0 2 0 r[2]=casetest.a
6 Column 0 0 3 0 r[3]=casetest.a
7 Ne 2 3 10 0 if r[2]!=r[3] goto 10
8 Column 0 1 1 0 r[1]=casetest.b
9 Goto 0 14 0 0
10 Column 0 2 3 0 r[3]=casetest.c
11 Ne 2 3 14 0 if r[2]!=r[3] goto 14
12 Column 0 3 1 0 r[1]=casetest.d
13 Goto 0 14 0 0
14 ResultRow 1 1 0 0 output=r[1]
15 NextAsync 0 0 0 0
16 NextAwait 0 5 0 0
17 Halt 0 0 0 0
18 Transaction 0 0 0 0
19 Integer 0 1 0 0 r[1]=0
20 Goto 0 1 0 0
And then as there's nowhere to annotate this new support in COMPAT.md, I
added a corresponding heading for SELECT expressions and what is/isn't
supported.
2024-12-08 14:09:03 -08:00
jussisaurio
ca25a73c95
a little bit more explanation about left join handling
2024-11-30 20:54:22 +02:00
jussisaurio
83f8ea1b13
Fix bug with multiway joins and clean up left join implementation
2024-11-30 20:47:48 +02:00
jussisaurio
84742b81fa
Obsolete comment
2024-11-27 22:43:36 +02:00
jussisaurio
da811dc403
add doc comments for members of Plan struct
2024-11-27 19:30:07 +02:00
jussisaurio
db462530f1
metadata instead of m
2024-11-27 19:27:36 +02:00
jussisaurio
7d569aee1f
fix stupid comment
2024-11-26 18:37:06 +02:00
jussisaurio
1b34698872
add comments and rename some misleading label variables
2024-11-26 18:28:19 +02:00
jussisaurio
7f04f8e88f
rename
2024-11-26 17:41:08 +02:00
jussisaurio
122546444f
extract function order_by_sorter_insert()
2024-11-26 17:40:49 +02:00
jussisaurio
3d27ef90f5
emitting result columns generally works the same way -> extract it
2024-11-26 17:31:51 +02:00
jussisaurio
c74981873e
Extract ORDER BY result column deduping into a function
2024-11-26 17:31:51 +02:00
jussisaurio
89569fa7a3
Remove redundant if-else after refactoring ResultSetColumn to struct
2024-11-26 17:31:51 +02:00
jussisaurio
ac12e9c7fd
No need for ResultSetColumn to be an enum
2024-11-26 17:31:51 +02:00
jussisaurio
7d5fa12bb7
fix allocating wrong number of registers upfront for aggregation results
2024-11-26 17:31:51 +02:00
jussisaurio
56b15193d0
resolve aggregates from orderby as well
2024-11-26 17:31:51 +02:00
jussisaurio
885b6ecd76
Remove 'cursor_hint': it is never needed
2024-11-26 17:31:51 +02:00
jussisaurio
008be10cfd
Add TODO about expression equality comparisons
2024-11-26 17:31:51 +02:00
jussisaurio
cfb7e79601
Function doc comments
2024-11-26 17:31:51 +02:00
jussisaurio
fc33c70481
remove many unnecessary fields from SortMetadata and GroupByMetadata
2024-11-26 17:31:51 +02:00
jussisaurio
ebce78bcd9
rename
2024-11-26 17:31:51 +02:00
jussisaurio
0510e150d3
fix comment
2024-11-26 17:31:51 +02:00
jussisaurio
1c37d8b24b
extract function sorter_insert()
2024-11-26 17:31:51 +02:00
jussisaurio
4f3da982c0
extract function emit_result_row()
2024-11-26 17:31:51 +02:00
jussisaurio
52beeabd45
tweaks
2024-11-26 17:31:51 +02:00
jussisaurio
120601f732
fix metadata comments
2024-11-26 17:31:51 +02:00
jussisaurio
97ba4a788e
remove sorts hashmap - only one sortmetadata struct is needed
2024-11-26 17:31:51 +02:00
jussisaurio
d2f84edd2e
fix accidentally removing push_scan_direction()
2024-11-26 17:31:51 +02:00
jussisaurio
7ecc252507
fix rest of the failing tests
2024-11-26 17:31:51 +02:00
jussisaurio
9a557516b8
Fixes for expressions with aggregate arguments + limit 0
2024-11-26 17:31:51 +02:00
jussisaurio
cc902ed25d
GROUP BY and ORDER BY mostly work
2024-11-26 17:31:51 +02:00
jussisaurio
3f9e60633f
select refactor: order by and basic agg kinda work
2024-11-26 17:31:51 +02:00
jussisaurio
d0466e1cae
introduce Column member of ast::Expr and bind idents to columns
2024-11-26 17:31:51 +02:00
jussisaurio
418ad40401
Merge 'Fix some Clippy warnings' from Lauri Virtanen
...
Reviewed-by: Pere Diaz Bou <limeng.1@bytedance.com >
Closes #417
2024-11-25 16:43:06 +02:00
Lauri Virtanen
70c4d6b360
Support multiplying combinations of different types
2024-11-24 22:11:37 +02:00
Lauri Virtanen
af9d407dee
Fix issues with subtraction of different type combinations
2024-11-24 22:10:23 +02:00
Lauri Virtanen
cafbf5499f
Support divide operator in expressions
2024-11-24 22:10:07 +02:00
Lauri Virtanen
afeb1cbe74
Clippy warning fixes
2024-11-24 20:24:47 +02:00
Lauri Virtanen
a7100d8e9b
Autofix clippy issues with cargo fix --clippy
2024-11-24 20:24:47 +02:00
Pekka Enberg
aa4dd5c8e7
Merge 'wal: checksums' from Pere Diaz Bou
...
Implemeted checksums so that sqlite3 is able to read our WAL. This also
helps with future work on proper recovery of WAL.
Create some frames with CREATE TABLE and kill the process so that there
is no checkpoint.
```
Limbo v0.0.6
Enter ".help" for usage hints.
limbo> create table x(x);
limbo> [1] 15910 killed cargo run xlimbo.db
```
Now sqlite3 is able to recover from this WAL created in limbo:
```
sqlite3 xlimbo.db
SQLite version 3.43.2 2023-10-10 13:08:14
Enter ".help" for usage hints.
sqlite> .schema
CREATE TABLE x (x);
```
Closes #413
2024-11-22 13:21:01 +02:00
jussisaurio
c722074016
missing cursorresult handling
2024-11-21 20:29:46 +02:00
jussisaurio
f945795ae6
consistent naming
2024-11-21 20:25:51 +02:00
jussisaurio
d8eb4be424
better, less cool names
2024-11-21 20:23:53 +02:00
jussisaurio
3002f2a552
io macro
2024-11-21 20:23:23 +02:00
jussisaurio
6dc427fc9b
Merge 'impl order by desc' from lemonwx
...
Hi all,
I attempted to implement the `order by desc`, which mainly consists of
the following two parts:
1. for cases where the primary key can be utilized, I implemented
`push_scan_direction` to push the scan direction down to the `Scan`.
2. for cases where the primary key cannot be utilized, I re-implemented
the sorting in `Sorter::rewind` based on whether it's desc or asc.
there is also some related work to be done, such as sort using secondary
index, I will attempt to do next.
Please help review this and let me know how I can improve it, thanks in
advance
Reviewed-by: Pere Diaz Bou <pere-altea@hotmail.com >
Closes #376
2024-11-21 16:37:38 +02:00
Pere Diaz Bou
05a05cfc63
endian naming changes
2024-11-21 11:55:36 +01:00
Pere Diaz Bou
6c14c50d41
wal: checksums
...
Implemeted checksums so that sqlite3 is able to read our WAL. This also
helps with future work on proper recovery of WAL.
Create some frames with CREATE TABLE and kill the process so that there
is no checkpoint.
```
Limbo v0.0.6
Enter ".help" for usage hints.
limbo> create table x(x);
limbo> [1] 15910 killed cargo run xlimbo.db
```
Now sqlite3 is able to recover from this WAL created in limbo:
```
sqlite3 xlimbo.db
SQLite version 3.43.2 2023-10-10 13:08:14
Enter ".help" for usage hints.
sqlite> .schema
CREATE TABLE x (x);
```
2024-11-20 20:12:32 +01:00
Pekka Enberg
de40442677
core: Remove unused import from btree.rs
2024-11-20 11:55:49 +02:00