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