72 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			V
		
	
	
import orm
 | 
						|
import sqlite
 | 
						|
import v.ast
 | 
						|
 | 
						|
fn test_sqlite_orm() {
 | 
						|
	sdb := sqlite.connect(':memory:') or { panic(err) }
 | 
						|
	db := orm.Connection(sdb)
 | 
						|
	db.create('Test', [
 | 
						|
		orm.TableField{
 | 
						|
			name: 'id'
 | 
						|
			typ: ast.int_type_idx
 | 
						|
			attrs: [
 | 
						|
				StructAttribute{
 | 
						|
					name: 'primary'
 | 
						|
				},
 | 
						|
				StructAttribute{
 | 
						|
					name: 'sql'
 | 
						|
					has_arg: true
 | 
						|
					kind: .plain
 | 
						|
					arg: 'serial'
 | 
						|
				},
 | 
						|
			]
 | 
						|
		},
 | 
						|
		orm.TableField{
 | 
						|
			name: 'name'
 | 
						|
			typ: ast.string_type_idx
 | 
						|
			attrs: []
 | 
						|
		},
 | 
						|
		orm.TableField{
 | 
						|
			name: 'age'
 | 
						|
			typ: ast.i64_type_idx
 | 
						|
		},
 | 
						|
	]) or { panic(err) }
 | 
						|
 | 
						|
	db.insert('Test', orm.QueryData{
 | 
						|
		fields: ['name', 'age']
 | 
						|
		data: [orm.string_to_primitive('Louis'), orm.i64_to_primitive(100)]
 | 
						|
	}) or { panic(err) }
 | 
						|
 | 
						|
	res := db.@select(orm.SelectConfig{
 | 
						|
		table: 'Test'
 | 
						|
		has_where: true
 | 
						|
		fields: ['id', 'name', 'age']
 | 
						|
		types: [ast.int_type_idx, ast.string_type_idx, ast.i64_type_idx]
 | 
						|
	}, orm.QueryData{}, orm.QueryData{
 | 
						|
		fields: ['name', 'age']
 | 
						|
		data: [orm.Primitive('Louis'), i64(100)]
 | 
						|
		types: [ast.string_type_idx, ast.i64_type_idx]
 | 
						|
		is_and: [true, true]
 | 
						|
		kinds: [.eq, .eq]
 | 
						|
	}) or { panic(err) }
 | 
						|
 | 
						|
	id := res[0][0]
 | 
						|
	name := res[0][1]
 | 
						|
	age := res[0][2]
 | 
						|
 | 
						|
	assert id is int
 | 
						|
	if id is int {
 | 
						|
		assert id == 1
 | 
						|
	}
 | 
						|
 | 
						|
	assert name is string
 | 
						|
	if name is string {
 | 
						|
		assert name == 'Louis'
 | 
						|
	}
 | 
						|
 | 
						|
	assert age is i64
 | 
						|
	if age is i64 {
 | 
						|
		assert age == 100
 | 
						|
	}
 | 
						|
}
 |