Change demo for sqlite serialization

As explained in https://github.com/jart/cosmopolitan/pull/436#issuecomment-1164706893 the original use case is not possible with sqlite serialization, as an in-memory database cannot be shared across multiple processes. Thereby, this use case simply creates a backup of the in-memory database created in '.init.lua' and loads it to do a query.
This commit is contained in:
oltdaniel 2022-06-24 13:29:19 +02:00
parent 710c979bfa
commit da7cab4c28
4 changed files with 31 additions and 34 deletions

View file

@ -9,35 +9,16 @@ HidePath('/usr/share/ssl/')
-- LaunchBrowser('/tool/net/demo/index.html') -- LaunchBrowser('/tool/net/demo/index.html')
-- sql database (see sql.lua) -- sql database (see sql.lua)
function StoreSqlite(database, path) db = sqlite3.open_memory()
local buffer = database:serialize() db:exec[[
return StoreAsset(path, buffer) CREATE TABLE test (
end id INTEGER PRIMARY KEY,
content TEXT
function LoadSqlite(path) );
local database = sqlite3.open_memory() INSERT INTO test (content) VALUES ('Hello World');
local buffer = LoadAsset(path) INSERT INTO test (content) VALUES ('Hello Lua');
database:deserialize(buffer) INSERT INTO test (content) VALUES ('Hello Sqlite3');
return database ]]
end
database = "database.sqlite3"
-- Check if there is already a database
if GetAssetSize(database) ~= nil then
db = LoadSqlite(database)
db:exec[[
INSERT INTO test (content) VALUES ('World');
]]
else
db = sqlite3.open_memory()
db:exec[[
CREATE TABLE test (
id INTEGER PRIMARY KEY,
content TEXT
);
INSERT INTO test (content) VALUES ('Hello');
]]
end
-- this intercepts all requests if it's defined -- this intercepts all requests if it's defined
function OnHttpRequest() function OnHttpRequest()
@ -54,11 +35,6 @@ function OnHttpRequest()
SetHeader('Server', 'redbean!') SetHeader('Server', 'redbean!')
end end
function OnServerStop()
-- make sure we store the database on exit
StoreSqlite(db, database)
end
function Adder(x, y) function Adder(x, y)
return x + y return x + y
end end

View file

@ -0,0 +1,13 @@
if GetAssetSize("backup.sqlite3") == nil then
Write("no backup exists. call <a href='sql-backupstore.lua'>sql-backupstore.lua</a> first.")
return
end
backup = sqlite3.open_memory()
buffer = LoadAsset("backup.sqlite3")
backup:deserialize(buffer)
-- See .init.lua for CREATE TABLE setup.
for row in backup:nrows("SELECT * FROM test") do
Write(row.id.." "..row.content.."<br>")
end

View file

@ -0,0 +1,4 @@
buffer = db:serialize()
StoreAsset("backup.sqlite3", buffer)
Write("backup created. size: "..GetAssetSize("backup.sqlite3"))

View file

@ -167,6 +167,8 @@ o/tinylinux/tool/net/redbean.com: \
o/$(MODE)/tool/net/demo/.init.lua.zip.o \ o/$(MODE)/tool/net/demo/.init.lua.zip.o \
o/$(MODE)/tool/net/demo/.reload.lua.zip.o \ o/$(MODE)/tool/net/demo/.reload.lua.zip.o \
o/$(MODE)/tool/net/demo/sql.lua.zip.o \ o/$(MODE)/tool/net/demo/sql.lua.zip.o \
o/$(MODE)/tool/net/demo/sql-backup.lua.zip.o \
o/$(MODE)/tool/net/demo/sql-backupstore.lua.zip.o \
o/$(MODE)/tool/net/demo/unix-rawsocket.lua.zip.o \ o/$(MODE)/tool/net/demo/unix-rawsocket.lua.zip.o \
o/$(MODE)/tool/net/demo/unix-subprocess.lua.zip.o \ o/$(MODE)/tool/net/demo/unix-subprocess.lua.zip.o \
o/$(MODE)/tool/net/demo/unix-webserver.lua.zip.o \ o/$(MODE)/tool/net/demo/unix-webserver.lua.zip.o \
@ -215,6 +217,8 @@ o/$(MODE)/tool/net/redbean-demo.com.dbg: \
o/$(MODE)/tool/net/largon2.o \ o/$(MODE)/tool/net/largon2.o \
o/$(MODE)/tool/net/net.pkg \ o/$(MODE)/tool/net/net.pkg \
o/$(MODE)/tool/net/demo/sql.lua.zip.o \ o/$(MODE)/tool/net/demo/sql.lua.zip.o \
o/$(MODE)/tool/net/demo/sql-backup.lua.zip.o \
o/$(MODE)/tool/net/demo/sql-backupstore.lua.zip.o \
o/$(MODE)/tool/net/demo/unix-rawsocket.lua.zip.o \ o/$(MODE)/tool/net/demo/unix-rawsocket.lua.zip.o \
o/$(MODE)/tool/net/demo/unix-subprocess.lua.zip.o \ o/$(MODE)/tool/net/demo/unix-subprocess.lua.zip.o \
o/$(MODE)/tool/net/demo/unix-webserver.lua.zip.o \ o/$(MODE)/tool/net/demo/unix-webserver.lua.zip.o \