Pekka Enberg eddc8e2a75 Merge 'perf/ci: add basic tpc-h benchmark' from Jussi Saurio
Doesn't seem to work in CI yet properly (probably `time` utility output
is different on linux), but here's an example local run output on mac.
Notice we panic in `btree.rs` in one of the queries:
```bash
Using existing TPC-H.db file
Running TPC-H benchmark...
Starting TPC-H query timing comparison...
The script might ask you to enter the password for sudo, in order to clear system caches.
Running 1.sql with Limbo...
Running 1.sql with SQLite3...
Limbo real time: 2.21
SQLite3 real time: 1.96
Limbo output:

SQLite3 output:

No output difference
-----------------------------------------------------------
Skipping 2.sql, reason: subquery in where not supported
-----------------------------------------------------------
Running 3.sql with Limbo...
Running 3.sql with SQLite3...
Limbo real time: 4.08
SQLite3 real time: 2.95
Limbo output:

SQLite3 output:

No output difference
-----------------------------------------------------------
Skipping 4.sql, reason: subquery in where not supported
-----------------------------------------------------------
Running 5.sql with Limbo...
Running 5.sql with SQLite3...
Limbo real time: 4.37
SQLite3 real time: 2.89
Limbo output:

SQLite3 output:

No output difference
-----------------------------------------------------------
Running 6.sql with Limbo...
Running 6.sql with SQLite3...
Limbo real time: 2.35
SQLite3 real time: 1.95
Limbo output:

SQLite3 output:

No output difference
-----------------------------------------------------------
Running 7.sql with Limbo...
Running 7.sql with SQLite3...
Limbo real time: 2.36
SQLite3 real time: 2.08
Limbo output:

SQLite3 output:

No output difference
-----------------------------------------------------------
Running 8.sql with Limbo...
Running 8.sql with SQLite3...
Limbo real time: 12.10
SQLite3 real time: 8.04
Limbo output:

SQLite3 output:

No output difference
-----------------------------------------------------------
Running 9.sql with Limbo...
Running 9.sql with SQLite3...
Limbo real time: 29.34
SQLite3 real time: 10.86
Limbo output:
ALGERIA|1998|29295233.7707
ALGERIA|1997|52762473.1280001
ALGERIA|1996|53328474.5168001
ALGERIA|1995|51214356.9348
ALGERIA|1994|52169009.5454001
ALGERIA|1993|51333122.8883999
ALGERIA|1992|53203252.4182999
ARGENTINA|1998|29384458.7504
ARGENTINA|1997|45981195.6821
ARGENTINA|1996|48997927.7816
ARGENTINA|1995|49082188.7182
ARGENTINA|1994|47490431.4357
ARGENTINA|1993|49591543.2561
ARGENTINA|1992|47079630.0749
BRAZIL|1998|29522875.2849
BRAZIL|1997|49830726.1137001
BRAZIL|1996|49660010.6812
BRAZIL|1995|48661796.5732001
BRAZIL|1994|48005015.4903
BRAZIL|1993|50642897.2944999
BRAZIL|1992|49796165.2673
CANADA|1998|30827887.8847
CANADA|1997|48200922.4406001
CANADA|1996|49554205.1958
CANADA|1995|52247758.0634
CANADA|1994|50398007.9934001
CANADA|1993|49295434.7577
CANADA|1992|50755100.1311
CHINA|1998|26232779.0758
CHINA|1997|46180740.9342
CHINA|1996|49535189.5637999
CHINA|1995|45696326.4191
CHINA|1994|45699007.4057
CHINA|1993|44820179.7542999
CHINA|1992|44853598.8
EGYPT|1998|28802425.5049
EGYPT|1997|50669980.5204
EGYPT|1996|49409929.5778
EGYPT|1995|51266322.0907999
EGYPT|1994|49610689.962
EGYPT|1993|50945963.7431999
EGYPT|1992|51820711.9291
ETHIOPIA|1998|26507500.3726
ETHIOPIA|1997|44417449.7821001
ETHIOPIA|1996|44396024.8895
ETHIOPIA|1995|45573214.4916
ETHIOPIA|1994|45069220.5918999
ETHIOPIA|1993|45526099.1928999
ETHIOPIA|1992|44415214.7402
FRANCE|1998|27094664.6850001
FRANCE|1997|47521933.8432999
FRANCE|1996|46879568.39
FRANCE|1995|47457222.4867
FRANCE|1994|46096705.433
FRANCE|1993|45962990.9133
FRANCE|1992|43440538.875
GERMANY|1998|26805454.2551
GERMANY|1997|45707724.7992001
GERMANY|1996|45193561.3894001
GERMANY|1995|44010364.8541
GERMANY|1994|46537140.2347001
GERMANY|1993|47120186.1391
GERMANY|1992|47792976.5344
INDIA|1998|29171438.7556
INDIA|1997|49447171.43
INDIA|1996|48314107.4742
INDIA|1995|48157640.2670999
INDIA|1994|47510322.1694
INDIA|1993|50121088.1220001
INDIA|1992|48429696.926
INDONESIA|1998|28049078.872
INDONESIA|1997|47156405.6367
INDONESIA|1996|43832977.6843001
INDONESIA|1995|47383429.9181
INDONESIA|1994|47310891.6826001
INDONESIA|1993|46222112.2464
INDONESIA|1992|46149893.8672
IRAN|1998|26417181.0269999
IRAN|1997|44502840.2268
IRAN|1996|46959453.7866
IRAN|1995|45002812.1692999
IRAN|1994|45433091.641
IRAN|1993|44172584.8788
IRAN|1992|46657917.9228001
IRAQ|1998|32136725.1368001
IRAQ|1997|53988245.1021001
IRAQ|1996|52484885.6999
IRAQ|1995|50826802.1894
IRAQ|1994|53626739.7554
IRAQ|1993|51327489.4222999
IRAQ|1992|53426847.4636
JAPAN|1998|25437238.7276
JAPAN|1997|44207490.0138999
JAPAN|1996|46682874.9343
JAPAN|1995|45283181.6082
JAPAN|1994|45426265.8305
JAPAN|1993|44621631.1586001
JAPAN|1992|45985318.7576999
JORDAN|1998|23772738.5645
JORDAN|1997|43512430.6899999
JORDAN|1996|44074184.9532999
JORDAN|1995|44879506.6709999
JORDAN|1994|42583604.8272
JORDAN|1993|43264733.7961
JORDAN|1992|44983643.7616
KENYA|1998|27596885.9388
KENYA|1997|43800422.8362999
KENYA|1996|45304179.5469
KENYA|1995|45710986.3243999
KENYA|1994|45545675.3259001
KENYA|1993|43921106.8724
KENYA|1992|47458265.2438001
MOROCCO|1998|25236567.0029
MOROCCO|1997|42658811.0476002
MOROCCO|1996|43329016.5985
MOROCCO|1995|44592882.7362999
MOROCCO|1994|42161453.2719
MOROCCO|1993|44899634.791
MOROCCO|1992|43769529.8111
MOZAMBIQUE|1998|27775252.4025
MOZAMBIQUE|1997|49532331.8161999
MOZAMBIQUE|1996|47312132.3954
MOZAMBIQUE|1995|48505778.1883001
MOZAMBIQUE|1994|47280918.1024001
MOZAMBIQUE|1993|46763612.6601001
MOZAMBIQUE|1992|48404237.7845
PERU|1998|31081623.8101
PERU|1997|51536280.2962
PERU|1996|50970091.6021
PERU|1995|52743689.8273001
PERU|1994|49410457.3558
PERU|1993|53695789.9142
PERU|1992|51357085.5809
ROMANIA|1998|25833567.3851
ROMANIA|1997|47308870.4744001
ROMANIA|1996|49278980.0867
ROMANIA|1995|46424352.8088001
ROMANIA|1994|47193732.0789001
ROMANIA|1993|45462367.0855
ROMANIA|1992|46118290.2659999
RUSSIA|1998|27153133.384
RUSSIA|1997|47950148.5437
RUSSIA|1996|49155236.6337
RUSSIA|1995|47417353.3309
RUSSIA|1994|47547047.0333001
RUSSIA|1993|47568120.3475
RUSSIA|1992|45138673.4933001
SAUDI ARABIA|1998|26552308.9274001
SAUDI ARABIA|1997|47935070.9259001
SAUDI ARABIA|1996|48493831.1925001
SAUDI ARABIA|1995|44926913.9565
SAUDI ARABIA|1994|45759107.7221999
SAUDI ARABIA|1993|45849219.1862
SAUDI ARABIA|1992|47456695.9113998
UNITED KINGDOM|1998|25377312.4879
UNITED KINGDOM|1997|46960767.7209999
UNITED KINGDOM|1996|45076159.6326
UNITED KINGDOM|1995|46592948.4497
UNITED KINGDOM|1994|45650295.2464001
UNITED KINGDOM|1993|44963874.6307001
UNITED KINGDOM|1992|46318296.6940999
UNITED STATES|1998|26004416.0988
UNITED STATES|1997|48191685.5994999
UNITED STATES|1996|45327281.0055001
UNITED STATES|1995|46824650.2317
UNITED STATES|1994|46990075.4818999
UNITED STATES|1993|47777150.1640001
UNITED STATES|1992|45725428.7094999
VIETNAM|1998|26143707.6779
VIETNAM|1997|47682484.7703999
VIETNAM|1996|48394548.176
VIETNAM|1995|49341297.159
VIETNAM|1994|47801518.8178
VIETNAM|1993|48531159.0752
VIETNAM|1992|46569476.7732999
SQLite3 output:
ALGERIA|1998|29295233.7707
ALGERIA|1997|52762473.128
ALGERIA|1996|53328474.5168
ALGERIA|1995|51214356.9348
ALGERIA|1994|52169009.5454
ALGERIA|1993|51333122.8884
ALGERIA|1992|53203252.4183
ARGENTINA|1998|29384458.7504
ARGENTINA|1997|45981195.6821
ARGENTINA|1996|48997927.7816
ARGENTINA|1995|49082188.7182
ARGENTINA|1994|47490431.4357
ARGENTINA|1993|49591543.2561
ARGENTINA|1992|47079630.0749
BRAZIL|1998|29522875.2849
BRAZIL|1997|49830726.1137
BRAZIL|1996|49660010.6812
BRAZIL|1995|48661796.5732
BRAZIL|1994|48005015.4903
BRAZIL|1993|50642897.2945
BRAZIL|1992|49796165.2673
CANADA|1998|30827887.8847
CANADA|1997|48200922.4406
CANADA|1996|49554205.1958
CANADA|1995|52247758.0634
CANADA|1994|50398007.9934
CANADA|1993|49295434.7577
CANADA|1992|50755100.1311
CHINA|1998|26232779.0758
CHINA|1997|46180740.9342
CHINA|1996|49535189.5638
CHINA|1995|45696326.4191
CHINA|1994|45699007.4057
CHINA|1993|44820179.7543
CHINA|1992|44853598.8
EGYPT|1998|28802425.5049
EGYPT|1997|50669980.5204
EGYPT|1996|49409929.5778
EGYPT|1995|51266322.0908
EGYPT|1994|49610689.962
EGYPT|1993|50945963.7432
EGYPT|1992|51820711.9291
ETHIOPIA|1998|26507500.3726
ETHIOPIA|1997|44417449.7821
ETHIOPIA|1996|44396024.8895
ETHIOPIA|1995|45573214.4916
ETHIOPIA|1994|45069220.5919
ETHIOPIA|1993|45526099.1929
ETHIOPIA|1992|44415214.7402
FRANCE|1998|27094664.685
FRANCE|1997|47521933.8433
FRANCE|1996|46879568.39
FRANCE|1995|47457222.4867
FRANCE|1994|46096705.433
FRANCE|1993|45962990.9133
FRANCE|1992|43440538.875
GERMANY|1998|26805454.2551
GERMANY|1997|45707724.7992
GERMANY|1996|45193561.3894
GERMANY|1995|44010364.8541
GERMANY|1994|46537140.2347
GERMANY|1993|47120186.1391
GERMANY|1992|47792976.5344
INDIA|1998|29171438.7556
INDIA|1997|49447171.43
INDIA|1996|48314107.4742
INDIA|1995|48157640.2671
INDIA|1994|47510322.1694
INDIA|1993|50121088.122
INDIA|1992|48429696.926
INDONESIA|1998|28049078.872
INDONESIA|1997|47156405.6367
INDONESIA|1996|43832977.6843
INDONESIA|1995|47383429.9181
INDONESIA|1994|47310891.6826
INDONESIA|1993|46222112.2464
INDONESIA|1992|46149893.8672
IRAN|1998|26417181.027
IRAN|1997|44502840.2268
IRAN|1996|46959453.7866
IRAN|1995|45002812.1693
IRAN|1994|45433091.641
IRAN|1993|44172584.8788
IRAN|1992|46657917.9228
IRAQ|1998|32136725.1368
IRAQ|1997|53988245.1021
IRAQ|1996|52484885.6999
IRAQ|1995|50826802.1894
IRAQ|1994|53626739.7554
IRAQ|1993|51327489.4223
IRAQ|1992|53426847.4636
JAPAN|1998|25437238.7276
JAPAN|1997|44207490.0139
JAPAN|1996|46682874.9343
JAPAN|1995|45283181.6082
JAPAN|1994|45426265.8305
JAPAN|1993|44621631.1586
JAPAN|1992|45985318.7577
JORDAN|1998|23772738.5645
JORDAN|1997|43512430.69
JORDAN|1996|44074184.9533
JORDAN|1995|44879506.671
JORDAN|1994|42583604.8272
JORDAN|1993|43264733.7961
JORDAN|1992|44983643.7616
KENYA|1998|27596885.9388
KENYA|1997|43800422.8363
KENYA|1996|45304179.5469
KENYA|1995|45710986.3244
KENYA|1994|45545675.3259
KENYA|1993|43921106.8724
KENYA|1992|47458265.2438
MOROCCO|1998|25236567.0029
MOROCCO|1997|42658811.0476
MOROCCO|1996|43329016.5985
MOROCCO|1995|44592882.7363
MOROCCO|1994|42161453.2719
MOROCCO|1993|44899634.791
MOROCCO|1992|43769529.8111
MOZAMBIQUE|1998|27775252.4025
MOZAMBIQUE|1997|49532331.8162
MOZAMBIQUE|1996|47312132.3954
MOZAMBIQUE|1995|48505778.1883
MOZAMBIQUE|1994|47280918.1024
MOZAMBIQUE|1993|46763612.6601
MOZAMBIQUE|1992|48404237.7845
PERU|1998|31081623.8101
PERU|1997|51536280.2962
PERU|1996|50970091.6021
PERU|1995|52743689.8273
PERU|1994|49410457.3558
PERU|1993|53695789.9142
PERU|1992|51357085.5809
ROMANIA|1998|25833567.3851
ROMANIA|1997|47308870.4744
ROMANIA|1996|49278980.0867
ROMANIA|1995|46424352.8088
ROMANIA|1994|47193732.0789
ROMANIA|1993|45462367.0855
ROMANIA|1992|46118290.266
RUSSIA|1998|27153133.384
RUSSIA|1997|47950148.5437
RUSSIA|1996|49155236.6337
RUSSIA|1995|47417353.3309
RUSSIA|1994|47547047.0333
RUSSIA|1993|47568120.3475
RUSSIA|1992|45138673.4933
SAUDI ARABIA|1998|26552308.9274
SAUDI ARABIA|1997|47935070.9259
SAUDI ARABIA|1996|48493831.1925
SAUDI ARABIA|1995|44926913.9565
SAUDI ARABIA|1994|45759107.7222
SAUDI ARABIA|1993|45849219.1862
SAUDI ARABIA|1992|47456695.9114
UNITED KINGDOM|1998|25377312.4879
UNITED KINGDOM|1997|46960767.721
UNITED KINGDOM|1996|45076159.6326
UNITED KINGDOM|1995|46592948.4497
UNITED KINGDOM|1994|45650295.2464
UNITED KINGDOM|1993|44963874.6307
UNITED KINGDOM|1992|46318296.6941
UNITED STATES|1998|26004416.0988
UNITED STATES|1997|48191685.5995
UNITED STATES|1996|45327281.0055
UNITED STATES|1995|46824650.2317
UNITED STATES|1994|46990075.4819
UNITED STATES|1993|47777150.164
UNITED STATES|1992|45725428.7095
VIETNAM|1998|26143707.6779
VIETNAM|1997|47682484.7704
VIETNAM|1996|48394548.176
VIETNAM|1995|49341297.159
VIETNAM|1994|47801518.8178
VIETNAM|1993|48531159.0752
VIETNAM|1992|46569476.7733
Output difference:
2,3c2,3
< ALGERIA|1997|52762473.1280001
< ALGERIA|1996|53328474.5168001
---
> ALGERIA|1997|52762473.128
> ALGERIA|1996|53328474.5168
5,7c5,7
< ALGERIA|1994|52169009.5454001
< ALGERIA|1993|51333122.8883999
< ALGERIA|1992|53203252.4182999
---
> ALGERIA|1994|52169009.5454
> ALGERIA|1993|51333122.8884
> ALGERIA|1992|53203252.4183
16c16
< BRAZIL|1997|49830726.1137001
---
> BRAZIL|1997|49830726.1137
18c18
< BRAZIL|1995|48661796.5732001
---
> BRAZIL|1995|48661796.5732
20c20
< BRAZIL|1993|50642897.2944999
---
> BRAZIL|1993|50642897.2945
23c23
< CANADA|1997|48200922.4406001
---
> CANADA|1997|48200922.4406
26c26
< CANADA|1994|50398007.9934001
---
> CANADA|1994|50398007.9934
31c31
< CHINA|1996|49535189.5637999
---
> CHINA|1996|49535189.5638
34c34
< CHINA|1993|44820179.7542999
---
> CHINA|1993|44820179.7543
39c39
< EGYPT|1995|51266322.0907999
---
> EGYPT|1995|51266322.0908
41c41
< EGYPT|1993|50945963.7431999
---
> EGYPT|1993|50945963.7432
44c44
< ETHIOPIA|1997|44417449.7821001
---
> ETHIOPIA|1997|44417449.7821
47,48c47,48
< ETHIOPIA|1994|45069220.5918999
< ETHIOPIA|1993|45526099.1928999
---
> ETHIOPIA|1994|45069220.5919
> ETHIOPIA|1993|45526099.1929
50,51c50,51
< FRANCE|1998|27094664.6850001
< FRANCE|1997|47521933.8432999
---
> FRANCE|1998|27094664.685
> FRANCE|1997|47521933.8433
58,59c58,59
< GERMANY|1997|45707724.7992001
< GERMANY|1996|45193561.3894001
---
> GERMANY|1997|45707724.7992
> GERMANY|1996|45193561.3894
61c61
< GERMANY|1994|46537140.2347001
---
> GERMANY|1994|46537140.2347
67c67
< INDIA|1995|48157640.2670999
---
> INDIA|1995|48157640.2671
69c69
< INDIA|1993|50121088.1220001
---
> INDIA|1993|50121088.122
73c73
< INDONESIA|1996|43832977.6843001
---
> INDONESIA|1996|43832977.6843
75c75
< INDONESIA|1994|47310891.6826001
---
> INDONESIA|1994|47310891.6826
78c78
< IRAN|1998|26417181.0269999
---
> IRAN|1998|26417181.027
81c81
< IRAN|1995|45002812.1692999
---
> IRAN|1995|45002812.1693
84,86c84,86
< IRAN|1992|46657917.9228001
< IRAQ|1998|32136725.1368001
< IRAQ|1997|53988245.1021001
---
> IRAN|1992|46657917.9228
> IRAQ|1998|32136725.1368
> IRAQ|1997|53988245.1021
90c90
< IRAQ|1993|51327489.4222999
---
> IRAQ|1993|51327489.4223
93c93
< JAPAN|1997|44207490.0138999
---
> JAPAN|1997|44207490.0139
97,98c97,98
< JAPAN|1993|44621631.1586001
< JAPAN|1992|45985318.7576999
---
> JAPAN|1993|44621631.1586
> JAPAN|1992|45985318.7577
100,102c100,102
< JORDAN|1997|43512430.6899999
< JORDAN|1996|44074184.9532999
< JORDAN|1995|44879506.6709999
---
> JORDAN|1997|43512430.69
> JORDAN|1996|44074184.9533
> JORDAN|1995|44879506.671
107c107
< KENYA|1997|43800422.8362999
---
> KENYA|1997|43800422.8363
109,110c109,110
< KENYA|1995|45710986.3243999
< KENYA|1994|45545675.3259001
---
> KENYA|1995|45710986.3244
> KENYA|1994|45545675.3259
112c112
< KENYA|1992|47458265.2438001
---
> KENYA|1992|47458265.2438
114c114
< MOROCCO|1997|42658811.0476002
---
> MOROCCO|1997|42658811.0476
116c116
< MOROCCO|1995|44592882.7362999
---
> MOROCCO|1995|44592882.7363
121c121
< MOZAMBIQUE|1997|49532331.8161999
---
> MOZAMBIQUE|1997|49532331.8162
123,125c123,125
< MOZAMBIQUE|1995|48505778.1883001
< MOZAMBIQUE|1994|47280918.1024001
< MOZAMBIQUE|1993|46763612.6601001
---
> MOZAMBIQUE|1995|48505778.1883
> MOZAMBIQUE|1994|47280918.1024
> MOZAMBIQUE|1993|46763612.6601
130c130
< PERU|1995|52743689.8273001
---
> PERU|1995|52743689.8273
135c135
< ROMANIA|1997|47308870.4744001
---
> ROMANIA|1997|47308870.4744
137,138c137,138
< ROMANIA|1995|46424352.8088001
< ROMANIA|1994|47193732.0789001
---
> ROMANIA|1995|46424352.8088
> ROMANIA|1994|47193732.0789
140c140
< ROMANIA|1992|46118290.2659999
---
> ROMANIA|1992|46118290.266
145c145
< RUSSIA|1994|47547047.0333001
---
> RUSSIA|1994|47547047.0333
147,150c147,150
< RUSSIA|1992|45138673.4933001
< SAUDI ARABIA|1998|26552308.9274001
< SAUDI ARABIA|1997|47935070.9259001
< SAUDI ARABIA|1996|48493831.1925001
---
> RUSSIA|1992|45138673.4933
> SAUDI ARABIA|1998|26552308.9274
> SAUDI ARABIA|1997|47935070.9259
> SAUDI ARABIA|1996|48493831.1925
152c152
< SAUDI ARABIA|1994|45759107.7221999
---
> SAUDI ARABIA|1994|45759107.7222
154c154
< SAUDI ARABIA|1992|47456695.9113998
---
> SAUDI ARABIA|1992|47456695.9114
156c156
< UNITED KINGDOM|1997|46960767.7209999
---
> UNITED KINGDOM|1997|46960767.721
159,161c159,161
< UNITED KINGDOM|1994|45650295.2464001
< UNITED KINGDOM|1993|44963874.6307001
< UNITED KINGDOM|1992|46318296.6940999
---
> UNITED KINGDOM|1994|45650295.2464
> UNITED KINGDOM|1993|44963874.6307
> UNITED KINGDOM|1992|46318296.6941
163,164c163,164
< UNITED STATES|1997|48191685.5994999
< UNITED STATES|1996|45327281.0055001
---
> UNITED STATES|1997|48191685.5995
> UNITED STATES|1996|45327281.0055
166,168c166,168
< UNITED STATES|1994|46990075.4818999
< UNITED STATES|1993|47777150.1640001
< UNITED STATES|1992|45725428.7094999
---
> UNITED STATES|1994|46990075.4819
> UNITED STATES|1993|47777150.164
> UNITED STATES|1992|45725428.7095
170c170
< VIETNAM|1997|47682484.7703999
---
> VIETNAM|1997|47682484.7704
175c175
< VIETNAM|1992|46569476.7732999
---
> VIETNAM|1992|46569476.7733
-----------------------------------------------------------
Running 10.sql with Limbo...
Running 10.sql with SQLite3...
Limbo real time: 3.48
SQLite3 real time: 2.85
Limbo output:

SQLite3 output:

No output difference
-----------------------------------------------------------
Skipping 11.sql, reason: subquery in where not supported
-----------------------------------------------------------
Running 12.sql with Limbo...
Running 12.sql with SQLite3...
Limbo real time: 2.54
SQLite3 real time: 1.99
Limbo output:

SQLite3 output:

No output difference
-----------------------------------------------------------
Running 13.sql with Limbo...
Running 13.sql with SQLite3...
Limbo real time: 3.64
SQLite3 real time: 4.07
Limbo output:

thread 'main' panicked at core/storage/btree.rs:5124:13:
slice index starts at 128 but ends at 126
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
time: command terminated abnormally
SQLite3 output:
0|50004
9|6642
10|6578
11|6010
8|5916
12|5598
13|5009
19|4704
7|4677
17|4604
20|4581
18|4523
14|4470
15|4449
16|4339
21|4173
22|3717
6|3295
23|3196
24|2647
25|2120
5|1962
26|1632
27|1196
4|985
28|873
29|595
3|412
30|370
31|233
32|146
2|133
33|83
34|43
35|28
36|20
1|19
37|6
38|4
40|3
39|3
41|2
Output difference:
1,5c1,42
<
< thread 'main' panicked at core/storage/btree.rs:5124:13:
< slice index starts at 128 but ends at 126
< note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
< time: command terminated abnormally
---
> 0|50004
> 9|6642
> 10|6578
> 11|6010
> 8|5916
> 12|5598
> 13|5009
> 19|4704
> 7|4677
> 17|4604
> 20|4581
> 18|4523
> 14|4470
> 15|4449
> 16|4339
> 21|4173
> 22|3717
> 6|3295
> 23|3196
> 24|2647
> 25|2120
> 5|1962
> 26|1632
> 27|1196
> 4|985
> 28|873
> 29|595
> 3|412
> 30|370
> 31|233
> 32|146
> 2|133
> 33|83
> 34|43
> 35|28
> 36|20
> 1|19
> 37|6
> 38|4
> 40|3
> 39|3
> 41|2
-----------------------------------------------------------
Running 14.sql with Limbo...
Running 14.sql with SQLite3...
Limbo real time: 2.21
SQLite3 real time: 1.89
Limbo output:

SQLite3 output:

No output difference
-----------------------------------------------------------
Skipping 15.sql, reason: views not supported
-----------------------------------------------------------
Skipping 16.sql, reason: subquery in where not supported
-----------------------------------------------------------
Skipping 17.sql, reason: subquery in where not supported
-----------------------------------------------------------
Skipping 18.sql, reason: subquery in where not supported
-----------------------------------------------------------
Skipping 19.sql, reason: bad-query-plan-takes-forever
-----------------------------------------------------------
Skipping 20.sql, reason: subquery in where not supported
-----------------------------------------------------------
Skipping 21.sql, reason: subquery in where not supported
-----------------------------------------------------------
Skipping 22.sql, reason: subquery in where not supported
-----------------------------------------------------------
-----------------------------------------------------------
TPC-H query timing comparison completed.
```

