Commit Graph

3750 Commits

Author SHA1 Message Date
Jussi Saurio
c19e4fc69c Merge 'Aggregation without group by produces incorrect results for scalars' from Ihor Andrianov
Closes #954
Before:
<img width="669" alt="Знімок екрана 2025-03-27 о 21 49 19"
src="https://github.com/user-
attachments/assets/d005e690-7dab-41e5-bc03-b574cade3965" />
After:
<img width="676" alt="Знімок екрана 2025-03-27 о 21 49 44"
src="https://github.com/user-
attachments/assets/1f4eb6bf-a238-496e-9fa4-32382799ef86" />
SQLite:
<img width="656" alt="Знімок екрана 2025-03-27 о 21 50 04"
src="https://github.com/user-
attachments/assets/3eca184e-6ea5-47c1-824f-51d11256a7af" />

Reviewed-by: Pere Diaz Bou <pere-altea@homail.com>
Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com>

Closes #1198
2025-04-06 20:00:30 +03:00
Pekka Enberg
2202fcdbe4 Merge 'Dot command completion' from Pedro Muniz
Closes #1201.
![cli](https://github.com/user-
attachments/assets/343bb27a-891e-4bb2-91f2-1d446979ac43)

Reviewed-by: Preston Thorpe (@PThorpe92)

Closes #1253
2025-04-06 19:37:43 +03:00
Pekka Enberg
400ebe6b60 Merge 'Support offset clause in Update queries ' from Preston Thorpe
Closes #1245

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

Closes #1252
2025-04-06 19:37:18 +03:00
Preston Thorpe
62e0a137dd Merge branch 'main' into update_offset 2025-04-06 12:34:23 -04:00
Pekka Enberg
2d3fd01f91 Merge 'Support Create Index' from Preston Thorpe
Closes #1193
```console
│limbo> explain create index idxp on products(price);
│addr  opcode             p1    p2    p3    p4             p5  comment
│----  -----------------  ----  ----  ----  -------------  --  -------
│0     Init               0     39    0                    0   Start at 39
│1     CreateBtree        0     1     2                    0   r[1]=root iDb=0 flags=2
│2     OpenWriteAsync     0     1     0                    0
│3     OpenWriteAwait     0     0     0                    0
│4     NewRowId           0     2     0                    0
│5     String8            0     3     0     index          0   r[3]='index'
│6     String8            0     4     0     idxp           0   r[4]='idxp'
│7     String8            0     5     0     products       0   r[5]='products'
│8     Copy               1     6     1                    0   r[6]=r[1]
│9     String8            0     7     0     CREATE INDEX idxp ON products (price)  0   r[7]='CREATE INDEX idxp ON products (price)'
│10    MakeRecord         3     5     8                    0   r[8]=mkrec(r[3..7])
│11    InsertAsync        0     8     2                    0
│12    InsertAwait        0     0     0                    0
│13    SorterOpen         3     1     0     k(1,B)         0   cursor=3
│14    OpenPseudo         4     9     2                    0   2 columns in r[9]
│15    OpenReadAsync      2     273   0                    0   table=products, root=273
│16    OpenReadAwait      0     0     0                    0
│17    RewindAsync        2     0     0                    0
│18    RewindAwait        2     25    0                    0   Rewind table products
│19      Column           2     2     10                   0   r[10]=products.price
│20      RowId            2     11    0                    0   r[11]=products.rowid
│21      MakeRecord       10    2     12                   0   r[12]=mkrec(r[10..11])
│22      SorterInsert     3     12    0     0              0   key=r[12]
│23    NextAsync          2     0     0                    0
│24    NextAwait          2     19    0                    0
│25    OpenWriteAsync     1     1     0                    0
│26    OpenWriteAwait     0     0     0                    0
│27    SorterSort         3     33    0                    0
│28      SorterData       3     13    4                    0   r[13]=data
│29      SeekEnd          1     0     0                    0
│30      IdxInsertAsync   1     13    0                    0   key=r[13]
│31      IdxInsertAwait   1     0     0                    0
│32    SorterNext         3     28    0                    0
│33    Close              3     0     0                    0
│34    Close              2     0     0                    0
│35    Close              1     0     0                    0
│36    ParseSchema        0     0     0     name = 'idxp' AND type = 'index'  0   name = 'idxp' AND type = 'index'
│37    Close              0     0     0                    0
│38    Halt               0     0     0                    0
│39    Transaction        0     1     0                    0   write=true
│40    Goto               0     1     0                    0
```
This will create the initial index btree and insert whatever relevant
records that need to be inserted, it doesn't handle the case of
inserting new index keys when normal records are created afterwards.
That will prob be added in next PR to keep this one concise.
Limbo will properly use the index in a subsequent query:
![image](https://github.com/user-
attachments/assets/eb41e985-4a70-49a5-8218-62c25e4d16c5)
Creating a unique index on a column that has 2 existing identical rows:
![image](https://github.com/user-
attachments/assets/ea46c720-5235-4451-81f0-25497ed9ee92)

