Commit Graph

1313 Commits

Author SHA1 Message Date
jussisaurio
30920d9ddc update compat.md 2024-12-14 21:30:49 +02:00
jussisaurio
9aaf0869ae Merge 'Add several cli shell commands, re-structure shell api' from Preston Thorpe
After fixing the shell issue earlier I just had to revisit this. Let me
know if this is too opinionated of changes or out of scope.
This PR adds several of the sqlite CLI commands to the limbo shell user
interface, with their behavior matched as much as possible.
- `.show`:  displays a list of currently enabled settings
- `.open <file>` : opens a database file
- `.output <file>`: allows the user to direct shell output to a file, or
stdout if left blank
- `.cd <dir>`: changes the current working directory of the shell
environment
- `.mode <output_mode>`: allows the user to select between the (two)
current output modes "pretty | raw"
- `.nullvalue <string>`: allows user to set the value of NULL to be
displayed in the output
It also prevents a database file argument from needing to being passed
as an argv[1], but alerts the user that no database was selected, while
allowing them to `.open` a database file with a dot command.
![image](https://github.com/user-
attachments/assets/8249e28d-e545-4c49-ab30-909cf1e42563)
![image](https://github.com/user-
attachments/assets/cfda121b-c789-48cc-a35e-259d8b5a3a04)
This PR also restructures the CLI crate a bit, to make future commands a
bit easier to add.

Reviewed-by: Pekka Enberg <pere-altea@hotmail.com>

Closes #462
2024-12-14 15:45:48 +02:00
PThorpe92
7a9fe8ac88 Add cli command to set null value 2024-12-14 08:15:48 -05:00
Pekka Enberg
3eb1e1c2f7 Update README.md 2024-12-14 11:36:22 +02:00
Pekka Enberg
e3d8de8919 Merge 'Add two arguments version of unhex(x, y) function' from Kacper Kołodziej
Part of solution for #144

Closes #470
2024-12-14 09:02:30 +02:00
Pekka Enberg
982b423709 Merge 'support TRUE and FALSE in predicates' from Jussi Saurio
closes #466

Closes #469
2024-12-14 09:01:30 +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
Kacper Kołodziej
64bfa2eb79 test: unhex(x, y) suite
Tests for `unhex(x, y)` (two arguments version).

Part of solution for #144
2024-12-14 00:55:44 +01:00
Kacper Kołodziej
c04839d9e0 functions: add unhex(x, y) version
For `unhex(x, y)` handle trimming `y` characters from the beginning and
end of `x` value before decoding.

Part of solutions of #144.
2024-12-14 00:55:44 +01:00
jussisaurio
5e9e2dffe9 support TRUE and FALSE in predicates 2024-12-13 22:58:29 +02:00
Pekka Enberg
138b3a00e8 Merge 'use correct min/max frames' from Pere Diaz Bou
Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com>

Closes #465
2024-12-13 18:48:26 +02:00
PThorpe92
33c2d528f2 Refactor shell API for command extensibility 2024-12-13 11:48:18 -05:00
PThorpe92
f6473ea40d Add several cli commands, re-structure shell 2024-12-13 11:48:18 -05:00
Pekka Enberg
f5212b0672 Merge 'loop writing header while initializing' from Pere Diaz Bou
if somehow this doesn't finish in a single loop, do more just in case

Closes #463
2024-12-13 18:48:04 +02:00
Pere Diaz Bou
1e5239a164 use correct min/max frames 2024-12-13 14:06:29 +01:00
Pere Diaz Bou
352b3540ee loop writing header while initializing
if somehow this doesn't finish in a single loop, do more just in case
2024-12-13 13:25:56 +01:00
Pere Diaz Bou
47d25292b2 Merge 'Start multithread support' from Pere Diaz Bou
Since we expect to ensure thread safety between multiple threads in the
future, we extract what is important to be shared between multiple
connections with regards to WAL/Pager.
This is WIP so I just put whatever feels like important behind a RwLock
but expect this to change to Atomics in the future as needed. Maybe even
these locks might disappear because they will be better served with
transaction locks.
This also includes addition of unsafe Sync/Send + UnsafeCell in Pages.

Closes #415
2024-12-13 13:22:17 +01:00
Pere Diaz Bou
3e59da439c fmt 2024-12-13 13:10:33 +01:00
Pere Diaz Bou
1a663a6ed7 cargo stuff rm 2024-12-13 13:09:13 +01:00
Pere Diaz Bou
b43e8e46f6 impl sync/send for cache 2024-12-13 13:09:13 +01:00
Pere Diaz Bou
97dd95abea core: change Rc<RefCell<Page>> to Arc<Page>
This includes an inner struct in Page wrapped with Unsafe cell to access
it. This is done intentionally because concurrency control of pages is
handled by pages and not by the page itself.
2024-12-13 13:09:13 +01:00
Pere Diaz Bou
c816186326 fmt 2024-12-13 13:09:13 +01:00
Pere Diaz Bou
3fda2d09b9 Extract multi threaded part from WalFile to WalFileShared
Since we expect to ensure thread safety between multiple threads in the
future, we extract what is important to be shared between multiple
connections with regards to WAL.

This is WIP so I just put whatever feels like important behind a RwLock
but expect this to change to Atomics in the future as needed. Maybe even
these locks might disappear because they will be better served with
transaction locks.
2024-12-13 13:09:13 +01:00
Pere Diaz Bou
a4297702bd extract page cache to be multi threaded 2024-12-13 13:09:13 +01:00
Pekka Enberg
da3765d061 Merge 'Document typical code flow with charts' from Kacper Madej
I'd love to contribute to Limbo, but wrapping my head around the whole
project is hard.
I decided to start by creating a diagram of a typical flow so that other
potential contributors might have an easier time :)
LMK if this is useful, I can create more of those when I dig deeper.

Closes #456
2024-12-13 11:49:02 +02:00
Pekka Enberg
2b85d2a600 Merge 'Add implementation and tests for replace scalar function' from Alperen Keleş
Adds `replace` scalar function.

Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com>

Closes #446
2024-12-13 11:02:08 +02:00
Pekka Enberg
fefcf1261a Merge 'Add support for unary positive' from Jean Arhancet
Add support for the unary positive operator

Closes #461
2024-12-13 11:01:40 +02:00
JeanArhancet
8bf6572e9e feat: support unary positive 2024-12-13 02:07:34 +01:00
alpaylan
4f395623ab fix the comment on replace panic in case of text cast failure 2024-12-12 15:03:35 -05:00
alpaylan
5742c51c5c improve error messages on replace function call 2024-12-12 14:14:04 -05:00
Alperen Keleş
841a4fe2f8 Merge branch 'tursodatabase:main' into main 2024-12-12 13:13:41 -05:00
Pekka Enberg
3023d228c7 Limbo 0.0.9 2024-12-12 18:49:05 +02:00
Pekka Enberg
afbf9eb9da Update CHANGELOG 2024-12-12 18:47:42 +02:00
Pekka Enberg
96547e924c Merge 'Add buffered cli input and match sqlite cli repl' from Preston Thorpe
This PR prevents input from being evaluated in the case of an incomplete
statement entered, allowing the user to continue the query on following
lines.
This matches the behavior of the sqlite CLI by alerting the user how
many parenthesis are currently open (up to 9) `(x1...`, or too many
closed `(!...` and only processes `.`commands when they are the only
input.
![image](https://github.com/user-
attachments/assets/c062814c-5499-41c1-8ccb-3c5b1dfa682c)
>sqlite
![image](https://github.com/user-
attachments/assets/754fa52b-f006-40ed-89e9-7b69f513bbec)
fixes #450