Closes #1492
2025-05-16 13:30:22 +03:00
2025-05-15 09:59:46 +03:00
2025-05-15 09:59:46 +03:00
2025-05-15 09:59:46 +03:00
2025-03-29 14:46:11 +02:00
2025-05-15 17:09:49 +03:00
2025-05-15 09:59:46 +03:00
2025-04-26 09:14:24 +03:00
2025-05-15 09:59:46 +03:00
2025-01-14 18:37:26 +02:00
2025-04-12 17:47:16 -03:00
2025-04-15 12:45:46 -03:00
2025-05-14 09:49:05 +03:00
2025-05-14 09:49:05 +03:00
2025-05-14 11:30:44 +03:00
2025-04-21 23:05:01 -03:00
2025-05-02 19:26:44 -03:00
2025-01-30 18:24:19 -03:00
2024-05-07 16:33:44 -03:00
2025-03-30 18:58:33 +03:00
2025-04-22 21:36:07 -04:00
2024-07-12 13:07:34 -07:00
2024-07-12 12:38:56 -07:00
2025-04-22 12:11:23 +03:00
2025-04-23 10:32:38 +03:00

Limbo

Project Limbo

Limbo is a project to build the modern evolution of SQLite.

PyPI PyPI PyPI

Chat with developers on Discord


