cgen: fix tmp counter; orm: insert fixes
							parent
							
								
									cd8392e42d
								
							
						
					
					
						commit
						3cfeb92a4e
					
				|  | @ -819,8 +819,8 @@ pub struct SqlInsertExpr { | ||||||
| pub: | pub: | ||||||
| 	db_var_name     string // `db` in `sql db {`
 | 	db_var_name     string // `db` in `sql db {`
 | ||||||
| 	table_name      string | 	table_name      string | ||||||
| 	fields          []table.Field |  | ||||||
| 	object_var_name string // `user`
 | 	object_var_name string // `user`
 | ||||||
|  | 	table_type      table.Type | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub struct SqlExpr { | pub struct SqlExpr { | ||||||
|  |  | ||||||
|  | @ -661,7 +661,7 @@ fn (mut g Gen) stmt(node ast.Stmt) { | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		ast.FnDecl { | 		ast.FnDecl { | ||||||
| 			g.tmp_count = 0 | 			//g.tmp_count = 0 TODO
 | ||||||
| 			mut skip := false | 			mut skip := false | ||||||
| 			pos := g.out.buf.len | 			pos := g.out.buf.len | ||||||
| 			if g.pref.build_mode == .build_module { | 			if g.pref.build_mode == .build_module { | ||||||
|  |  | ||||||
|  | @ -13,33 +13,37 @@ const ( | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| fn (mut g Gen) sql_insert_expr(node ast.SqlInsertExpr) { | fn (mut g Gen) sql_insert_expr(node ast.SqlInsertExpr) { | ||||||
|  | 	sym := g.table.get_type_symbol(node.table_type) | ||||||
|  | 	info := sym.info as table.Struct | ||||||
|  | 	fields := info.fields.filter(it.typ in [table.string_type, table.int_type, table.bool_type]) | ||||||
| 	g.writeln('\n\t// sql insert') | 	g.writeln('\n\t// sql insert') | ||||||
| 	db_name := g.new_tmp_var() | 	db_name := g.new_tmp_var() | ||||||
| 	g.sql_stmt_name = g.new_tmp_var() | 	g.sql_stmt_name = g.new_tmp_var() | ||||||
| 	g.writeln('${dbtype}__DB $db_name = $node.db_var_name;') | 	g.writeln('${dbtype}__DB $db_name = $node.db_var_name;') | ||||||
| 	mut q := 'insert into $node.table_name (' | 	mut q := 'insert into $node.table_name (' | ||||||
| 	for i, field in node.fields { | 	for i, field in fields { | ||||||
| 		if field.name == 'id' { | 		if field.name == 'id' { | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
| 		q += '$field.name' | 		q += '$field.name' | ||||||
| 		if i < node.fields.len - 1 { | 		if i < fields.len - 1 { | ||||||
| 			q += ', ' | 			q += ', ' | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	q += ') values (' | 	q += ') values (' | ||||||
| 	for i, field in node.fields { | 	for i, field in fields { | ||||||
| 		if field.name == 'id' { | 		if field.name == 'id' { | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
| 		q += '?${i+0}' | 		q += '?${i+0}' | ||||||
| 		if i < node.fields.len - 1 { | 		if i < fields.len - 1 { | ||||||
| 			q += ', ' | 			q += ', ' | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	q += ')' | 	q += ')' | ||||||
|  | 	println(q) | ||||||
| 	g.writeln('sqlite3_stmt* $g.sql_stmt_name = ${dbtype}__DB_init_stmt($db_name, tos_lit("$q"));') | 	g.writeln('sqlite3_stmt* $g.sql_stmt_name = ${dbtype}__DB_init_stmt($db_name, tos_lit("$q"));') | ||||||
| 	for i, field in node.fields { | 	for i, field in fields { | ||||||
| 		if field.name == 'id' { | 		if field.name == 'id' { | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
|  | @ -51,6 +55,7 @@ fn (mut g Gen) sql_insert_expr(node ast.SqlInsertExpr) { | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	g.writeln('sqlite3_step($g.sql_stmt_name);') | 	g.writeln('sqlite3_step($g.sql_stmt_name);') | ||||||
|  | 	g.writeln('puts(sqlite3_errmsg(${db_name}.conn));') | ||||||
| 	g.writeln('sqlite3_finalize($g.sql_stmt_name);') | 	g.writeln('sqlite3_finalize($g.sql_stmt_name);') | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -125,14 +125,14 @@ fn (mut p Parser) sql_insert_expr() ast.SqlInsertExpr { | ||||||
| 	} | 	} | ||||||
| 	table_type := p.parse_type() // `User`
 | 	table_type := p.parse_type() // `User`
 | ||||||
| 	sym := p.table.get_type_symbol(table_type) | 	sym := p.table.get_type_symbol(table_type) | ||||||
| 	info := sym.info as table.Struct | 	// info := sym.info as table.Struct
 | ||||||
| 	fields := info.fields.filter(it.typ in [table.string_type, table.int_type, table.bool_type]) | 	// fields := info.fields.filter(it.typ in [table.string_type, table.int_type, table.bool_type])
 | ||||||
| 	table_name := sym.name | 	table_name := sym.name | ||||||
| 	p.check(.rcbr) | 	p.check(.rcbr) | ||||||
| 	return ast.SqlInsertExpr{ | 	return ast.SqlInsertExpr{ | ||||||
| 		db_var_name: db_var_name | 		db_var_name: db_var_name | ||||||
| 		table_name: table_name | 		table_name: table_name | ||||||
| 		fields: fields | 		table_type: table_type | ||||||
| 		object_var_name: object_var_name | 		object_var_name: object_var_name | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue