Diego Reis
db0f07499d
core/translate: Fix naive comparison between Binary expressions during register optimization
2025-04-12 16:39:30 -03: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
Ihor Andrianov
252583cb1e
add jsonb_obj jsonb_array
2025-03-20 15:22:52 +02:00
Pekka Enberg
4142f4f4cb
Merge 'Organize extension library and feature gate VFS' from Preston Thorpe
...
I keep having 3+ PR's in at the same time and always deal with crazy
conflicts because everything in the `ext` library is together in one
file.
This PR moves each category of extension into its own file, and
separates the `vfs` functionality in Core into the `ext/dynamic` module,
so that it can be more easily separated from wasm (or non feature =
"fs") targets to prevent build issues.
The only semantic changes made in this PR is the feature gating of vfs,
the rest is simply organizing and cleaning up imports.
Was unsure if `vfs` should be a feature on the `core` side too, or to
just enable it with the `fs` feature which seemed reasonable, as that
was already the current behavior. But let me know if we want it entirely
behind it's own feature.
Reviewed-by: Pere Diaz Bou <pere-altea@homail.com >
Closes #1124
2025-03-19 19:08:13 +02:00
PThorpe92
57d4aa7216
Reorganize ext library and feature gate vfs to more easily prevent wasm build issues
2025-03-19 10:17:11 -04:00
Ihor Andrianov
b5e86a9e36
remove and replace functions defenitions
2025-03-18 21:43:48 +02:00
Ihor Andrianov
23d7d82b6c
add jsonb_extract function
2025-03-16 15:14:29 +02:00
Ihor Andrianov
04f69220b7
add jsonb function implementation and json now understands blobs
2025-03-12 15:03:40 +02:00
l.gualtieri
6449c79e93
Escape character is ignored in LIKE function #1051
2025-03-01 18:32:09 +01:00
Jussi Saurio
bece5b601a
Add comment about translate_like_base
2025-02-17 10:55:26 +02:00
Jussi Saurio
9bf5b9609f
expr.rs: Binary: use translate_expr()'s impl for currently unsupported ops in translate_condition_expr()
2025-02-17 07:43:09 +02:00
Jussi Saurio
28ad12699f
expr.rs: Unary: use shared impl in translate_expr() and translate_condition_expr()
2025-02-17 07:43:09 +02:00
Jussi Saurio
dc852fee8c
expr.rs: Like: use shared impl in translate_expr() and translate_condition_expr()
2025-02-17 07:43:09 +02:00
Jussi Saurio
c6b8100d64
expr.rs: Case: call translate_expr() from translate_condition_expr()
2025-02-17 07:43:09 +02:00
Jussi Saurio
4f384e3a02
expr.rs: Rowid: call translate_expr() from translate_condition_expr()
2025-02-17 07:43:09 +02:00
Jussi Saurio
d91ba9573b
expr.rs: Column: call translate_expr() from translate_condition_expr()
2025-02-17 07:43:08 +02:00
Jussi Saurio
7023ffc215
expr.rs: FunctionCall: call translate_expr() from translate_condition_expr()
2025-02-17 07:43:08 +02:00
Jussi Saurio
b93e01d59f
expr.rs: Cast: call translate_expr() from translate_condition_expr()
2025-02-17 07:43:05 +02:00
Nikita Sivukhin
db7544fe7a
Merge branch 'tursodatabase:main' into fix-and-predicate
2025-02-15 22:57:56 +04:00
Nikita Sivukhin
ee8b03528d
fix codegen for and predicate - as jump_if_condition_is_true can be overwritten higher in the stack
2025-02-15 16:27:27 +04:00
Nikita Sivukhin
e25660833b
fix codegen for binary functions
2025-02-15 14:33:57 +04:00
Pekka Enberg
ac54c35f92
Switch to workspace dependencies
...
...makes it easier to specify a version, which is needed for `cargo publish`.
2025-02-12 17:28:04 +02:00
Pekka Enberg
00a546e775
Merge 'Fix string funcs' from Nikita Sivukhin
...
Add fuzz test for string functions and fix 2 bugs in implementation of
`LTRIM/RTRIM/TRIM` and `QUOTE`:
- `QUOTE` needs to escape internal quote(`'`) symbols
- `LTRIM`/`RTRIM`/`TRIM` needs to check if they have additional argument
Closes #958
2025-02-10 11:17:51 +02:00
Pekka Enberg
55058cade3
Merge 'Fix cast' from Nikita Sivukhin
...
Fix codegen for `CAST` expression and also adjust implementation of
`CAST: Real -> Int` because `SQLite` use "closest integer between the
REAL value and zero" as a CAST result.
Closes #956
2025-02-10 10:53:56 +02:00
Pekka Enberg
31886e8f4c
Merge 'Fix case and emit' from Nikita Sivukhin
...
(after fixing complicated b-tree bugs - I want to end my day with the
joy of fixing simple bugs)
This PR fix bug in emit (which was introduced after switch from
`HashMap` to `Vec`) and also align `CASE` codegen in case of `NULL`
result from `WHEN` clause with SQLite behaviour.
Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com >
Closes #953
2025-02-10 10:53:31 +02:00
Nikita Sivukhin
5773f767af
fix bug after refactoring in LIKE and GLOB
2025-02-09 23:42:53 +04:00
Nikita Sivukhin
a744dd8419
translate_and_mark helper with its previous signature is error prone - so replace it with more explicit option which accept target register
2025-02-09 23:18:46 +04:00
Nikita Sivukhin
dff1fdc853
fix codegen of CAST
2025-02-09 22:20:28 +04:00
Nikita Sivukhin
a61736bec1
adjust evaluation of NULL results in WHEN clauses with SQLite spec
2025-02-09 21:33:54 +04:00
Aarni Koskela
eaea02c567
Fix a handful of typos
2025-02-09 18:08:29 +02:00
Jorge López
83b158fb3a
core: silence some unused warnings when building without default features
2025-02-09 01:13:12 +01:00
pedrocarlo
26388cc802
fix: cargo fmt
2025-02-06 23:36:02 -03:00
pedrocarlo
303a687e65
rebase to main
2025-02-06 23:35:58 -03:00
PThorpe92
ae88d51e6f
Remove TableReferenceType enum to clean up planner
2025-02-06 09:15:39 -05:00