checker: fix orm cast check (#12018)

pull/12021/head
Louis Schmieder 2021-09-29 23:43:08 +02:00 committed by GitHub
parent d374c347e5
commit f9ceb12e22
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 0 deletions

View File

@ -7930,6 +7930,10 @@ fn (mut c Checker) sql_expr(mut node ast.SqlExpr) ast.Type {
sym := c.table.get_type_symbol(node.table_expr.typ)
c.ensure_type_exists(node.table_expr.typ, node.pos) or { return ast.void_type }
c.cur_orm_ts = *sym
if sym.info !is ast.Struct {
c.error('The table symbol `$sym.name` has to be a struct', node.table_expr.pos)
return ast.void_type
}
info := sym.info as ast.Struct
fields := c.fetch_and_verify_orm_fields(info, node.table_expr.pos, sym.name)
mut sub_structs := map[int]ast.SqlExpr{}

View File

@ -0,0 +1,7 @@
vlib/v/checker/tests/orm_not_a_struct.vv:10:15: error: The table symbol `Person` has to be a struct
8 | db := sqlite.connect(':memory:')?
9 | _ := sql db {
10 | select from Person
| ~~~~~~
11 | }
12 | }

View File

@ -0,0 +1,12 @@
import sqlite
enum Person {
test
}
fn main() {
db := sqlite.connect(':memory:')?
_ := sql db {
select from Person
}
}