orm: fix option type, convert from int to i8, add examples, etc (fix #24211) (#24213)

This commit is contained in:
kbkpbot 2025-04-15 01:19:31 +08:00 committed by GitHub
parent 277c9c5f05
commit b180a03253
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 674 additions and 139 deletions

67
examples/orm/orm_func.v Normal file
View file

@ -0,0 +1,67 @@
module main
import db.sqlite
import time
import orm
@[table: 'sys_users']
struct User {
pub:
id string @[immutable; primary; sql: 'id'; sql_type: 'VARCHAR(255)'; unique]
name ?string @[immutable; sql: 'nick_name'; sql_type: 'VARCHAR(255)'; unique]
created_at ?time.Time @[omitempty; sql_type: 'TIMESTAMP']
updated_at time.Time @[default: new; omitempty; sql_type: 'TIMESTAMP']
}
fn main() {
mut db := sqlite.connect(':memory:')!
defer { db.close() or {} }
user1 := User{
id: '001'
name: 'Jengro'
created_at: time.now()
updated_at: time.now()
}
user2 := User{
id: '002'
name: 'Dev'
created_at: time.now()
updated_at: time.now()
}
mut qb := orm.new_query[User](db)
// create table
qb.create()!
// insert into table
qb.insert(user1)!
qb.insert(user2)!
// query all fields
all_users := qb.query()!
dump(all_users)
// query all users' nick_name
all_user_names := qb.select('nick_name')!.query()!
dump(all_user_names)
// where
selected_users := qb.where('id = ?', '001')!.query()!
dump(selected_users)
// update
qb.set('nick_name = ?', 'Tom')!.where('id = ?', '001')!.update()!
updated_user := qb.query()!
dump(updated_user)
// delete
qb.where('id = ?', '001')!.delete()!
remain_users := qb.query()!
dump(remain_users)
// drop table
qb.drop()!
}

79
examples/orm/orm_sql.v Normal file
View file

@ -0,0 +1,79 @@
module main
import db.sqlite
import time
import orm
@[table: 'sys_users']
struct User {
pub:
id string @[immutable; primary; sql: 'id'; sql_type: 'VARCHAR(255)'; unique]
name ?string @[immutable; sql: 'name'; sql_type: 'VARCHAR(255)'; unique]
created_at ?time.Time @[omitempty; sql_type: 'TIMESTAMP']
updated_at time.Time @[default: new; omitempty; sql_type: 'TIMESTAMP']
}
fn main() {
mut db := sqlite.connect(':memory:')!
defer { db.close() or {} }
user1 := User{
id: '001'
name: 'Jengro'
created_at: time.now()
updated_at: time.now()
}
user2 := User{
id: '002'
name: 'Dev'
created_at: time.now()
updated_at: time.now()
}
// create table
sql db {
create table User
}!
// insert into table
sql db {
insert user1 into User
insert user2 into User
}!
// query all fields
all_users := sql db {
select from User
}!
dump(all_users)
// where
selected_users := sql db {
select from User where id == '001'
}!
dump(selected_users)
// update
sql db {
update User set name = 'Tom' where id == '001'
}!
updated_user := sql db {
select from User
}!
dump(updated_user)
// delete
sql db {
delete from User where id == '001'
}!
remain_users := sql db {
select from User
}!
dump(remain_users)
// drop table
sql db {
drop table User
}!
}