mirror of
https://github.com/tursodatabase/limbo.git
synced 2025-08-04 01:58:16 +00:00
![]() 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:  Creating a unique index on a column that has 2 existing identical rows:  Reviewed-by: Pere Diaz Bou <pere-altea@homail.com> Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com> Closes #1199 |
||
---|---|---|
.. | ||
cli_tests | ||
test_files | ||
wal | ||
agg-functions.test | ||
all.test | ||
changes.test | ||
cmdlineshell.test | ||
coalesce.test | ||
compare.test | ||
concat.test | ||
default_value.test | ||
delete.test | ||
drop_table.test | ||
gen-database.py | ||
glob.test | ||
groupby.test | ||
insert.test | ||
join.test | ||
json.test | ||
like.test | ||
math.test | ||
offset.test | ||
orderby.test | ||
pragma.test | ||
scalar-functions-datetime.test | ||
scalar-functions-printf.test | ||
scalar-functions.test | ||
select.test | ||
subquery.test | ||
tester.tcl | ||
testing.db | ||
testing_norowidalias.db | ||
testing_small.db | ||
testing_small.db-wal | ||
testing_user_version_10.db | ||
time.test | ||
total-changes.test | ||
transactions.test | ||
update.test | ||
vector.test | ||
where.test |