a very simple sqlite driver
parent
1390a39053
commit
16c4415d4c
|
@ -0,0 +1,80 @@
|
||||||
|
module sqlite
|
||||||
|
|
||||||
|
#flag -lsqlite3
|
||||||
|
#include "sqlite3.h"
|
||||||
|
|
||||||
|
struct C.sqlite3
|
||||||
|
struct C.sqlite3_stmt
|
||||||
|
|
||||||
|
struct DB {
|
||||||
|
mut:
|
||||||
|
conn &C.sqlite3
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Row {
|
||||||
|
pub mut:
|
||||||
|
vals []string
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn connect(path string) DB {
|
||||||
|
db := &C.sqlite3{!}
|
||||||
|
C.sqlite3_open(path.str, &db)
|
||||||
|
return DB {conn: db}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn (db DB) q_int(query string) int {
|
||||||
|
stmt := &C.sqlite3_stmt{!}
|
||||||
|
C.sqlite3_prepare_v2(db.conn, query.str, - 1, &stmt, 0)
|
||||||
|
C.sqlite3_step(stmt)
|
||||||
|
res := C.sqlite3_column_int(stmt, 0)
|
||||||
|
C.sqlite3_finalize(stmt)
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
fn C.sqlite3_column_text(voidptr, int) byteptr
|
||||||
|
|
||||||
|
pub fn (db DB) q_string(query string) string {
|
||||||
|
stmt := &C.sqlite3_stmt{!}
|
||||||
|
C.sqlite3_prepare_v2(db.conn, query.str, - 1, &stmt, 0)
|
||||||
|
C.sqlite3_step(stmt)
|
||||||
|
f := C.sqlite3_column_text(stmt, 0)
|
||||||
|
res := tos_clone(C.sqlite3_column_text(stmt, 0))
|
||||||
|
C.sqlite3_finalize(stmt)
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
fn C.sqlite3_column_count(voidptr) int
|
||||||
|
|
||||||
|
pub fn (db DB) exec(query string) []Row {
|
||||||
|
stmt := &C.sqlite3_stmt{!}
|
||||||
|
C.sqlite3_prepare_v2(db.conn, query.str, - 1, &stmt, 0)
|
||||||
|
nr_cols := C.sqlite3_column_count(stmt)
|
||||||
|
//println('nr cols $nr_cols')
|
||||||
|
mut rows := []Row
|
||||||
|
for {
|
||||||
|
ret := C.sqlite3_step(stmt)
|
||||||
|
if ret != 0x64 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
mut row := Row{}
|
||||||
|
for i in 0..nr_cols {
|
||||||
|
val := tos_clone(C.sqlite3_column_text(stmt, i))
|
||||||
|
row.vals << val
|
||||||
|
println(val)
|
||||||
|
}
|
||||||
|
rows << row
|
||||||
|
}
|
||||||
|
return rows
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn (db DB) exec_one(query string) ?Row {
|
||||||
|
rows := db.exec(query)
|
||||||
|
return rows[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
pub fn (db DB) exec_param(query string, param string) []Row {
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue