import "sqlite" for Database
import "io" for File
foreign class Host {
foreign static signalDone()
}
var mainFiber = Fiber.new {
var db = Database.new()
var dbPath = "test.db"
var isDone = false
if (File.exists(dbPath)) File.delete(dbPath)
System.print("--- Starting SQLite CRUD Example ---")
db.open(dbPath) { |err|
if (err) {
System.print("Error opening database: %(err)")
isDone = true
return
}
System.print("Database opened successfully at '%(dbPath)'.")
var createSql = "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT);"
db.exec(createSql) { |err|
if (err) {
System.print("Error creating table: %(err)")
isDone = true
return
}
System.print("Table 'users' created.")
// Insert and read 1000 times
var insertCount = 0
var doInsertAndRead
doInsertAndRead = Fn.new {
if (insertCount >= 100000) {
// Finished, close db
db.close() { |err|
if (err) {
System.print("Error closing database: %(err)")
} else {
System.print("\nDatabase closed successfully.")
}
System.print("\n--- SQLite CRUD Example Finished ---")
isDone = true
}
return
}
var name = "User_%(insertCount)"
var email = "user%(insertCount)@example.com"
var insertSql = "INSERT INTO users (name, email) VALUES ('%(name)', '%(email)');"
db.exec(insertSql) { |err|
if (err) {
System.print("Error inserting user %(name): %(err)")
isDone = true
return
}
db.query("SELECT * FROM users WHERE name = '%(name)';") { |err, rows|
if (err) {
System.print("Error querying user %(name): %(err)")
isDone = true
return
}
for (row in rows) {
System.print("Inserted and read: ID: %(row["id"]), Name: %(row["name"]), Email: %(row["email"])")
}
insertCount = insertCount + 1
doInsertAndRead.call()
}
}
}
doInsertAndRead.call()
}
}
while (!isDone) Fiber.yield()
Host.signalDone()
}