mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
db97630117
* orm: add tracing of the generated queries by the orm module, when a program is compiled with `-d trace_orm` * examples: fix examples/database/orm.v, add comments, and ensure that the example can be run several times with no errors The example demonstrates connecting to all 3 DBs in the same program, and will be added to the CI very soon, to serve both as a regression test, if it fails, and as an example to how to use the ORM in combination with raw SQL queries to the DBs (which are driver/wrapper specific, unlike the ORM, but can be more convenient in some situations). |
||
---|---|---|
.. | ||
orm_create_and_drop_test.v | ||
orm_fn_calls_test.v | ||
orm_fn_test.v | ||
orm_insert_reserved_name_test.v | ||
orm_insert_test.v | ||
orm_interface_test.v | ||
orm_last_id_test.v | ||
orm_mut_db_test.v | ||
orm_sql_or_blocks_test.v | ||
orm_string_interpolation_in_where_test.v | ||
orm_test.v | ||
orm.v | ||
README.md |
ORM
Attributes
Structs
[table: 'name']
sets a custom table name
Fields
[primary]
sets the field as the primary key[unique]
sets the field as unique[unique: 'foo']
adds the field to a unique group[nonull]
set the field as not null[skip]
field will be skipped[sql: type]
wheretype
is a V type such asint
orf64
, or special typeserial
[sql: 'name']
sets a custom column name for the field[sql_type: 'SQL TYPE']
sets the sql type which is used in sql[default: 'sql defaults']
sets the default value or function when create a new table[fkey: 'parent_id']
sets foreign key for an field which holds an array
Usage
struct Foo {
id int [primary; sql: serial]
name string [nonull]
created_at time.Time [sql_type: 'DATETIME']
updated_at string [sql_type: 'DATETIME']
deleted_at time.Time
children []Child [fkey: 'parent_id']
}
struct Child {
id int [primary; sql: serial]
parent_id int
name string
}
Create
sql db {
create table Foo
}
Drop
sql db {
drop table Foo
}
Insert
var := Foo{
name: 'abc'
created_at: time.now()
updated_at: time.now().str()
deleted_at: time.now()
children: [
Child{
name: 'abc'
},
Child{
name: 'def'
},
]
}
sql db {
insert var into Foo
}
Update
sql db {
update Foo set name = 'cde', updated_at = time.now() where name == 'abc'
}
Delete
sql db {
delete from Foo where id > 10
}
Select
result := sql db {
select from Foo where id == 1
}
result := sql db {
select from Foo where id > 1 && name != 'lasanha' limit 5
}
result := sql db {
select from Foo where id > 1 order by id
}
Example
import db.pg
struct Member {
id string [default: 'gen_random_uuid()'; primary; sql_type: 'uuid']
name string
created_at string [default: 'CURRENT_TIMESTAMP'; sql_type: 'TIMESTAMP']
}
fn main() {
db := pg.connect(pg.Config{
host: 'localhost'
port: 5432
user: 'user'
password: 'password'
dbname: 'dbname'
}) or {
println(err)
return
}
defer {
db.close()
}
sql db {
create table Member
}
new_member := Member{
name: 'John Doe'
}
sql db {
insert new_member into Member
}
selected_member := sql db {
select from Member where name == 'John Doe' limit 1
}
sql db {
update Member set name = 'Hitalo' where id == selected_member.id
}
}