@@ -28,7 +28,19 @@ import (
28
28
func (c * Core ) GetFieldTypeStr (ctx context.Context , fieldName , table , schema string ) string {
29
29
field := c .GetFieldType (ctx , fieldName , table , schema )
30
30
if field != nil {
31
- return field .Type
31
+ // Kinds of data type examples:
32
+ // year(4)
33
+ // datetime
34
+ // varchar(64)
35
+ // bigint(20)
36
+ // int(10) unsigned
37
+ typeName := gstr .StrTillEx (field .Type , "(" ) // int(10) unsigned -> int
38
+ if typeName != "" {
39
+ typeName = gstr .Trim (typeName )
40
+ } else {
41
+ typeName = field .Type
42
+ }
43
+ return typeName
32
44
}
33
45
return ""
34
46
}
@@ -63,9 +75,10 @@ func (c *Core) ConvertDataForRecord(ctx context.Context, value interface{}, tabl
63
75
data = MapOrStructToMapDeep (value , true )
64
76
)
65
77
for fieldName , fieldValue := range data {
78
+ var fieldType = c .GetFieldTypeStr (ctx , fieldName , table , c .GetSchema ())
66
79
data [fieldName ], err = c .db .ConvertValueForField (
67
80
ctx ,
68
- c . GetFieldTypeStr ( ctx , fieldName , table , c . GetSchema ()) ,
81
+ fieldType ,
69
82
fieldValue ,
70
83
)
71
84
if err != nil {
@@ -124,41 +137,63 @@ Default:
124
137
case time.Time :
125
138
if r .IsZero () {
126
139
convertedValue = nil
127
- } else if fieldType == fieldTypeDate {
128
- convertedValue = r .Format ("2006-01-02" )
129
- } else if fieldType == fieldTypeTime {
130
- convertedValue = r .Format ("15:04:05" )
140
+ } else {
141
+ switch fieldType {
142
+ case fieldTypeYear :
143
+ convertedValue = r .Format ("2006" )
144
+ case fieldTypeDate :
145
+ convertedValue = r .Format ("2006-01-02" )
146
+ case fieldTypeTime :
147
+ convertedValue = r .Format ("15:04:05" )
148
+ default :
149
+ }
131
150
}
132
151
133
152
case * time.Time :
134
153
if r == nil {
135
154
// Nothing to do.
136
- } else if fieldType == fieldTypeDate {
137
- convertedValue = r .Format ("2006-01-02" )
138
- } else if fieldType == fieldTypeTime {
139
- convertedValue = r .Format ("15:04:05" )
155
+ } else {
156
+ switch fieldType {
157
+ case fieldTypeYear :
158
+ convertedValue = r .Format ("2006" )
159
+ case fieldTypeDate :
160
+ convertedValue = r .Format ("2006-01-02" )
161
+ case fieldTypeTime :
162
+ convertedValue = r .Format ("15:04:05" )
163
+ default :
164
+ }
140
165
}
141
166
142
167
case gtime.Time :
143
168
if r .IsZero () {
144
169
convertedValue = nil
145
- } else if fieldType == fieldTypeDate {
146
- convertedValue = r .Layout ("2006-01-02" )
147
- } else if fieldType == fieldTypeTime {
148
- convertedValue = r .Layout ("15:04:05" )
149
170
} else {
150
- convertedValue = r .Time
171
+ switch fieldType {
172
+ case fieldTypeYear :
173
+ convertedValue = r .Layout ("2006" )
174
+ case fieldTypeDate :
175
+ convertedValue = r .Layout ("2006-01-02" )
176
+ case fieldTypeTime :
177
+ convertedValue = r .Layout ("15:04:05" )
178
+ default :
179
+ convertedValue = r .Time
180
+ }
151
181
}
152
182
153
183
case * gtime.Time :
154
184
if r .IsZero () {
155
185
convertedValue = nil
156
- } else if fieldType == fieldTypeDate {
157
- convertedValue = r .Layout ("2006-01-02" )
158
- } else if fieldType == fieldTypeTime {
159
- convertedValue = r .Layout ("15:04:05" )
160
186
} else {
161
- convertedValue = r .Time
187
+ switch fieldType {
188
+ case fieldTypeYear :
189
+ convertedValue = r .Layout ("2006" )
190
+ case fieldTypeDate :
191
+ convertedValue = r .Layout ("2006-01-02" )
192
+ case fieldTypeTime :
193
+ convertedValue = r .Layout ("15:04:05" )
194
+ default :
195
+ convertedValue = r .Time
196
+ }
162
197
}
163
198
164
199
case Counter , * Counter :
@@ -181,6 +216,7 @@ Default:
181
216
}
182
217
}
183
218
}
219
+ default :
184
220
}
185
221
186
222
return convertedValue , nil
0 commit comments