Um tipo de linha
type User { id: Int, name: Str }
query findUser(name: Str): User[dyn] {
SELECT id, name FROM users WHERE name = {name}
}
proc main(): void {
pooled := hive.sql.pool(hive.sql.DatabaseDriver.SQLite(), "file::memory:?cache=shared", 1, 1)
if pooled is Result.Ok(db) {
using db run raw "CREATE TABLE users (id INTEGER, name TEXT)"
using db run raw "INSERT INTO users (id, name) VALUES (1, 'ada')"
found := using db run findUser("ada")
if found is Result.Ok(users) {
echo users
}
hive.sql.close(db)
} else if pooled is Result.Error(err) {
echo "não foi possível abrir o banco de dados: {err.message}"
}
}
Uma coluna, e nenhuma linha
query insertUser(id: Int, name: Str): void {
INSERT INTO users (id, name) VALUES ({id}, {name})
}
query userNames(): Str[dyn] {
SELECT name FROM users ORDER BY name
}
query deleteUser(id: Int): void {
DELETE FROM users WHERE id = {id}
}
proc main(): void {
opened := hive.sql.pool(hive.sql.DatabaseDriver.SQLite(), "file::memory:?cache=shared", 1, 1)
if opened is Result.Ok(db) {
using db run raw "CREATE TABLE users (id INTEGER, name TEXT)"
using db run insertUser(1, "ada")
using db run insertUser(2, "grace")
if using db run userNames() is Result.Ok(names) {
echo names // um Str[dyn]: a coluna em si
}
if using db run deleteUser(1) is Result.Ok(rows) {
echo "apagou {rows} linha" // um Int: o que a instrução tocou
}
hive.sql.close(db)
}
}