1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

orm: sql type in struct by attribute (#14919)

This commit is contained in:
Hitalo de Jesus do Rosário Souza
2022-07-13 12:03:30 -03:00
committed by GitHub
parent 4238e5f6b9
commit 3f3742122f
3 changed files with 98 additions and 7 deletions

View File

@ -14,6 +14,7 @@
- `[skip]` field will be skipped
- `[sql: type]` where `type` is a V type such as `int` or `f64`, or special type `serial`
- `[sql: 'name']` sets a custom column name for the field
- `[sql_type: 'SQL TYPE']` sets the sql type which is used in sql
## Usage

View File

@ -363,6 +363,10 @@ pub fn orm_table_gen(table string, q string, defaults bool, def_unique_len int,
mut unique_len := 0
// mut fkey := ''
mut field_name := sql_field_name(field)
mut ctyp := sql_from_v(sql_field_type(field)) or {
field_name = '${field_name}_id'
sql_from_v(7)?
}
for attr in field.attrs {
match attr.name {
'primary' {
@ -387,6 +391,12 @@ pub fn orm_table_gen(table string, q string, defaults bool, def_unique_len int,
'skip' {
is_skip = true
}
'sql_type' {
if attr.kind != .string {
return error("sql_type attribute need be string. Try [sql_type: '$attr.arg'] instead of [sql_type: $attr.arg]")
}
ctyp = attr.arg
}
/*'fkey' {
if attr.arg != '' {
if attr.kind == .string {
@ -402,10 +412,6 @@ pub fn orm_table_gen(table string, q string, defaults bool, def_unique_len int,
continue
}
mut stmt := ''
mut ctyp := sql_from_v(sql_field_type(field)) or {
field_name = '${field_name}_id'
sql_from_v(7)?
}
if ctyp == '' {
return error('Unknown type ($field.typ) for field $field.name in struct $table')
}