Commit Graph

266 Commits

Author SHA1 Message Date
Pekka Enberg
519e6b141f Add Table::column_is_rowid_alias() helper
We need to check for rowid alias elsewhere too with ORDER BY, for
example, so let's extract a small helper for that.
2024-07-07 12:27:08 +03:00
Pekka Enberg
77bfbd47be Merge pull request #84 from haaawk/rowid_alias
Remove incorrect Column::is_rowid_alias
2024-07-07 12:23:57 +03:00
Piotr Jastrzebski
fdbd010d89 Remove incorrect Column::is_rowid_alias
Fixes #83

Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 10:06:45 +02:00
Pekka Enberg
d46f523ac3 Merge pull request #82 from haaawk/derive_clone 2024-07-07 10:48:39 +03:00
Piotr Jastrzebski
3b3ea9a54f Derive Clone for Buffer
Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 09:28:58 +02:00
Pekka Enberg
23d93b402d Merge pull request #81 from haaawk/remove_submit 2024-07-07 10:27:15 +03:00
Piotr Jastrzebski
1004215853 Remove submit from LinuxIO write
Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 09:24:44 +02:00
Pekka Enberg
e5b0e8a512 Merge pull request #79 from haaawk/schema_add_table
Remove unneeded clone in add_table
2024-07-07 09:52:17 +03:00
Piotr Jastrzebski
7b6c6ef9f1 Remove unneeded clone in add_table
Signed-off-by: Piotr Jastrzebski <haaawk@gmail.com>
2024-07-07 08:47:47 +02:00
Pekka Enberg
e9032aaeaf Merge pull request #77 from pereman2/cli-opcodes
cli: added .opcodes helper
2024-07-06 15:51:32 +03:00
Pere Diaz Bou
c4f98e5f27 cli: add sqlite links in opcode description 2024-07-06 14:41:45 +02:00
Pekka Enberg
e54e1e661f Merge pull request #75 from heyrutvik/wait-for-completion
wait for the read completion
2024-07-06 15:37:33 +03:00
Pekka Enberg
6aa658a8c0 Merge pull request #76 from psarna/psarna/f55
translate: special case for LIMIT 0
2024-07-06 15:33:42 +03:00
Pere Diaz Bou
0b7226087b cli: added .opcodes helper
Improve quality of life while implementing core features.

```
Welcome to Limbo SQL shell!
> .opcodes
Abortable
---------
Verify that an Abort can happen. Assert if an Abort at this point might cause database corruption. This opcode only appears in debugging builds. An Abort is safe if either there have been no writes, or if there is an active statement journal.

Add
---------
Add the value in register P1 to the value in register P2 and store the result in register P3. If either input is NULL, the result is NULL.

AddImm
---------
Add the constant P2 to the value in register P1. The result is always an integer. To force any register to be an integer, just add 0.

Affinity
---------
Apply affinities to a range of P2 registers starting with P1. P4 is a string that is P2 characters long. The N-th character of the string indicates the column affinity that should be used for the N-th memory cell in the range.

AggFinal
---------
P1 is the memory location that is the accumulator for an aggregate or window function. Execute the finalizer function for an aggregate and store the result in P1. P2 is the number of arguments that the step function takes and P4 is a pointer to the FuncDef for this function. The P2 argument is not used by this opcode. It is only there to disambiguate functions that can take varying numbers of arguments. The P4 argument is only needed for the case where the step function was not previously called.
```

