|
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()
|
|
}
|
|
|