Pekka Enberg
c282b23e6b
Merge 'Implement Concat opcode' from Harin
...
This adds the Concat opcode to the VDBE.
Closes #758
2025-01-21 07:45:16 +02:00
sonhmai
dd436d3fc5
add PRAGMA statements in COMPAT doc
2025-01-21 11:27:22 +07:00
Harin
da53cc3821
Added Concat Opcode
2025-01-21 00:29:23 +05:30
Pekka Enberg
bda1e4e6ab
Merge 'Add support for json_object function' from Jorge Hermo
...
Relates to #127 . This PR is still in draft and I have a few left things
to do (tests, improve implementation), just opening it so anyone can
track this work meanwhile.
Closes #664
2025-01-20 09:36:56 +02:00
Pekka Enberg
c25d9a1824
Merge 'Implement Not' from Vrishabh
...
This PR adds support for Not operator and Opcode.
Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com >
Closes #748
2025-01-20 09:17:45 +02:00
ben594
2ec52d14f1
Update compatibility status
2025-01-19 20:51:16 -05:00
psvri
e616bd5361
Implement Not
2025-01-20 00:21:23 +05:30
psvri
e16b3491c4
Fix null compares giving incorrect results
2025-01-19 00:44:38 +05:30
Pekka Enberg
20837d217b
Update COMPAT.md
2025-01-17 19:50:43 +02:00
psvri
e43271f53b
Implement regexp extension
2025-01-16 23:15:59 +05:30
Pekka Enberg
465c923db1
Update COMPAT.md
2025-01-16 09:14:46 +02:00
Jorge Hermo
fa8eb9549a
Merge with main
2025-01-15 22:10:35 +01:00
psvri
d3f28c51f4
Implement ShiftRight
2025-01-15 21:21:51 +05:30
psvri
5b4d82abbf
Implement ShiftLeft
2025-01-15 18:54:07 +05:30
PThorpe92
23d9d09b70
Add load_extension function, resolve shared lib extensions
2025-01-14 12:01:07 -05:00
Jorge Hermo
b3d3c8cf65
docs: update COMPAT.md
2025-01-14 00:04:54 +01:00
Pekka Enberg
1e94dbffcc
Merge branch 'main' into json-error-position
2025-01-13 18:21:37 +02:00
Peter Sooley
b5fed15997
implement json_error_position
2025-01-10 11:12:30 -08:00
Kacper Madej
1a85601261
Update docs
2025-01-10 13:41:47 +07:00
Kacper Madej
eebf9bfaac
Implement json_type
2025-01-09 11:29:17 +07:00
PThorpe92
ca428b3dda
Julianday function and additional tests/comments
2025-01-04 10:42:34 -05:00
PThorpe92
7c4a780cc2
Add DateTime func and support more modifiers
2025-01-04 08:41:03 -05:00
Kacper Madej
2e730ead25
Merge branch 'main' into json-extract
2024-12-31 15:41:18 +07:00
Kacper Madej
ad9acf7400
Add support for json_extract
2024-12-31 15:11:36 +07:00
Pekka Enberg
f87dc7cacc
Merge 'Support like function with escape' from Vrishabh
...
I have added support for like function with escape i.e like(X,Y,Z) .
There is good opportunity to refactor/cleanup the like operations which
can be done in another PR, as I wanted to keep the changes small .
Closes #568
2024-12-29 16:58:06 +02:00
psvri
1922b8ea38
Support like function with escape
2024-12-28 13:55:12 +05:30
PThorpe92
ddf229c432
Update COMPAT.md
2024-12-27 15:42:13 -05:00
Peter Sooley
28244b10d6
implement json_array_length
2024-12-26 15:08:11 -08:00
PThorpe92
f96f289609
Remove unnecessary nanos arg from uuid7, add insn const
2024-12-21 09:13:48 -05:00
PThorpe92
c1561ecbb0
Tests for uuid funcitons, add compat docs
2024-12-21 09:13:48 -05:00
Kacper Madej
e2fc03e822
Update COMPAT.md
2024-12-20 11:32:57 +01:00
Lauri Virtanen
e69ee80fac
Support log(X) and log(B,X) math functions
2024-12-17 00:14:25 +02:00
Lauri Virtanen
89d0289444
Support pi() function
2024-12-17 00:14:25 +02:00
Lauri Virtanen
5e426a7624
Support binary math functions
2024-12-16 22:29:05 +02:00
Lauri Virtanen
f69fdc1645
Support unary math functions
2024-12-16 19:31:20 +02:00
Lauri Virtanen
9e0a9b5490
Add mathematical functions table to COMPAT.md
2024-12-16 19:31:10 +02:00
Pekka Enberg
7907944f10
Update COMPAT.md
2024-12-15 09:14:50 +02:00
jussisaurio
30920d9ddc
update compat.md
2024-12-14 21:30:49 +02:00
Kacper Kołodziej
dda5e1e871
update scalar function list in COMPAT.md
...
add `unhex(x, y)`
2024-12-14 00:55:44 +01:00
Alperen Keleş
841a4fe2f8
Merge branch 'tursodatabase:main' into main
2024-12-12 13:13:41 -05:00
Pekka Enberg
5796b418b9
Merge 'Add support for soundex() function' from flaneur
...
add [soundex](https://www.sqlite.org/lang_corefunc.html#soundex ) scalar
function.
it seems that sqlite did not enable `soundex()` function by default
unless build it with `SQLITE_SOUNDEX`, while the sqlite in the ci
workflow did not enable it. this pr skipped the test over `soundex()`
temporarily in the `scalar-function.test` file.
Closes #453
2024-12-12 18:10:46 +02:00
Pekka Enberg
91764b85e6
Merge 'Add bitwise vdbe ops' from Preston Thorpe
...
Love the project, been following your blog posts for quite a while now.
I asked on Discord prior to submitting this, just because I didn't see a
specific issue for this feature... but if this PR is out of scope for
contributors, feel free to close it as I just had a good time hacking on
it.
This PR adds support for `BitAnd`, `BitOr`, and `BitNot` operators in
the vdbe, as well as unary expressions applied to aggregate functions;
which was needed in order to have `BitNot` support the same tests that
the other operators had.
*Also added unary negation of function calls, because since unary ops
were added, I figured adding support for the other existing unary
operator might be in scope, but lmk if not.
Let me know if there is any more tests or documentation to add/improve.
Closes #445
2024-12-12 17:35:12 +02:00
krishvishal
33f3eb02c8
Change octet_length to yes in COMPAT.md
...
- Its added in https://github.com/tursodatabase/limbo/pull/430
2024-12-12 19:46:01 +05:30
Li Yazhou
03288e5170
add impl about scalar function soundex with test
2024-12-12 21:48:05 +08:00
Alex Miller
c4d4569dc9
Merge remote-tracking branch 'upstream/main' into expr-iif
2024-12-11 20:13:54 -08:00
alpaylan
da28ed51ca
add implementation and tests for replace scalar function
2024-12-11 16:23:13 -05:00
PThorpe92
d5391dc716
Add vdbe bitwise operators: and, or, not
2024-12-11 11:06:22 -05:00
jussisaurio
eb9374aebf
Merge 'Add support for CASE expressions.' from Alex Miller
...
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 19 0 0 Start at 19
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 18 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 15 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 15 0 0
14 Integer 0 1 0 0 r[1]=0
15 ResultRow 1 1 0 0 output=r[1]
16 NextAsync 0 0 0 0
17 NextAwait 0 5 0 0
18 Halt 0 0 0 0
19 Transaction 0 0 0 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.
Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com >
Closes #425
2024-12-11 17:05:41 +02:00
Pekka Enberg
04f196113a
Merge 'Add last_insert_rowid() function' from Krishna Vishal
...
- Changed `Cursor` trait to be able to get access to `root_page`
- SQLite only updates last_insert_rowid for non-schema inserts. So we
check if the `InsertAwait` is not for `root_page` before updating
rowid
In SQLite it looks like this:
```
sqlite> EXPLAIN SELECT last_insert_rowid();
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 4 0 0
1 Function 0 0 1 last_insert_rowid(0) 0
2 ResultRow 1 1 0 0
3 Halt 0 0 0 0
4 Goto 0 1 0 0
```
In limbo it will look like this:
```
limbo> EXPLAIN SELECT last_insert_rowid();
addr opcode p1 p2 p3 p4 p5 comment
---- ----------------- ---- ---- ---- ------------- -- -------
0 Init 0 4 0 0 Start at 4
1 Function 0 2 1 last_insert_rowid 0 r[1]=func()
2 ResultRow 1 1 0 0 output=r[1]
3 Halt 0 0 0 0
4 Transaction 0 0 0 0
5 Goto 0 1 0 0
```
Closes #427
2024-12-11 10:44:34 +02:00
krishvishal
7e2928a5f1
Feature: last_insert_rowid()
...
- Changed `Cursor` trait to be able to get access to `root_page`
- SQLite only updates last_insert_rowid for non-schema inserts. So we check if the `InsertAwait` is not for `root_page` before
updating rowid
2024-12-09 22:48:42 +05:30