Reviewed-by: Pere Diaz Bou <pere-altea@homail.com>
Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com>

Closes #1199
2025-04-06 19:32:36 +03:00
Pekka Enberg
e3c064fc47 Merge 'Allow reading altered tables by defaulting to null in Column insn' from Preston Thorpe
Closes #1259

Closes #1260
2025-04-06 13:33:16 +03:00
Pekka Enberg
c04ce28070 Merge 'Support insert default values syntax' from Preston Thorpe
`INSERT INTO products DEFAULT VALUES` previously wasn't supported. Quick
and easy

Closes #1262
2025-04-06 10:23:21 +03:00
PThorpe92
ff482fc753 Add test case for insert default values 2025-04-05 21:34:27 -04:00
PThorpe92
c9edf71fb8 Support insert default values syntax 2025-04-05 21:27:21 -04:00
PThorpe92
67eda10453 Allow reading altered tables by defaulting to null in Column insn 2025-04-05 16:19:56 -04:00
PThorpe92
83af71f140 Return accidentally deleted comment on SeekGE insn from merge conflict 2025-04-05 11:30:57 -04:00
PThorpe92
399994bf66 Fix ext tests start with no default schema 2025-04-05 11:19:40 -04:00
PThorpe92
bd04b10f17 Fix btree tests to adapt to new type for BTreeKey 2025-04-05 11:19:10 -04:00
PThorpe92
abc97c8774 Add doc comments to new btree key enum and remove unused lifetimes 2025-04-05 11:19:10 -04:00
PThorpe92
6b42808f1a Dont re-seek if we are inserting a new unique index 2025-04-05 11:19:10 -04:00
PThorpe92
a2b9d8d371 Use Correct flag on idx insert to prevent seeking 2025-04-05 11:19:09 -04:00
PThorpe92
068ab4ab27 Refactor btree to reuse existing insert and seek with idx keys 2025-04-05 11:19:09 -04:00
PThorpe92
007fbe8cc7 Fix unique index issue and prealloc in sql string for schema 2025-04-05 11:19:09 -04:00
PThorpe92
2c3fd509fe Remove unused imports and consolidate ordering comparison 2025-04-05 11:19:09 -04:00
PThorpe92
e020ba3dfe Add enum for interpreting a value as a register or literal for insns 2025-04-05 11:19:07 -04:00
PThorpe92
b0016a0ee2 Support create index with SeekEnd and IdxCreate opcode functionality 2025-04-05 11:15:36 -04:00
PThorpe92
45a8e5e226 Add close_cursors helper method to program builder 2025-04-05 11:06:18 -04:00
PThorpe92
20adedff4c Remove Order enum in place of ast::SortOrder 2025-04-05 11:06:18 -04:00
PThorpe92
7567b30d00 Add SeekEnd to compat.md 2025-04-05 11:06:18 -04:00
PThorpe92
4741544dfd Add query translation for create index 2025-04-05 11:06:18 -04:00
PThorpe92
293974e692 Update COMPAT.md 2025-04-05 11:06:11 -04:00
Ihor Andrianov
0c9464e3fc reduce vec allocations, add comments for magic ifs 2025-04-05 15:15:10 +03:00
Pekka Enberg
ed7271a08c Merge 'Implement Clone and Debug for Rust binding's Database' from Isaiah Gamble
Derive `Clone` for the Rust binding's `Database` and implement `Debug`.
Closes #1238

