mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
orm: limit 1
test
This commit is contained in:
parent
deb09d95b0
commit
e3f00ff28b
@ -54,10 +54,15 @@ fn test_orm_sqlite() {
|
|||||||
}
|
}
|
||||||
assert nr_peters3 == 1
|
assert nr_peters3 == 1
|
||||||
peters := sql db {
|
peters := sql db {
|
||||||
select from User where name == name // limit 1
|
select from User where name == name
|
||||||
}
|
}
|
||||||
assert peters.len == 1
|
assert peters.len == 1
|
||||||
assert peters[0].name == 'Peter'
|
assert peters[0].name == 'Peter'
|
||||||
|
one_peter := sql db {
|
||||||
|
select from User where name == name limit 1
|
||||||
|
}
|
||||||
|
assert one_peter.name == 'Peter'
|
||||||
|
assert one_peter.id == 2
|
||||||
//
|
//
|
||||||
user := sql db {
|
user := sql db {
|
||||||
select from User where id == 1
|
select from User where id == 1
|
||||||
|
@ -31,8 +31,7 @@ fn (mut p Parser) sql_expr() ast.Expr {
|
|||||||
sym := p.table.get_type_symbol(table_type)
|
sym := p.table.get_type_symbol(table_type)
|
||||||
table_name := sym.name
|
table_name := sym.name
|
||||||
mut where_expr := ast.Expr{}
|
mut where_expr := ast.Expr{}
|
||||||
has_where := p.tok.kind == .name &&
|
has_where := p.tok.kind == .name && p.tok.lit == 'where'
|
||||||
p.tok.lit == 'where'
|
|
||||||
mut query_one := false // one object is returned, not an array
|
mut query_one := false // one object is returned, not an array
|
||||||
if has_where {
|
if has_where {
|
||||||
p.next()
|
p.next()
|
||||||
@ -43,18 +42,11 @@ fn (mut p Parser) sql_expr() ast.Expr {
|
|||||||
if e.op == .eq && e.left is ast.Ident {
|
if e.op == .eq && e.left is ast.Ident {
|
||||||
ident := e.left as ast.Ident
|
ident := e.left as ast.Ident
|
||||||
if ident.name == 'id' {
|
if ident.name == 'id' {
|
||||||
// TODO optional
|
|
||||||
query_one = true
|
query_one = true
|
||||||
typ = table_type
|
|
||||||
// typ = table_type.set_flag(.optional)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !query_one && !is_count {
|
|
||||||
// return an array
|
|
||||||
typ = table.new_type(p.table.find_or_register_array(table_type, 1, p.mod))
|
|
||||||
}
|
|
||||||
if p.tok.kind ==.name && p.tok.lit == 'limit' {
|
if p.tok.kind ==.name && p.tok.lit == 'limit' {
|
||||||
// `limit 1` means that a single object is returned
|
// `limit 1` means that a single object is returned
|
||||||
p.check_name() // `limit`
|
p.check_name() // `limit`
|
||||||
@ -63,6 +55,15 @@ fn (mut p Parser) sql_expr() ast.Expr {
|
|||||||
}
|
}
|
||||||
p.next()
|
p.next()
|
||||||
}
|
}
|
||||||
|
if !query_one && !is_count {
|
||||||
|
// return an array
|
||||||
|
typ = table.new_type(p.table.find_or_register_array(table_type, 1, p.mod))
|
||||||
|
} else if !is_count {
|
||||||
|
// return a single object
|
||||||
|
// TODO optional
|
||||||
|
// typ = table_type.set_flag(.optional)
|
||||||
|
typ = table_type
|
||||||
|
}
|
||||||
p.check(.rcbr)
|
p.check(.rcbr)
|
||||||
// /////////
|
// /////////
|
||||||
// Register this type's fields as variables so they can be used in `where`
|
// Register this type's fields as variables so they can be used in `where`
|
||||||
|
Loading…
Reference in New Issue
Block a user