Features and Roadmap

Limbo is a work-in-progress, in-process OLTP database engine library written in Rust that has:

  • Asynchronous I/O support on Linux with io_uring
  • SQLite compatibility [doc] for SQL dialect, file formats, and the C API
  • Language bindings for JavaScript/WebAssembly, Rust, Go, Python, and Java
  • OS support for Linux, macOS, and Windows

In the future, we will be also working on:

  • Integrated vector search for embeddings and vector similarity.
  • BEGIN CONCURRENT for improved write throughput.
  • Improved schema management including better ALTER support and strict column types by default.

Getting Started

💻 Command Line
You can install the latest `limbo` release with:
curl --proto '=https' --tlsv1.2 -LsSf \
  https://github.com/tursodatabase/limbo/releases/latest/download/limbo_cli-installer.sh | sh

Then launch the shell to execute SQL statements:

Limbo
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database
limbo> CREATE TABLE users (id INT PRIMARY KEY, username TEXT);
limbo> INSERT INTO users VALUES (1, 'alice');
limbo> INSERT INTO users VALUES (2, 'bob');
limbo> SELECT * FROM users;
1|alice
2|bob

You can also build and run the latest development version with:

cargo run
🦀 Rust
cargo add limbo

Example usage:

let db = Builder::new_local("sqlite.db").build().await?;
let conn = db.connect()?;

