Mặc dù nhiều hệ CSDL có thể cài đặt trên RPi, nhưng LUA không thể khai thác trực tiếp các CSDL này mà cần có công cụ trung gian. Trong số các công cụ đó là lsqlite3, lmysql, lsql…
Cài đặt lsqlite3
Trước khi cài lsqlite3, cần phải cài sqlite3.
Mặc dù có thể cài sqlite3 dễ dàng qua dòng lệnh apt-get install sqlite3, nhưng sau đó không thể cài tiếp lsqlite3 vì thiếu file nguồn để biên dịch. Do vậy phải cài đặt sqlite3 bằng cách biên dịch từ source. Các bước tuần tự như sau:
1. Cài đặt lua-5.3
sudo apt-get install libreadline-dev
curl -R -O http://www.lua.org/ftp/lua-5.3.2.tar.gz
tar zxf lua-5.3.2.tar.gz
cd lua-5.3.2
sudo make linux test
sudo make install
Nếu cần mở rộng thư viện utf8 thì tải về thư viện utf8 tại https://github.com/starwing/luautf8. Chép unidata.c và lutf8lib.c vào thư mục src trước khi biên dịch lua.
Cần phải reboot để lua hoạt động đúng.
2. Cài đặt luarock
Luarock giúp cài đặt nhanh chóng nhiều tiện ích cho Raspbian.
wget http://luarocks.org/releases/luarocks-2.3.0.tar.gz tar zxpf luarocks-2.3.0.tar.gz cd luarocks-2.3.0 ./configure sudo make bootstrap sudo luarocks install luasocket
3. Cài đặt sqlite3
wget http://sqlite.org/2016/sqlite-autoconf-3130000.tar.gz tar -xvf sqlite-autoconf-3130000.tar.gz cd sqlite-autoconf-3130000 ./configure sudo make sudo make install
4. Cài đặt lsqlite3
sudo luarocks install lsqlite3
Thí dụ
Tìm các tên bài nhạc có từ đầu tiên, viết thường, là how
sqlite3 = require("lsqlite3") db = sqlite3.open('Chinook.sqlite') for row in db:nrows ("SELECT TrackId, Name, lower(substr(" .. Name .. ", 1, instr(" .. Name .. "||' ', ' ')-1))) as sName FROM Track WHERE sName = 'how'" ) do print( row.TrackId, row.Name ) end
Chạy đoạn mã trên liên tiếp 100 lần trên RPi 3, thời gian thi hành ít hơn 3s. Nếu thêm hàm tacc (C user function: cắt dấu chữ Việt) sau substr và trước lower thì thời gian là 7s. Các hàm lower/upper rất chậm trên chuỗi dài.
Kết quả trả về:
350 How Many More Times 631 How High The Moon 1626 How Many More Times 2296 How The West Was Won And Where It Got Us 3103 How Many Say I 3223 How to Stop an Exploding Man