Closes #1257
2025-04-05 08:37:23 +03:00
Pekka Enberg
883d183471 Merge 'Update cargo-dist and switch to Astral's version' from Hiroaki Yutani
Close #1250
This pull request switches `cargo-dist` to Astral's "unofficial fork"
version. In addition, this updates `cargo-dist` to version 0.28.3, so
the diff, which I generated just by `dist init`, contains the updates
since version 0.21.0.
- `cargo-dist` command was renamed to `dist`
- As of [version 0.23.0](https://github.com/axodotdev/cargo-
dist/releases/tag/v0.23.0), cargo-dist uses a dedicated config file
`dist-workspace.toml` instead of the field of `Cargo.toml`

Closes #1256
2025-04-05 08:35:47 +03:00
Hiroaki Yutani
3fa1cb56a5 Update cargo-dist and switch to Astral's version 2025-04-05 09:10:48 +09:00
pedrocarlo
907794cb07 add path completion for .import 2025-04-04 19:04:42 -03:00
pedrocarlo
d5fa37ab66 remove error debug 2025-04-04 17:44:34 -03:00
pedrocarlo
57af9c71ba customize completion candidates for some args 2025-04-04 17:39:09 -03:00
PThorpe92
e3985b6994 Remove unused mut ref from emit_update_instructions for tx context 2025-04-04 12:51:37 -04:00
PThorpe92
c6c3f39959 Add test cases in python CLI tests for OFFSET on LIMIT clauses 2025-04-04 12:49:12 -04:00
PThorpe92
13e084351d Change parse_limit function to accept reference value to ast::Limit 2025-04-04 12:38:18 -04:00
PThorpe92
f6a64a7b15 Support OFFSET clause for LIMIT in UPDATE queries 2025-04-04 12:35:30 -04:00
pedrocarlo
fd3335908c basic autocomplete for dot commands 2025-04-04 13:01:57 -03:00
Pekka Enberg
c3eaf47180 Merge 'Add support for default values in INSERT statements' from Diego Reis
While working on #494 I noticed that default values defined in schemas
weren't being applied.
Before:
![image](https://github.com/user-attachments/assets/af3a31be-
accd-47b4-848f-3820497e32ac)
Now:
![image](https://github.com/user-
attachments/assets/0ccb194c-4caa-481d-8f47-2405c3db06bb)

Closes #1249
2025-04-04 08:59:44 +03:00
Pekka Enberg
a90cbe4b62 Merge 'Fix virtual table translation issues' from Preston Thorpe
closes #1240
some idiot (read: me) had the init label of `CREATE VIRTUAL TABLE`
translation completely in the wrong place 🤔

Closes #1247
2025-04-04 08:58:02 +03:00
Diego Reis
43daba9942 core/translate: Add support for default values in INSERT statements 2025-04-04 01:32:13 -03:00
Diego Reis
38d842d675 docs/insn: Standardizes comments for insn to doc comments 2025-04-04 00:56:54 -03:00
PThorpe92
97c68f905a Move test back to original setup to ensure issue is solved 2025-04-03 20:22:47 -04:00
PThorpe92
ae2be30204 Move init label to proper place in create vtab translation 2025-04-03 20:22:14 -04:00
Ihor Andrianov
d4b8fa17f8 fix tests 2025-04-03 22:28:14 +03:00
Ihor Andrianov
5632b15a44 add tests 2025-04-03 22:28:13 +03:00
Ihor Andrianov
34a132fcd3 fix output when group by is not part of resulting set 2025-04-03 22:28:13 +03:00
Ihor Andrianov
91ceab1626 improve naming and add comments for context 2025-04-03 22:28:13 +03:00
Ihor Andrianov
816cbacc9c some smartie optimizations 2025-04-03 22:28:12 +03:00
Ihor Andrianov
2bcdd4e404 non group by cols are displayed in group by agg statements 2025-04-03 22:28:12 +03:00