diff --git a/vlib/v/gen/c/cgen.v b/vlib/v/gen/c/cgen.v index 43f4d3cd256171..076757d13f90ad 100644 --- a/vlib/v/gen/c/cgen.v +++ b/vlib/v/gen/c/cgen.v @@ -198,7 +198,8 @@ mut: sql_fkey string sql_parent_id string sql_side SqlExprSide // left or right, to distinguish idents in `name == name` - strs_to_free0 []string // strings.Builder + sql_last_stmt_out_len int + strs_to_free0 []string // strings.Builder // strs_to_free []string // strings.Builder // tmp_arg_vars_to_free []string // autofree_pregen map[string]string diff --git a/vlib/v/gen/c/orm.v b/vlib/v/gen/c/orm.v index aa59c7c8d5016e..25936c1a6f0e24 100644 --- a/vlib/v/gen/c/orm.v +++ b/vlib/v/gen/c/orm.v @@ -93,6 +93,7 @@ fn (mut g Gen) sql_stmt(node ast.SqlStmt) { // as well as inserting and updating objects. // It is part of a multi-line query. For example, `create table User` fn (mut g Gen) sql_stmt_line(stmt_line ast.SqlStmtLine, connection_var_name string, or_expr ast.OrExpr) { + g.sql_last_stmt_out_len = g.out.len mut node := stmt_line table_name := g.get_table_name_by_struct_type(node.table_expr.typ) result_var_name := g.new_tmp_var() @@ -554,6 +555,9 @@ fn (mut g Gen) write_orm_expr_to_primitive(expr ast.Expr) { // write_orm_primitive writes C code for casting expressions into a primitive type, // which will be used in low-level database libs. fn (mut g Gen) write_orm_primitive(t ast.Type, expr ast.Expr) { + if t == 0 { + verror('${g.file.path}:${expr.pos().line_nr + 1}: ORM: unknown type t == 0\nexpr: ${expr}\nlast SQL stmt:\n${g.out.after(g.sql_last_stmt_out_len)}') + } mut sym := g.table.sym(t) mut typ := sym.cname if typ == 'orm__Primitive' {