Jussi Saurio
3121c6cdd3
Replace Operation::Subquery with Table::FromClauseSubquery
...
Previously the Operation enum consisted of:
- Operation::Scan
- Operation::Search
- Operation::Subquery
Which was always a dumb hack because what we really are doing is
an Operation::Scan on a "virtual"/"pseudo" table (overloaded names...)
derived from a subquery appearing in the FROM clause.
Hence, refactor the relevant data structures so that the Table enum
now contains a new variant:
Table::FromClauseSubquery
And the Operation enum only consists of Scan and Search.
No functional changes (intended, at least!)
2025-05-20 12:56:30 +03:00
pedrocarlo
5bd47d7462
post rebase adjustments to accomodate new instructions that were created before the merge conflicts
2025-05-19 15:22:15 -03:00
pedrocarlo
bba9689674
Fixed matching bug for defining collation context to use
2025-05-19 15:22:14 -03:00
pedrocarlo
a818b6924c
Removed repeated binary expression translation. Adjusted the set_collation to capture additional context of whether it was set by a Collate expression or not. Added some tests to prove those modifications were necessary.
2025-05-19 15:22:14 -03:00
pedrocarlo
f8854f180a
Added collation to create table columns
2025-05-19 15:22:14 -03:00
pedrocarlo
d0a63429a6
Naive implementation of collate for queries. Not implemented for column constraints
2025-05-19 15:22:14 -03:00
pedrocarlo
b5b1010e7c
set binary collation as default
2025-05-19 15:22:14 -03:00
Pekka Enberg
e3f71259d8
Rename OwnedValue -> Value
...
We have not had enough merge conflicts for a while so let's do a
tree-wide rename.
2025-05-15 09:59:46 +03:00
Jussi Saurio
5386859b44
as_binary-components: simplify
2025-05-14 09:42:26 +03:00
Jussi Saurio
bd875e3876
optimizer module split
2025-05-14 09:42:26 +03:00
Jussi Saurio
501e95637a
Merge 'Support isnull and notnull expr' from meteorgan
...
Limbo `isnull` output:
```
limbo> explain select 1 isnull;
addr opcode p1 p2 p3 p4 p5 comment
---- ----------------- ---- ---- ---- ------------- -- -------
0 Init 0 3 0 0 Start at 3
1 ResultRow 1 1 0 0 output=r[1]
2 Halt 0 0 0 0
3 Integer 1 2 0 0 r[2]=1
4 Integer 1 1 0 0 r[1]=1
5 IsNull 2 7 0 0 if (r[2]==NULL) goto 7
6 Integer 0 1 0 0 r[1]=0
7 Goto 0 1 0 0
```
Sqlite `isnull` output:
```
sqlite> explain select 1 isnull;
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 6 0 0 Start at 6
1 Integer 1 1 0 0 r[1]=1
2 IsNull 2 4 0 0 if r[2]==NULL goto 4
3 Integer 0 1 0 0 r[1]=0
4 ResultRow 1 1 0 0 output=r[1]
5 Halt 0 0 0 0
6 Integer 1 2 0 0 r[2]=1
7 Goto 0 1 0 0
```
------------------------------------------------------------------------
-------------------
Limbo `notnull` output:
```
limbo> explain select 1 notnull;
addr opcode p1 p2 p3 p4 p5 comment
---- ----------------- ---- ---- ---- ------------- -- -------
0 Init 0 3 0 0 Start at 3
1 ResultRow 1 1 0 0 output=r[1]
2 Halt 0 0 0 0
3 Integer 1 2 0 0 r[2]=1
4 Integer 1 1 0 0 r[1]=1
5 NotNull 2 7 0 0 r[2]!=NULL -> goto 7
6 Integer 0 1 0 0 r[1]=0
7 Goto 0 1 0 0
```
Sqlite `notnull` output:
```
sqlite> explain select 1 notnull;
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 6 0 0 Start at 6
1 Integer 1 1 0 0 r[1]=1
2 NotNull 2 4 0 0 if r[2]!=NULL goto 4
3 Integer 0 1 0 0 r[1]=0
4 ResultRow 1 1 0 0 output=r[1]
5 Halt 0 0 0 0
6 Integer 1 2 0 0 r[2]=1
7 Goto 0 1 0 0
```
Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com >
Closes #1468
2025-05-12 10:06:35 +03:00
PThorpe92
ab23f2a24f
Add comments and reorganize fix of ordering parameters for insert statements
2025-05-11 14:20:57 -04:00
meteorgan
5185f4bf9e
Support isnull and notnull expr
2025-05-11 23:47:30 +08:00
PThorpe92
1c7a50de96
Update comments and correct vtab insert behavior
2025-05-10 10:03:00 -04:00
PThorpe92
0d73fe0fe7
Fix parameter position on insert by handling before vdbe layer
2025-05-10 07:46:29 -04:00
PThorpe92
50f2621c12
Add several more rust tests for parameter binding
2025-05-10 07:46:29 -04:00
PThorpe92
c4aee50b58
Fix unclear comments in translator
2025-05-10 07:46:29 -04:00
PThorpe92
d908e78729
Use positional offsets in translate::expr to remap parameters to their correct offsets
2025-05-10 07:46:27 -04:00
meteorgan
ef3f004e30
refactor numeric literal
2025-05-08 18:37:17 +08:00
meteorgan
51d43074f3
Support literal-value current_time, current_date and current_timestamp
2025-04-29 22:35:26 +08:00
Jussi Saurio
e557503091
expr.rs: use constant spans to optimize constant expressions
2025-04-24 11:05:21 +03:00
pedrocarlo
1928dcfa10
Correct docs regarding between
2025-04-21 23:05:01 -03:00
Jussi Saurio
6c73db6fd3
feat: use covering indexes whenever possible
2025-04-18 15:13:09 +03:00
Jussi Saurio
913367409e
Merge 'Parse hex integers 2' from Anton Harniakou
...
Continuation of #1329
Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com >
Closes #1347
2025-04-16 11:13:01 +03:00
Anton Harniakou
8c797a9bd1
Use eq_ignore_ascii_case to compare strings
2025-04-15 21:48:53 +03:00
Anton Harniakou
0cebeef2ff
Support hex integers beginning with uppercase notation like 0Xfff or 0XFFF
2025-04-14 21:23:04 +03:00
Anton Harniakou
3c06ddadde
Parse hex integers in unary operators
...
Unary operators ~ and - should work with hex integers
2025-04-14 21:13:39 +03:00
pedrocarlo
e1ddf5ffcc
Fix Unary Negate Operation on Blobs
2025-04-14 12:05:00 -03:00
Jussi Saurio
d20782350d
Merge 'support modifiers for julianday()' from meteorgan
...
Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com >
Closes #1321
2025-04-14 11:52:43 +03:00
Jussi Saurio
79b08a80ab
Merge 'Parse hexidecimal integers' from Anton Harniakou
...
Fixes #1304
Maybe I should add tests?
Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com >
Closes #1329
2025-04-14 11:49:10 +03:00
Anton Harniakou
9ed34924e6
Parse hexidecimal integers
2025-04-13 11:52:25 +03:00
Diego Reis
db0f07499d
core/translate: Fix naive comparison between Binary expressions during register optimization
2025-04-12 16:39:30 -03:00
meteorgan
8200b328d8
support modifiers for julianday()
2025-04-12 19:29:20 +08:00
Pekka Enberg
d67e1b604b
Merge 'Added 'likelihood' scalar function' from Sachin Kumar Singh
...
The `likelihood(X,Y)` function returns argument X unchanged. The value Y
in likelihood(X,Y) must be a floating point constant between 0.0 and
1.0, inclusive.
```
sqlite> explain SELECT likelihood(42, 0.0);
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 6 0 0 Start at 6
1 Once 0 3 0 0
2 Integer 42 2 0 0 r[2]=42
3 Copy 2 1 0 0 r[1]=r[2]
4 ResultRow 1 1 0 0 output=r[1]
5 Halt 0 0 0 0
6 Goto 0 1 0 0
```
```
limbo> explain SELECT likelihood(42, 0.0);
addr opcode p1 p2 p3 p4 p5 comment
---- ----------------- ---- ---- ---- ------------- -- -------
0 Init 0 4 0 0 Start at 4
1 Copy 2 1 0 0 r[1]=r[2]
2 ResultRow 1 1 0 0 output=r[1]
3 Halt 0 0 0 0
4 Integer 42 2 0 0 r[2]=42
5 Goto 0 1 0 0
```
Closes #1303
2025-04-11 09:34:36 +03:00
Sachin Singh
01fa02364d
correctly handle edge cases
2025-04-11 08:34:29 +05:30
Sachin Singh
482e93bfd0
feat: add likelihood scalar function
2025-04-11 05:54:23 +05:30
Sachin Singh
b7acfa490c
feat: add timediff data and time function
2025-04-11 04:30:57 +05:30
Duncan Lutz
aa7c64cb19
feat: added likely scalar function
2025-04-06 23:14:30 -06:00
Diego Reis
3c531ac5ec
core/expr: Reuse register in binary expressions if they're equal
2025-04-02 09:15:41 -03:00
Diego Reis
86f8719b69
core/expr: Extract binary insn emission in a separate function
2025-04-02 09:14:01 -03:00
Ihor Andrianov
db5e364210
made json an optional module again
2025-03-30 19:01:03 +03:00
Ihor Andrianov
6c126dcd97
add jsonb_set
2025-03-30 18:58:40 +03:00
Ihor Andrianov
568dc54b9e
big cleanup
2025-03-30 18:58:33 +03:00
Ihor Andrianov
a983c979c6
jsonb_merge, json_group_array, json_group_object
2025-03-30 18:47:33 +03:00
Levy A.
dd10fb13a7
fix: unary + is a noop
2025-03-25 11:43:19 -03:00
Pekka Enberg
31bbc5144a
Merge 'Initial pass at UPDATE support' from Preston Thorpe
...
This PR is to support `Update` queries. Follows sqlite behavior as much
as possible.
### limbo
```console
limbo> create table t (a,b,c);
limbo> explain update t set a = 1 where b = 2;
addr opcode p1 p2 p3 p4 p5 comment
---- ----------------- ---- ---- ---- ------------- -- -------
0 Init 0 18 0 0 Start at 18
1 OpenWriteAsync 0 2 0 0
2 OpenWriteAwait 0 0 0 0
3 RewindAsync 0 0 0 0
4 RewindAwait 0 17 0 0 Rewind table t
5 Column 0 1 4 0 r[4]=t.b
6 Ne 4 5 15 0 if r[4]!=r[5] goto 15
7 RowId 0 6 0 0 r[6]=t.rowid
8 IsNull 6 17 0 0 if (r[6]==NULL) goto 17
9 Integer 1 1 0 0 r[1]=1
10 Column 0 1 2 0 r[2]=t.b
11 Column 0 2 3 0 r[3]=t.c
12 MakeRecord 1 3 7 0 r[7]=mkrec(r[1..3])
13 InsertAsync 0 7 6 0
14 InsertAwait 0 0 0 0
15 NextAsync 0 0 0 0
16 NextAwait 0 5 0 0
17 Halt 0 0 0 0
18 Transaction 0 1 0 0 write=true
19 Integer 2 5 0 0 r[5]=2
20 Goto 0 1 0 0
```
### sqlite
```console
sqlite> explain update t set a = 1 where b = 2;
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 15 0 0 Start at 15
1 Null 0 1 2 0 r[1..2]=NULL
2 Noop 1 0 1 0
3 OpenWrite 0 2 0 2 0 root=2 iDb=0; t
4 Rewind 0 14 0 0
5 Column 0 1 5 0 r[5]= cursor 0 column 1
6 Ne 6 13 5 BINARY-8 81 if r[5]!=r[6] goto 13
7 Rowid 0 2 0 0 r[2]= rowid of 0
8 IsNull 2 14 0 0 if r[2]==NULL goto 14
9 Integer 1 3 0 0 r[3]=1
10 Column 0 1 4 0 r[4]= cursor 0 column 1
11 MakeRecord 3 2 1 0 r[1]=mkrec(r[3..4])
12 Insert 0 1 2 t 7 intkey=r[2] data=r[1]
13 Next 0 5 0 1
14 Halt 0 0 0 0
15 Transaction 0 1 1 0 1 usesStmtJournal=0
16 Integer 2 6 0 0 r[6]=2
17 Goto 0 1 0 0
```
Closes #1130
2025-03-24 09:19:22 +02:00
Pekka Enberg
e8c0a6e728
Merge 'Various JSON improvements' from Ihor Andrianov
...
Added jsonb_object, jsonb_array, json_insert, jsonb_insert.
MongoDB is sweating now.
Closes #1160
2025-03-24 09:17:40 +02:00
PThorpe92
a0188e5163
Use bind_col_refs to rewrite the Id expressions
2025-03-23 22:18:41 -04:00
PThorpe92
3597b32e4b
Resolve ambiguous columns in expr translator
2025-03-23 19:19:35 -04:00
Ihor Andrianov
2cab36bfc3
add json_replace, jsonb_replace
2025-03-23 20:52:03 +02:00