mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
This commit is contained in:
parent
e6a4f76f82
commit
4747e70d9d
@ -126,6 +126,7 @@ const (
|
|||||||
'vlib/orm/orm_create_and_drop_test.v',
|
'vlib/orm/orm_create_and_drop_test.v',
|
||||||
'vlib/orm/orm_insert_test.v',
|
'vlib/orm/orm_insert_test.v',
|
||||||
'vlib/orm/orm_fn_calls_test.v',
|
'vlib/orm/orm_fn_calls_test.v',
|
||||||
|
'vlib/orm/orm_last_id_test.v',
|
||||||
'vlib/orm/orm_string_interpolation_in_where_test.v',
|
'vlib/orm/orm_string_interpolation_in_where_test.v',
|
||||||
'vlib/db/sqlite/sqlite_test.v',
|
'vlib/db/sqlite/sqlite_test.v',
|
||||||
'vlib/db/sqlite/sqlite_orm_test.v',
|
'vlib/db/sqlite/sqlite_orm_test.v',
|
||||||
@ -195,6 +196,7 @@ const (
|
|||||||
'vlib/orm/orm_create_and_drop_test.v',
|
'vlib/orm/orm_create_and_drop_test.v',
|
||||||
'vlib/orm/orm_insert_test.v',
|
'vlib/orm/orm_insert_test.v',
|
||||||
'vlib/orm/orm_fn_calls_test.v',
|
'vlib/orm/orm_fn_calls_test.v',
|
||||||
|
'vlib/orm/orm_last_id_test.v',
|
||||||
'vlib/orm/orm_string_interpolation_in_where_test.v',
|
'vlib/orm/orm_string_interpolation_in_where_test.v',
|
||||||
'vlib/v/tests/orm_sub_struct_test.v',
|
'vlib/v/tests/orm_sub_struct_test.v',
|
||||||
'vlib/v/tests/orm_sub_array_struct_test.v',
|
'vlib/v/tests/orm_sub_array_struct_test.v',
|
||||||
|
@ -153,14 +153,11 @@ pub fn (db Connection) delete(table string, where orm.QueryData) ! {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// last_id is used internally by V's ORM for post-processing `INSERT ` queries
|
// last_id is used internally by V's ORM for post-processing `INSERT ` queries
|
||||||
pub fn (db Connection) last_id() orm.Primitive {
|
pub fn (db Connection) last_id() int {
|
||||||
query := 'SELECT last_insert_id();'
|
query := 'SELECT last_insert_id();'
|
||||||
id := db.query(query) or {
|
id := db.query(query) or { return 0 }
|
||||||
Result{
|
|
||||||
result: 0
|
return id.rows()[0].vals[0].int()
|
||||||
}
|
|
||||||
}
|
|
||||||
return orm.Primitive(id.rows()[0].vals[0].int())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// DDL (table creation/destroying etc)
|
// DDL (table creation/destroying etc)
|
||||||
|
@ -51,10 +51,10 @@ pub fn (db DB) delete(table string, where orm.QueryData) ! {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// last_id is used internally by V's ORM for post-processing `INSERT ` queries
|
// last_id is used internally by V's ORM for post-processing `INSERT ` queries
|
||||||
pub fn (db DB) last_id() orm.Primitive {
|
pub fn (db DB) last_id() int {
|
||||||
query := 'SELECT LASTVAL();'
|
query := 'SELECT LASTVAL();'
|
||||||
id := db.q_int(query) or { 0 }
|
|
||||||
return orm.Primitive(id)
|
return db.q_int(query) or { 0 }
|
||||||
}
|
}
|
||||||
|
|
||||||
// DDL (table creation/destroying etc)
|
// DDL (table creation/destroying etc)
|
||||||
|
@ -71,10 +71,10 @@ pub fn (db DB) delete(table string, where orm.QueryData) ! {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// last_id is used internally by V's ORM for post-processing `INSERT ` queries
|
// last_id is used internally by V's ORM for post-processing `INSERT ` queries
|
||||||
pub fn (db DB) last_id() orm.Primitive {
|
pub fn (db DB) last_id() int {
|
||||||
query := 'SELECT last_insert_rowid();'
|
query := 'SELECT last_insert_rowid();'
|
||||||
id := db.q_int(query)
|
|
||||||
return orm.Primitive(id)
|
return db.q_int(query)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DDL (table creation/destroying etc)
|
// DDL (table creation/destroying etc)
|
||||||
|
@ -148,13 +148,10 @@ pub fn (db Connection) delete(table string, where orm.QueryData) ! {
|
|||||||
mysql_stmt_worker(db, query, orm.QueryData{}, where)!
|
mysql_stmt_worker(db, query, orm.QueryData{}, where)!
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (db Connection) last_id() orm.Primitive {
|
pub fn (db Connection) last_id() int {
|
||||||
query := 'SELECT last_insert_id();'
|
query := 'SELECT last_insert_id();'
|
||||||
id := db.query(query) or {
|
id := db.query(query) or { return 0 }
|
||||||
Result{
|
|
||||||
result: 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return orm.Primitive(id.rows()[0].vals[0].int())
|
return orm.Primitive(id.rows()[0].vals[0].int())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,7 +175,7 @@ pub interface Connection {
|
|||||||
delete(table string, where QueryData) !
|
delete(table string, where QueryData) !
|
||||||
create(table string, fields []TableField) !
|
create(table string, fields []TableField) !
|
||||||
drop(table string) !
|
drop(table string) !
|
||||||
last_id() Primitive
|
last_id() int
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generates an sql stmt, from universal parameter
|
// Generates an sql stmt, from universal parameter
|
||||||
|
32
vlib/orm/orm_last_id_test.v
Normal file
32
vlib/orm/orm_last_id_test.v
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
import db.sqlite
|
||||||
|
|
||||||
|
struct User {
|
||||||
|
id int [primary; sql: serial]
|
||||||
|
name string
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_last_id() {
|
||||||
|
mut db := sqlite.connect(':memory:') or { panic(err) }
|
||||||
|
|
||||||
|
sql db {
|
||||||
|
create table User
|
||||||
|
}
|
||||||
|
|
||||||
|
first_user := User{
|
||||||
|
name: 'first'
|
||||||
|
}
|
||||||
|
|
||||||
|
second_user := User{
|
||||||
|
name: 'second'
|
||||||
|
}
|
||||||
|
|
||||||
|
sql db {
|
||||||
|
insert first_user into User
|
||||||
|
insert second_user into User
|
||||||
|
}
|
||||||
|
|
||||||
|
last_id := db.last_id()
|
||||||
|
|
||||||
|
assert typeof(last_id).name == 'int'
|
||||||
|
assert last_id > 0
|
||||||
|
}
|
@ -46,10 +46,10 @@ pub fn (db DB) delete(table string, where orm.QueryData) ! {
|
|||||||
pg_stmt_worker(db, query, orm.QueryData{}, where)!
|
pg_stmt_worker(db, query, orm.QueryData{}, where)!
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (db DB) last_id() orm.Primitive {
|
pub fn (db DB) last_id() int {
|
||||||
query := 'SELECT LASTVAL();'
|
query := 'SELECT LASTVAL();'
|
||||||
id := db.q_int(query) or { 0 }
|
|
||||||
return orm.Primitive(id)
|
return db.q_int(query) or { 0 }
|
||||||
}
|
}
|
||||||
|
|
||||||
// table
|
// table
|
||||||
|
@ -68,10 +68,10 @@ pub fn (db DB) delete(table string, where orm.QueryData) ! {
|
|||||||
sqlite_stmt_worker(db, query, orm.QueryData{}, where)!
|
sqlite_stmt_worker(db, query, orm.QueryData{}, where)!
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (db DB) last_id() orm.Primitive {
|
pub fn (db DB) last_id() int {
|
||||||
query := 'SELECT last_insert_rowid();'
|
query := 'SELECT last_insert_rowid();'
|
||||||
id := db.q_int(query)
|
|
||||||
return orm.Primitive(id)
|
return db.q_int(query)
|
||||||
}
|
}
|
||||||
|
|
||||||
// table
|
// table
|
||||||
|
@ -156,7 +156,7 @@ fn (mut g Gen) sql_insert(node ast.SqlStmtLine, expr string, table_name string,
|
|||||||
|
|
||||||
for sub in subs {
|
for sub in subs {
|
||||||
g.sql_stmt_line(sub, expr, or_expr)
|
g.sql_stmt_line(sub, expr, or_expr)
|
||||||
g.writeln('array_push(&${last_ids_arr}, _MOV((orm__Primitive[]){orm__Connection_name_table[${expr}._typ]._method_last_id(${expr}._object)}));')
|
g.writeln('array_push(&${last_ids_arr}, _MOV((orm__Primitive[]){orm__int_to_primitive(orm__Connection_name_table[${expr}._typ]._method_last_id(${expr}._object))}));')
|
||||||
}
|
}
|
||||||
|
|
||||||
g.write('${result_name}_void ${res} = orm__Connection_name_table[${expr}._typ]._method_')
|
g.write('${result_name}_void ${res} = orm__Connection_name_table[${expr}._typ]._method_')
|
||||||
@ -207,7 +207,7 @@ fn (mut g Gen) sql_insert(node ast.SqlStmtLine, expr string, table_name string,
|
|||||||
|
|
||||||
if arrs.len > 0 {
|
if arrs.len > 0 {
|
||||||
mut id_name := g.new_tmp_var()
|
mut id_name := g.new_tmp_var()
|
||||||
g.writeln('orm__Primitive ${id_name} = orm__Connection_name_table[${expr}._typ]._method_last_id(${expr}._object);')
|
g.writeln('orm__Primitive ${id_name} = orm__int_to_primitive(orm__Connection_name_table[${expr}._typ]._method_last_id(${expr}._object));')
|
||||||
for i, mut arr in arrs {
|
for i, mut arr in arrs {
|
||||||
idx := g.new_tmp_var()
|
idx := g.new_tmp_var()
|
||||||
g.writeln('for (int ${idx} = 0; ${idx} < ${arr.object_var_name}.${field_names[i]}.len; ${idx}++) {')
|
g.writeln('for (int ${idx} = 0; ${idx} < ${arr.object_var_name}.${field_names[i]}.len; ${idx}++) {')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user