Initial project import
This commit is contained in:
commit
23f2d29e32
11957 files changed
+1754577
No files matched your search
@@ -0,0 +1,204 @@
|
||||
// vtest build: present_sqlite3?
|
||||
import db.sqlite
|
||||
import orm
|
||||
import os
|
||||
|
||||
type Connection = sqlite.DB
|
||||
|
||||
struct User {
|
||||
pub:
|
||||
id int @[primary; sql: serial]
|
||||
name string
|
||||
last_name ?string
|
||||
}
|
||||
|
||||
type Content = []u8 | string
|
||||
|
||||
struct Host {
|
||||
pub mut:
|
||||
db Connection
|
||||
}
|
||||
|
||||
fn (back Host) get_users() []User {
|
||||
return []
|
||||
}
|
||||
|
||||
fn create_host(db Connection) !Host {
|
||||
sql db {
|
||||
create table User
|
||||
}!
|
||||
|
||||
return Host{
|
||||
db: db
|
||||
}
|
||||
}
|
||||
|
||||
fn test_sqlite() {
|
||||
mut db := sqlite.connect(':memory:') or { panic(err) }
|
||||
assert db.is_open
|
||||
assert db.validate()!
|
||||
db.exec('drop table if exists users')!
|
||||
db.exec("create table users (id integer primary key, name text default '', last_name text null default null);")!
|
||||
db.exec("insert into users (name) values ('Sam')")!
|
||||
assert db.last_insert_rowid() == 1
|
||||
assert db.get_affected_rows_count() == 1
|
||||
db.exec("insert into users (name) values ('Peter')")!
|
||||
assert db.last_insert_rowid() == 2
|
||||
db.exec("insert into users (name) values ('Kate')")!
|
||||
assert db.last_insert_rowid() == 3
|
||||
db.exec_param('insert into users (name) values (?)', 'Tom')!
|
||||
assert db.last_insert_rowid() == 4
|
||||
nr_users := db.q_int('select count(*) from users')!
|
||||
assert nr_users == 4
|
||||
name := db.q_string('select name from users where id = 1')!
|
||||
assert name == 'Sam'
|
||||
username := db.exec_param('select name from users where id = ?', '1')!
|
||||
assert username[0].vals[0] == 'Sam'
|
||||
|
||||
// this insert will be rejected due to duplicated id
|
||||
db.exec("insert into users (id,name) values (1,'Silly')")!
|
||||
assert db.get_affected_rows_count() == 0
|
||||
|
||||
mut users := db.exec('select * from users')!
|
||||
// dump(users)
|
||||
assert users.len == 4
|
||||
code := db.exec_none('vacuum')
|
||||
assert code == 101
|
||||
user := db.exec_one('select * from users where id = 3') or { panic(err) }
|
||||
// dump(user)
|
||||
assert user.vals.len == 3
|
||||
|
||||
db.exec("update users set name='zzzz' where name='qqqq'")!
|
||||
assert db.get_affected_rows_count() == 0
|
||||
|
||||
db.exec("update users set name='Peter1' where name='Peter'")!
|
||||
assert db.get_affected_rows_count() == 1
|
||||
db.exec_param_many('update users set name=? where name=?', ['Peter', 'Peter1'])!
|
||||
assert db.get_affected_rows_count() == 1
|
||||
|
||||
db.exec("delete from users where name='qqqq'")!
|
||||
assert db.get_affected_rows_count() == 0
|
||||
|
||||
db.exec("delete from users where name='Sam'")!
|
||||
assert db.get_affected_rows_count() == 1
|
||||
|
||||
// transaction test
|
||||
db.begin()!
|
||||
db.exec("insert into users (name) values ('John')")!
|
||||
assert db.last_insert_rowid() == 5
|
||||
db.savepoint('new_savepoint')!
|
||||
db.exec("insert into users (name) values ('Kitty')")!
|
||||
assert db.last_insert_rowid() == 6
|
||||
db.rollback_to('new_savepoint')!
|
||||
db.exec("insert into users (name) values ('Mars')")!
|
||||
assert db.last_insert_rowid() == 6
|
||||
db.commit()!
|
||||
users = db.exec('select * from users')!
|
||||
// dump(users)
|
||||
assert users.len == 5
|
||||
|
||||
db.close() or { panic(err) }
|
||||
assert !db.is_open
|
||||
}
|
||||
|
||||
fn test_can_access_sqlite_result_consts() {
|
||||
assert sqlite.sqlite_ok == 0
|
||||
assert sqlite.sqlite_error == 1
|
||||
// assert sqlite.misuse == 21
|
||||
assert sqlite.sqlite_row == 100
|
||||
assert sqlite.sqlite_done == 101
|
||||
}
|
||||
|
||||
fn test_alias_db() {
|
||||
mut host := create_host(sqlite.connect(':memory:')!)!
|
||||
host.db.close()!
|
||||
assert true
|
||||
}
|
||||
|
||||
fn test_exec_param_many() {
|
||||
mut db := sqlite.connect(':memory:') or { panic(err) }
|
||||
assert db.is_open
|
||||
db.exec('drop table if exists users')!
|
||||
db.exec("create table users (id integer primary key, name text default '' unique);")!
|
||||
db.exec("insert into users (name) values ('Sam')")!
|
||||
db.exec_param_many('insert into users (id, name) values (?, ?)', [
|
||||
'60',
|
||||
'Sam',
|
||||
]) or {
|
||||
assert err.code() == 19 // constraint failure
|
||||
db.close()!
|
||||
return
|
||||
}
|
||||
db.close()!
|
||||
assert false
|
||||
}
|
||||
|
||||
fn test_exec_param_many2() {
|
||||
mut db := sqlite.connect(':memory:') or { panic(err) }
|
||||
assert db.is_open
|
||||
db.exec('drop table if exists users')!
|
||||
db.exec("create table users (id integer primary key, name text default '' unique);")!
|
||||
db.exec_param_many('insert into users (id, name) values (?, ?)', [
|
||||
['60', 'Sam'],
|
||||
['61', 'Foo'],
|
||||
['62', 'Bar'],
|
||||
])!
|
||||
count := db.q_int('select count(*) from users')!
|
||||
assert count == 3
|
||||
|
||||
db.close()!
|
||||
}
|
||||
|
||||
fn test_tables() {
|
||||
mut db := sqlite.connect(':memory:') or { panic(err) }
|
||||
db.exec('create table alpha (id integer)')!
|
||||
db.exec('create table beta (id integer)')!
|
||||
tbl := db.tables()!
|
||||
assert tbl == ['alpha', 'beta']
|
||||
db.close()!
|
||||
}
|
||||
|
||||
fn test_columns() {
|
||||
mut db := sqlite.connect(':memory:') or { panic(err) }
|
||||
db.exec('create table items (id integer primary key, name text, price real)')!
|
||||
cols := db.columns('items')!
|
||||
assert cols == ['id', 'name', 'price']
|
||||
db.close()!
|
||||
}
|
||||
|
||||
fn test_schema() {
|
||||
mut db := sqlite.connect(':memory:') or { panic(err) }
|
||||
db.exec('create table things (id integer primary key, label text)')!
|
||||
s := db.schema('things')!
|
||||
assert s.contains('CREATE TABLE things')
|
||||
// empty table name returns all objects
|
||||
all := db.schema('')!
|
||||
assert all.contains('CREATE TABLE things')
|
||||
db.close()!
|
||||
}
|
||||
|
||||
fn test_db_size() {
|
||||
tmp := os.join_path(os.temp_dir(), 'test_db_size.db')
|
||||
defer {
|
||||
os.rm(tmp) or {}
|
||||
}
|
||||
mut db := sqlite.connect(tmp) or { panic(err) }
|
||||
db.exec('create table t (id integer)')!
|
||||
sz := db.db_size()!
|
||||
assert sz > 0
|
||||
db.close()!
|
||||
}
|
||||
|
||||
fn test_orm_transaction_interface() {
|
||||
mut db := sqlite.connect(':memory:') or { panic(err) }
|
||||
defer {
|
||||
db.close() or {}
|
||||
}
|
||||
|
||||
mut conn := orm.TransactionalConnection(db)
|
||||
mut tx := orm.begin(mut conn)!
|
||||
tx.transaction[int](fn (mut tx orm.Tx) !int {
|
||||
return 1
|
||||
})!
|
||||
tx.commit()!
|
||||
}
|
||||
Reference in new issue
Block a user