Closes #457
2024-12-12 18:47:08 +02:00
Kacper Madej
52b94f7181 Update diagram 2024-12-12 17:22:03 +01:00
Kacper Madej
ffede00531 Add link to sqlite docs 2024-12-12 17:11:51 +01: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
Kacper Madej
03c4f6f6ef Document typical flow 2024-12-12 17:06:29 +01:00
PThorpe92
4dc71bc9ad Add buffered cli input to allow for incomplete statements 2024-12-12 11:01:14 -05: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
Pere Diaz Bou
e79e42b0b1 Merge 'Change octet_length to yes in COMPAT.md' from Krishna Vishal
- Its added in https://github.com/tursodatabase/limbo/pull/430

Closes #454
2024-12-12 16:22:17 +01: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
Pekka Enberg
0722037465 github: Fix stale workflow access token 2024-12-12 10:59:10 +02:00
Pekka Enberg
4e40d9ecee Update CHANGELOG 2024-12-12 10:47:11 +02:00
Pekka Enberg
58cd9d72b0 Merge 'Implement support for iif()' from Alex Miller
In sqlite, iif() looks like:
```
sqlite> create table iiftest(a int, b int, c int);
sqlite> explain select iif(a,b,c) from iiftest;
addr  opcode         p1    p2    p3    p4             p5  comment
----  -------------  ----  ----  ----  -------------  --  -------------
0     Init           0     11    0                    0   Start at 11
1     OpenRead       0     2     0     3              0   root=2 iDb=0; iiftest
2     Rewind         0     10    0                    0
3       Column         0     0     2                    0   r[2]= cursor 0 column 0
4       IfNot          2     7     1                    0
5       Column         0     1     1                    0   r[1]= cursor 0 column 1
6       Goto           0     8     0                    0
7       Column         0     2     1                    0   r[1]= cursor 0 column 2
8       ResultRow      1     1     0                    0   output=r[1]
9     Next           0     3     0                    1
10    Halt           0     0     0                    0
11    Transaction    0     0     1     0              1   usesStmtJournal=0
12    Goto           0     1     0                    0
```
And with this change, in limbo it looks like:
```
addr  opcode             p1    p2    p3    p4             p5  comment
----  -----------------  ----  ----  ----  -------------  --  -------
0     Init               0     14    0                    0   Start at 14
1     OpenReadAsync      0     2     0                    0   table=iiftest, root=2
2     OpenReadAwait      0     0     0                    0
3     RewindAsync        0     0     0                    0
4     RewindAwait        0     13    0                    0   Rewind table iiftest
5       Column           0     0     2                    0   r[2]=iiftest.a
6       IfNot            2     9     1                    0   if !r[2] goto 9
7       Column           0     1     1                    0   r[1]=iiftest.b
8       Goto             0     10    0                    0
9       Column           0     2     1                    0   r[1]=iiftest.c
10      ResultRow        1     1     0                    0   output=r[1]
11    NextAsync          0     0     0                    0
12    NextAwait          0     5     0                    0
13    Halt               0     0     0                    0
14    Transaction        0     0     0                    0
15    Goto               0     1     0                    0
```
---
Rust commentary overly welcome, as idk what I'm doing in this language.

Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com>

Closes #424
2024-12-12 10:46:22 +02:00
Pekka Enberg
2e754e37f1 perf: Update Cargo.lock files
We already bumped up clap to fix up a Github dependabot complaint, but
let's also update the lock files...
2024-12-12 09:08:51 +02:00
Pekka Enberg
929ca22c9d Merge 'Enhance README.md' from Kim Seon Woo
# Purpose of the PR
Let's add instructions on how to build and run limbo for first-time
users:

Closes #452
2024-12-12 09:07:34 +02:00
김선우
8e6184c932 Enhance README.md 2024-12-12 16:05:23 +09:00
김선우
c083e59457 Enhance README.md 2024-12-12 13:47:14 +09:00