let res = conn.query("SELECT * FROM users", ()).await?;
JavaScript
npm i limbo-wasm

Example usage:

import { Database } from 'limbo-wasm';

const db = new Database('sqlite.db');
const stmt = db.prepare('SELECT * FROM users');
const users = stmt.all();
console.log(users);
🐍 Python
pip install pylimbo

Example usage:

import limbo

con = limbo.connect("sqlite.db")
cur = con.cursor()
res = cur.execute("SELECT * FROM users")
print(res.fetchone())
🐹 Go
  1. Clone the repository
  2. Build the library and set your LD_LIBRARY_PATH to include limbo's target directory
cargo build --package limbo-go
export LD_LIBRARY_PATH=/path/to/limbo/target/debug:$LD_LIBRARY_PATH
  1. Use the driver
go get github.com/tursodatabase/limbo
go install github.com/tursodatabase/limbo

Example usage:

import (
    "database/sql"
    _"github.com/tursodatabase/limbo"
)

conn, _ = sql.Open("sqlite3", "sqlite.db")
defer conn.Close()

stmt, _ := conn.Prepare("select * from users")
defer stmt.Close()

rows, _ = stmt.Query()
for rows.Next() {
    var id int
    var username string
    _ := rows.Scan(&id, &username)
    fmt.Printf("User: ID: %d, Username: %s\n", id, username)
}
Java

