mirror of
https://github.com/vlang/v.git
synced 2025-09-13 14:32:26 +03:00
orm: add IN and NOT IN (#24634)
This commit is contained in:
parent
566d22ab66
commit
73ebf42015
7 changed files with 165 additions and 7 deletions
|
@ -247,6 +247,11 @@ fn stmt_bind_primitive(mut stmt Stmt, data orm.Primitive) {
|
|||
orm.Null {
|
||||
stmt.bind_null()
|
||||
}
|
||||
[]orm.Primitive {
|
||||
for element in data {
|
||||
stmt_bind_primitive(mut stmt, element)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -180,6 +180,11 @@ fn pg_stmt_match(mut types []u32, mut vals []&char, mut lens []int, mut formats
|
|||
lens << int(0) // ignored
|
||||
formats << 0 // ignored
|
||||
}
|
||||
[]orm.Primitive {
|
||||
for element in data {
|
||||
pg_stmt_match(mut types, mut vals, mut lens, mut formats, element)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -114,7 +114,7 @@ fn sqlite_stmt_worker(db DB, query string, data orm.QueryData, where orm.QueryDa
|
|||
// Binds all values of d in the prepared statement
|
||||
fn sqlite_stmt_binder(stmt Stmt, d orm.QueryData, query string, mut c &int) ! {
|
||||
for data in d.data {
|
||||
err := bind(stmt, c, data)
|
||||
err := bind(stmt, mut c, data)
|
||||
|
||||
if err != 0 {
|
||||
return stmt.db.error_message(err, query)
|
||||
|
@ -124,7 +124,7 @@ fn sqlite_stmt_binder(stmt Stmt, d orm.QueryData, query string, mut c &int) ! {
|
|||
}
|
||||
|
||||
// Universal bind function
|
||||
fn bind(stmt Stmt, c &int, data orm.Primitive) int {
|
||||
fn bind(stmt Stmt, mut c &int, data orm.Primitive) int {
|
||||
mut err := 0
|
||||
match data {
|
||||
i8, i16, int, u8, u16, u32, bool {
|
||||
|
@ -143,11 +143,21 @@ fn bind(stmt Stmt, c &int, data orm.Primitive) int {
|
|||
err = stmt.bind_int(c, int(data.unix()))
|
||||
}
|
||||
orm.InfixType {
|
||||
err = bind(stmt, c, data.right)
|
||||
err = bind(stmt, mut c, data.right)
|
||||
}
|
||||
orm.Null {
|
||||
err = stmt.bind_null(c)
|
||||
}
|
||||
[]orm.Primitive {
|
||||
for element in data {
|
||||
tmp_err := bind(stmt, mut c, element)
|
||||
c++
|
||||
if tmp_err != 0 {
|
||||
err = tmp_err
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue