orm: add IN and NOT IN (#24634)

This commit is contained in:
Louis Schmieder 2025-06-02 02:49:10 +02:00 committed by GitHub
parent 566d22ab66
commit 73ebf42015
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 165 additions and 7 deletions

View file

@ -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)
}
}
}
}

View file

@ -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)
}
}
}
}

View file

@ -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
}