We integrated Limbo into JDBC. For detailed instructions on how to use Limbo with java, please refer to the README.md under bindings/java.

Contributing

We'd love to have you contribute to Limbo! Please check out the contribution guide to get started.

FAQ

How is Limbo different from Turso's libSQL?

Limbo is a project to build the modern evolution of SQLite in Rust, with a strong open contribution focus and features like native async support, vector search, and more. The libSQL project is also an attempt to evolve SQLite in a similar direction, but through a fork rather than a rewrite.

Rewriting SQLite in Rust started as an unassuming experiment, and due to its incredible success, replaces libSQL as our intended direction. At this point, libSQL is production ready, Limbo is not - although it is evolving rapidly. As the project starts to near production readiness, we plan to rename it to just "Turso". More details here.

Publications

  • Pekka Enberg, Sasu Tarkoma, Jon Crowcroft Ashwin Rao (2024). Serverless Runtime / Database Co-Design With Asynchronous I/O. In EdgeSys 24. [PDF]
  • Pekka Enberg, Sasu Tarkoma, and Ashwin Rao (2023). Towards Database and Serverless Runtime Co-Design. In CoNEXT-SW 23. [PDF] [Slides]

License

This project is licensed under the MIT license.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Limbo by you, shall be licensed as MIT, without any additional terms or conditions.

Contributors

Thanks to all the contributors to Limbo!

Description
No description provided
Readme 43 MiB
Languages
Rust 76.8%
Tcl 6.6%
C 6.4%
Dart 2.4%
Java 2.3%
Other 5.3%