Skip to content

Commit 87dd605

Browse files
committed
support json field
1 parent 0b358c6 commit 87dd605

File tree

8 files changed

+282
-246
lines changed

8 files changed

+282
-246
lines changed

orm/create_table.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@ func getMigrateColumns(table *queryTable) []dBColumn {
342342
}
343343
}
344344

345-
if column.Default == "" || SliceContain(definedDefault, strings.ToLower(column.Default)) < 0 {
345+
if column.Default == "" || sliceContain(definedDefault, strings.ToLower(column.Default)) == false {
346346
column.Default = "'" + column.Default + "'"
347347
}
348348

orm/json_field.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package orm
2+
3+
import (
4+
"database/sql/driver"
5+
"encoding/json"
6+
"unsafe"
7+
)
8+
9+
//json ojbect/slice <=> go struct/slice <=> db json string
10+
type JsonField[T any] struct {
11+
Data T
12+
}
13+
14+
func NewJsonField[T any](data T) JsonField[T] {
15+
return JsonField[T]{Data: data}
16+
}
17+
18+
func (t JsonField[T]) MarshalJSON() ([]byte, error) {
19+
return json.Marshal(t.Data)
20+
}
21+
22+
func (t *JsonField[T]) UnmarshalJSON(data []byte) error {
23+
return json.Unmarshal(data, &t.Data)
24+
}
25+
26+
func (t JsonField[T]) Value() (driver.Value, error) {
27+
data, err := json.Marshal(t.Data)
28+
return *(*string)(unsafe.Pointer(&data)), err
29+
}
30+
31+
func (t *JsonField[T]) Scan(raw any) error {
32+
rawData, ok := raw.([]byte)
33+
if !ok {
34+
return nil
35+
}
36+
37+
if len(rawData) == 0 {
38+
return nil
39+
}
40+
41+
var i T
42+
err := json.Unmarshal(rawData, &i)
43+
if err != nil {
44+
return err
45+
}
46+
t.Data = i
47+
return nil
48+
}

orm/json_fields.go

Lines changed: 0 additions & 212 deletions
This file was deleted.

orm/json_int.go

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,39 +7,40 @@ import (
77
"strings"
88
)
99

10+
//json int or long string int <=> go int64
1011
type JsonInt int64
1112

12-
func (i JsonInt) MarshalJSON() ([]byte, error) {
13-
return []byte("\"" + strconv.FormatInt(int64(i), 10) + "\""), nil
13+
func (t JsonInt) MarshalJSON() ([]byte, error) {
14+
return []byte("\"" + strconv.FormatInt(int64(t), 10) + "\""), nil
1415
}
1516

16-
func (i *JsonInt) UnmarshalJSON(data []byte) error {
17+
func (t *JsonInt) UnmarshalJSON(data []byte) error {
1718
val, err := strconv.ParseInt(strings.Trim(string(data), "\""), 10, 64)
1819
if err != nil {
1920
return err
2021
}
21-
*i = JsonInt(val)
22+
*t = JsonInt(val)
2223
return nil
2324
}
2425

25-
func (i JsonInt) Value() (driver.Value, error) {
26-
return int64(i), nil
26+
func (t JsonInt) Value() (driver.Value, error) {
27+
return int64(t), nil
2728
}
2829

29-
func (i JsonInt) ToString() string {
30-
return strconv.FormatInt(int64(i), 10)
30+
func (t JsonInt) ToString() string {
31+
return strconv.FormatInt(int64(t), 10)
3132
}
3233

33-
func (i *JsonInt) Scan(v any) error {
34+
func (t *JsonInt) Scan(v any) error {
3435
val, ok := v.(int64)
3536
if ok {
36-
*i = JsonInt(val)
37+
*t = JsonInt(val)
3738
return nil
3839
} else {
3940
val, ok := v.([]uint8)
4041
if ok {
4142
v, _ := strconv.ParseInt(string(val), 10, 64)
42-
*i = JsonInt(v)
43+
*t = JsonInt(v)
4344
return nil
4445
}
4546
}

orm/json_slice.go

Lines changed: 0 additions & 22 deletions
This file was deleted.

orm/json_time.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"time"
88
)
99

10+
//json int(13) <=> go time.time
1011
type JsonTime struct {
1112
time.Time
1213
}

0 commit comments

Comments
 (0)