It can also search for specific opcode:
```
> .opcodes yield
Yield
---------
Swap the program counter with the value in register P1. This has the effect of yielding to a coroutine. If the coroutine that is launched by this instruction ends with Yield or Return then continue to the next instruction. But if the coroutine launched by this instruction ends with EndCoroutine, then jump to P2 rather than continuing with the next instruction. See also: InitCoroutine
```
2024-07-06 14:21:29 +02:00
Piotr Sarna
9376d68f73 testing: add a test for limit 0 2024-07-06 10:58:19 +02:00
Piotr Sarna
5bd3d283d1 translate: special case for LIMIT 0
Fixes #55
2024-07-06 10:58:19 +02:00
Rutvik Patel
fd9af2739e wait for the read completion
The submit_and_wait command waits for `n` completion events.
We were providing an incorrect argument, which caused the issue.
2024-07-06 13:48:58 +05:30
Pekka Enberg
095bf494f3 Merge pull request #73 from ishanjain28/makefile_fix
download wasm32-wasi target for wasm builds
2024-07-06 10:17:10 +03:00
Ishan Jain
61f6d69237 download wasm32-wasi target for wasm builds 2024-07-06 12:41:46 +05:30
Pekka Enberg
1149ba11dc Merge pull request #70 from KMJ-007/main
.schema without args shows all tables
2024-07-06 08:56:39 +03:00
Pekka Enberg
a51e79d5a1 Add helper guide for contributors 2024-07-06 08:48:28 +03:00
Karan Janthe
26dcfb7e8f Merge branch 'penberg:main' into main 2024-07-06 11:10:25 +05:30
Karan Janthe
c4e85cb8da .schema without args shows all table indexs 2024-07-06 11:09:29 +05:30
Pekka Enberg
e6f50bec60 Merge pull request #69 from KMJ-007/main
added .schema command in cli
2024-07-06 08:30:21 +03:00
Karan Janthe
8e1c737236 added .schema command in cli 2024-07-06 10:50:26 +05:30
Pekka Enberg
7cf3c80323 Update SQLite compatibility document
We don't support `SELECT ... WHERE` so mark it as such.
2024-07-05 20:07:18 +03:00
Pekka Enberg
5128b89474 Update SQLite compatibility document
We now support avg() and sum() functions.
2024-07-05 20:06:13 +03:00
Pekka Enberg
c7a67a1bf4 Fix ResultRow operands
Fix ResultRow operands to follow SQLite bytecode format for consistency.
2024-07-05 18:13:06 +03:00
Pekka Enberg
be11460c0e Merge pull request #68 from penberg/insn-dump-cleanup
Clean up insn_to_str()
2024-07-05 11:53:57 +03:00
Pekka Enberg
2f3c3b5404 Clean up insn_to_str()
The SQLite documentation explicitly says that P1, P2, and P3 are 32-bit
signed integers. P4 is a value, and P5 is a 16-bit unsigned integer.
Although we use different types for operands, the `EXPLAIN` output
should be compatible with SQLite and, therefore, use those types.
2024-07-05 11:39:21 +03:00
Pekka Enberg
8a09f2a29e Tweak mascot size 2024-07-05 09:52:29 +03:00
Pekka Enberg
2ee21443c0 Limbo mascot 2024-07-05 09:51:56 +03:00
Pekka Enberg
4a089e6e4e Merge pull request #67 from pereman2/fix-float-parse 2024-07-05 08:43:11 +03:00
Pekka Enberg
5f4927b5a4 Merge pull request #66 from pereman2/agg-evaluate-extra 2024-07-05 08:42:29 +03:00
Pere Diaz Bou
ae524a07e2 core: Insn::Real support
Signed-off-by: Pere Diaz Bou <pere-altea@hotmail.com>
2024-07-04 17:19:05 +02:00
Pere Diaz Bou
6bebfccd99 core: fix evaluating columns a part from agg
Signed-off-by: Pere Diaz Bou <pere-altea@hotmail.com>
2024-07-04 17:02:54 +02:00
Pekka Enberg
f4369c873f Simplify AggFinal emission in translate_select() 2024-07-04 12:21:27 +03:00
Pekka Enberg
e988ca0129 Consolidate AggregateFunction and AggFunc enums 2024-07-04 12:19:17 +03:00
Pekka Enberg
0f9f178746 Emit DecrJumpZero for aggregations too
SQLite emits a DecrJumpZero instruction after ResultRow even when there
are aggregation functions:

```
sqlite> EXPLAIN SELECT avg(age) FROM users LIMIT 1;
addr  opcode         p1    p2    p3    p4             p5  comment
----  -------------  ----  ----  ----  -------------  --  -------------
0     Init           0     13    0                    0   Start at 13
1     Integer        1     1     0                    0   r[1]=1; LIMIT counter
2     Null           0     2     3                    0   r[2..3]=NULL
3     OpenRead       0     2     0     10             0   root=2 iDb=0; users
4     Rewind         0     8     0                    0
5       Column         0     9     4                    0   r[4]= cursor 0 column 9
6       AggStep        0     4     3     avg(1)         1   accum=r[3] step(r[4])
7     Next           0     5     0                    1
8     AggFinal       3     1     0     avg(1)         0   accum=r[3] N=1
9     Copy           3     5     0                    0   r[5]=r[3]
10    ResultRow      5     1     0                    0   output=r[5]
11    DecrJumpZero   1     12    0                    0   if (--r[1])==0 goto 12
12    Halt           0     0     0                    0
13    Transaction    0     0     1     0              1   usesStmtJournal=0
14    Goto           0     1     0                    0
```

This does not seem to have any user-visible difference in semantics
because we always jump to Halt regardless of the limit. Howwever, to
keep generated code consistent with SQLite and avoid special-case paths,
let's just emit the instruction.
2024-07-04 11:55:10 +03:00
Pekka Enberg
e3031c2594 Simplify translate_select() 2024-07-04 11:37:34 +03:00
Pekka Enberg
3b297dd05b Fix analyze_column() to use RustDoc format 2024-07-04 11:25:37 +03:00
Pekka Enberg
a24174640f Merge pull request #64 from penberg/refactor-translate 2024-07-04 08:35:31 +03:00
Pekka Enberg
c4e3cce8a2 Introduce Select struct
This introduces an intermediate `Select` struct, which hopefully makes
the codegen a bit simpler by transforming the complext AST to something
more straight-forward.
2024-07-03 22:09:21 +03:00
Pekka Enberg
883e494ac5 Don't import AST types directly
Instead, use the `ast::<type>` qualifier in the code to make it more
explicit where we're dealing with AST and where we're dealing with our
own data types. Paves the way for a `Select` struct.
2024-07-03 20:23:55 +03:00
Pekka Enberg
f9647a58d3 Use Vec::with_capacity() in analyze_columns() 2024-07-03 16:25:00 +03:00
Pekka Enberg
5b12e7af78 Add TCL tests for avg() and sum() 2024-07-03 11:50:22 +03:00
Pekka Enberg
5f678ca57d sqlite3: Disable missing_safety_doc warnings
There's no point in sprinkling safety documentation to all functions.
This is, after all, the unsafe C API...
2024-07-03 11:43:01 +03:00
Pekka Enberg
400c5210b2 Remove unreachable patterns 2024-07-03 11:41:31 +03:00
Pekka Enberg
addfb3cbc0 Remove unused lifetime parameter 2024-07-03 11:40:08 +03:00
Pekka Enberg
4474d067fe Code cleanups to make Clippy happy 2024-07-03 11:39:29 +03:00