sqlite: add `close` method, and an `is_open` field (#7382)
parent
6c341a77f5
commit
c831711a0e
|
@ -20,8 +20,10 @@ struct C.sqlite3_stmt {
|
||||||
|
|
||||||
//
|
//
|
||||||
pub struct DB {
|
pub struct DB {
|
||||||
|
pub mut:
|
||||||
|
is_open bool
|
||||||
mut:
|
mut:
|
||||||
conn &C.sqlite3
|
conn &C.sqlite3
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (db DB) str() string {
|
pub fn (db DB) str() string {
|
||||||
|
@ -63,7 +65,7 @@ fn C.sqlite3_errstr(int) charptr
|
||||||
|
|
||||||
fn C.sqlite3_free(voidptr)
|
fn C.sqlite3_free(voidptr)
|
||||||
|
|
||||||
// Opens the connection with a database.
|
// connect Opens the connection with a database.
|
||||||
pub fn connect(path string) ?DB {
|
pub fn connect(path string) ?DB {
|
||||||
db := &C.sqlite3(0)
|
db := &C.sqlite3(0)
|
||||||
if C.sqlite3_open(path.str, &db) != 0 {
|
if C.sqlite3_open(path.str, &db) != 0 {
|
||||||
|
@ -71,9 +73,23 @@ pub fn connect(path string) ?DB {
|
||||||
}
|
}
|
||||||
return DB{
|
return DB{
|
||||||
conn: db
|
conn: db
|
||||||
|
is_open: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// close Closes the DB.
|
||||||
|
// TODO: For all functions, determine whether the connection is
|
||||||
|
// closed first, and determine what to do if it is
|
||||||
|
pub fn (mut db DB) close() ?bool {
|
||||||
|
code := C.sqlite3_close(db.conn)
|
||||||
|
if code == 0 {
|
||||||
|
db.is_open = false
|
||||||
|
} else {
|
||||||
|
return error('sqlite db error: failed to close with code: $code')
|
||||||
|
}
|
||||||
|
return true // successfully closed
|
||||||
|
}
|
||||||
|
|
||||||
// Only for V ORM
|
// Only for V ORM
|
||||||
fn (db DB) init_stmt(query string) &C.sqlite3_stmt {
|
fn (db DB) init_stmt(query string) &C.sqlite3_stmt {
|
||||||
stmt := &C.sqlite3_stmt(0)
|
stmt := &C.sqlite3_stmt(0)
|
||||||
|
|
|
@ -4,9 +4,10 @@ fn test_sqlite() {
|
||||||
$if !linux {
|
$if !linux {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
db := sqlite.connect(':memory:') or {
|
mut db := sqlite.connect(':memory:') or {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
assert db.is_open
|
||||||
db.exec('drop table if exists users')
|
db.exec('drop table if exists users')
|
||||||
db.exec("create table users (id integer primary key, name text default '');")
|
db.exec("create table users (id integer primary key, name text default '');")
|
||||||
db.exec("insert into users (name) values ('Sam')")
|
db.exec("insert into users (name) values ('Sam')")
|
||||||
|
@ -25,4 +26,8 @@ fn test_sqlite() {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
assert user.vals.len == 2
|
assert user.vals.len == 2
|
||||||
|
db.close() or {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
assert !db.is_open
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue