3745bb72 by slene

orm.Read support specify condition fields, orm.Update and QuerySeter All/One support omit fields.

1 parent 55fe3ba5
...@@ -49,10 +49,17 @@ type dbBase struct { ...@@ -49,10 +49,17 @@ type dbBase struct {
49 ins dbBaser 49 ins dbBaser
50 } 50 }
51 51
52 func (d *dbBase) collectValues(mi *modelInfo, ind reflect.Value, skipAuto bool, insert bool, tz *time.Location) (columns []string, values []interface{}, err error) { 52 var _ dbBaser = new(dbBase)
53
54 func (d *dbBase) collectValues(mi *modelInfo, ind reflect.Value, cols []string, skipAuto bool, insert bool, tz *time.Location) (columns []string, values []interface{}, err error) {
53 _, pkValue, _ := getExistPk(mi, ind) 55 _, pkValue, _ := getExistPk(mi, ind)
54 for _, column := range mi.fields.orders { 56 for _, column := range cols {
55 fi := mi.fields.columns[column] 57 var fi *fieldInfo
58 if fi, _ = mi.fields.GetByAny(column); fi != nil {
59 column = fi.column
60 } else {
61 panic(fmt.Sprintf("wrong db field/column name `%s` for model `%s`", column, mi.fullName))
62 }
56 if fi.dbcol == false || fi.auto && skipAuto { 63 if fi.dbcol == false || fi.auto && skipAuto {
57 continue 64 continue
58 } 65 }
...@@ -160,7 +167,7 @@ func (d *dbBase) PrepareInsert(q dbQuerier, mi *modelInfo) (stmtQuerier, string, ...@@ -160,7 +167,7 @@ func (d *dbBase) PrepareInsert(q dbQuerier, mi *modelInfo) (stmtQuerier, string,
160 } 167 }
161 168
162 func (d *dbBase) InsertStmt(stmt stmtQuerier, mi *modelInfo, ind reflect.Value, tz *time.Location) (int64, error) { 169 func (d *dbBase) InsertStmt(stmt stmtQuerier, mi *modelInfo, ind reflect.Value, tz *time.Location) (int64, error) {
163 _, values, err := d.collectValues(mi, ind, true, true, tz) 170 _, values, err := d.collectValues(mi, ind, mi.fields.dbcols, true, true, tz)
164 if err != nil { 171 if err != nil {
165 return 0, err 172 return 0, err
166 } 173 }
...@@ -179,10 +186,25 @@ func (d *dbBase) InsertStmt(stmt stmtQuerier, mi *modelInfo, ind reflect.Value, ...@@ -179,10 +186,25 @@ func (d *dbBase) InsertStmt(stmt stmtQuerier, mi *modelInfo, ind reflect.Value,
179 } 186 }
180 } 187 }
181 188
182 func (d *dbBase) Read(q dbQuerier, mi *modelInfo, ind reflect.Value, tz *time.Location) error { 189 func (d *dbBase) Read(q dbQuerier, mi *modelInfo, ind reflect.Value, tz *time.Location, cols []string) error {
183 pkColumn, pkValue, ok := getExistPk(mi, ind) 190 var whereCols []string
184 if ok == false { 191 var args []interface{}
185 return ErrMissPK 192
193 // if specify cols length > 0, then use it for where condition.
194 if len(cols) > 0 {
195 var err error
196 whereCols, args, err = d.collectValues(mi, ind, cols, false, false, tz)
197 if err != nil {
198 return err
199 }
200 } else {
201 // default use pk value as where condtion.
202 pkColumn, pkValue, ok := getExistPk(mi, ind)
203 if ok == false {
204 return ErrMissPK
205 }
206 whereCols = append(whereCols, pkColumn)
207 args = append(args, pkValue)
186 } 208 }
187 209
188 Q := d.ins.TableQuote() 210 Q := d.ins.TableQuote()
...@@ -191,7 +213,10 @@ func (d *dbBase) Read(q dbQuerier, mi *modelInfo, ind reflect.Value, tz *time.Lo ...@@ -191,7 +213,10 @@ func (d *dbBase) Read(q dbQuerier, mi *modelInfo, ind reflect.Value, tz *time.Lo
191 sels := strings.Join(mi.fields.dbcols, sep) 213 sels := strings.Join(mi.fields.dbcols, sep)
192 colsNum := len(mi.fields.dbcols) 214 colsNum := len(mi.fields.dbcols)
193 215
194 query := fmt.Sprintf("SELECT %s%s%s FROM %s%s%s WHERE %s%s%s = ?", Q, sels, Q, Q, mi.table, Q, Q, pkColumn, Q) 216 sep = fmt.Sprintf("%s = ? AND %s", Q, Q)
217 wheres := strings.Join(whereCols, sep)
218
219 query := fmt.Sprintf("SELECT %s%s%s FROM %s%s%s WHERE %s%s%s = ?", Q, sels, Q, Q, mi.table, Q, Q, wheres, Q)
195 220
196 refs := make([]interface{}, colsNum) 221 refs := make([]interface{}, colsNum)
197 for i, _ := range refs { 222 for i, _ := range refs {
...@@ -201,7 +226,7 @@ func (d *dbBase) Read(q dbQuerier, mi *modelInfo, ind reflect.Value, tz *time.Lo ...@@ -201,7 +226,7 @@ func (d *dbBase) Read(q dbQuerier, mi *modelInfo, ind reflect.Value, tz *time.Lo
201 226
202 d.ins.ReplaceMarks(&query) 227 d.ins.ReplaceMarks(&query)
203 228
204 row := q.QueryRow(query, pkValue) 229 row := q.QueryRow(query, args...)
205 if err := row.Scan(refs...); err != nil { 230 if err := row.Scan(refs...); err != nil {
206 if err == sql.ErrNoRows { 231 if err == sql.ErrNoRows {
207 return ErrNoRows 232 return ErrNoRows
...@@ -220,7 +245,7 @@ func (d *dbBase) Read(q dbQuerier, mi *modelInfo, ind reflect.Value, tz *time.Lo ...@@ -220,7 +245,7 @@ func (d *dbBase) Read(q dbQuerier, mi *modelInfo, ind reflect.Value, tz *time.Lo
220 } 245 }
221 246
222 func (d *dbBase) Insert(q dbQuerier, mi *modelInfo, ind reflect.Value, tz *time.Location) (int64, error) { 247 func (d *dbBase) Insert(q dbQuerier, mi *modelInfo, ind reflect.Value, tz *time.Location) (int64, error) {
223 names, values, err := d.collectValues(mi, ind, true, true, tz) 248 names, values, err := d.collectValues(mi, ind, mi.fields.dbcols, true, true, tz)
224 if err != nil { 249 if err != nil {
225 return 0, err 250 return 0, err
226 } 251 }
...@@ -254,12 +279,18 @@ func (d *dbBase) Insert(q dbQuerier, mi *modelInfo, ind reflect.Value, tz *time. ...@@ -254,12 +279,18 @@ func (d *dbBase) Insert(q dbQuerier, mi *modelInfo, ind reflect.Value, tz *time.
254 } 279 }
255 } 280 }
256 281
257 func (d *dbBase) Update(q dbQuerier, mi *modelInfo, ind reflect.Value, tz *time.Location) (int64, error) { 282 func (d *dbBase) Update(q dbQuerier, mi *modelInfo, ind reflect.Value, tz *time.Location, cols []string) (int64, error) {
258 pkName, pkValue, ok := getExistPk(mi, ind) 283 pkName, pkValue, ok := getExistPk(mi, ind)
259 if ok == false { 284 if ok == false {
260 return 0, ErrMissPK 285 return 0, ErrMissPK
261 } 286 }
262 setNames, setValues, err := d.collectValues(mi, ind, true, false, tz) 287
288 // if specify cols length is zero, then commit all columns.
289 if len(cols) == 0 {
290 cols = mi.fields.dbcols
291 }
292
293 setNames, setValues, err := d.collectValues(mi, ind, cols, true, false, tz)
263 if err != nil { 294 if err != nil {
264 return 0, err 295 return 0, err
265 } 296 }
...@@ -473,7 +504,7 @@ func (d *dbBase) DeleteBatch(q dbQuerier, qs *querySet, mi *modelInfo, cond *Con ...@@ -473,7 +504,7 @@ func (d *dbBase) DeleteBatch(q dbQuerier, qs *querySet, mi *modelInfo, cond *Con
473 return 0, nil 504 return 0, nil
474 } 505 }
475 506
476 func (d *dbBase) ReadBatch(q dbQuerier, qs *querySet, mi *modelInfo, cond *Condition, container interface{}, tz *time.Location) (int64, error) { 507 func (d *dbBase) ReadBatch(q dbQuerier, qs *querySet, mi *modelInfo, cond *Condition, container interface{}, tz *time.Location, cols []string) (int64, error) {
477 508
478 val := reflect.ValueOf(container) 509 val := reflect.ValueOf(container)
479 ind := reflect.Indirect(val) 510 ind := reflect.Indirect(val)
...@@ -513,6 +544,41 @@ func (d *dbBase) ReadBatch(q dbQuerier, qs *querySet, mi *modelInfo, cond *Condi ...@@ -513,6 +544,41 @@ func (d *dbBase) ReadBatch(q dbQuerier, qs *querySet, mi *modelInfo, cond *Condi
513 544
514 Q := d.ins.TableQuote() 545 Q := d.ins.TableQuote()
515 546
547 var tCols []string
548 if len(cols) > 0 {
549 hasRel := len(qs.related) > 0 || qs.relDepth > 0
550 tCols = make([]string, 0, len(cols))
551 var maps map[string]bool
552 if hasRel {
553 maps = make(map[string]bool)
554 }
555 for _, col := range cols {
556 if fi, ok := mi.fields.GetByAny(col); ok {
557 tCols = append(tCols, fi.column)
558 if hasRel {
559 maps[fi.column] = true
560 }
561 } else {
562 panic(fmt.Sprintf("wrong field/column name `%s`", col))
563 }
564 }
565 if hasRel {
566 for _, fi := range mi.fields.fieldsDB {
567 if fi.fieldType&IsRelField > 0 {
568 if maps[fi.column] == false {
569 tCols = append(tCols, fi.column)
570 }
571 }
572 }
573 }
574 } else {
575 tCols = mi.fields.dbcols
576 }
577
578 colsNum := len(tCols)
579 sep := fmt.Sprintf("%s, T0.%s", Q, Q)
580 sels := fmt.Sprintf("T0.%s%s%s", Q, strings.Join(tCols, sep), Q)
581
516 tables := newDbTables(mi, d.ins) 582 tables := newDbTables(mi, d.ins)
517 tables.parseRelated(qs.related, qs.relDepth) 583 tables.parseRelated(qs.related, qs.relDepth)
518 584
...@@ -521,18 +587,15 @@ func (d *dbBase) ReadBatch(q dbQuerier, qs *querySet, mi *modelInfo, cond *Condi ...@@ -521,18 +587,15 @@ func (d *dbBase) ReadBatch(q dbQuerier, qs *querySet, mi *modelInfo, cond *Condi
521 limit := tables.getLimitSql(mi, offset, rlimit) 587 limit := tables.getLimitSql(mi, offset, rlimit)
522 join := tables.getJoinSql() 588 join := tables.getJoinSql()
523 589
524 colsNum := len(mi.fields.dbcols)
525 sep := fmt.Sprintf("%s, T0.%s", Q, Q)
526 cols := fmt.Sprintf("T0.%s%s%s", Q, strings.Join(mi.fields.dbcols, sep), Q)
527 for _, tbl := range tables.tables { 590 for _, tbl := range tables.tables {
528 if tbl.sel { 591 if tbl.sel {
529 colsNum += len(tbl.mi.fields.dbcols) 592 colsNum += len(tbl.mi.fields.dbcols)
530 sep := fmt.Sprintf("%s, %s.%s", Q, tbl.index, Q) 593 sep := fmt.Sprintf("%s, %s.%s", Q, tbl.index, Q)
531 cols += fmt.Sprintf(", %s.%s%s%s", tbl.index, Q, strings.Join(tbl.mi.fields.dbcols, sep), Q) 594 sels += fmt.Sprintf(", %s.%s%s%s", tbl.index, Q, strings.Join(tbl.mi.fields.dbcols, sep), Q)
532 } 595 }
533 } 596 }
534 597
535 query := fmt.Sprintf("SELECT %s FROM %s%s%s T0 %s%s%s%s", cols, Q, mi.table, Q, join, where, orderBy, limit) 598 query := fmt.Sprintf("SELECT %s FROM %s%s%s T0 %s%s%s%s", sels, Q, mi.table, Q, join, where, orderBy, limit)
536 599
537 d.ins.ReplaceMarks(&query) 600 d.ins.ReplaceMarks(&query)
538 601
...@@ -565,8 +628,8 @@ func (d *dbBase) ReadBatch(q dbQuerier, qs *querySet, mi *modelInfo, cond *Condi ...@@ -565,8 +628,8 @@ func (d *dbBase) ReadBatch(q dbQuerier, qs *querySet, mi *modelInfo, cond *Condi
565 cacheM := make(map[string]*modelInfo) 628 cacheM := make(map[string]*modelInfo)
566 trefs := refs 629 trefs := refs
567 630
568 d.setColsValues(mi, &mind, mi.fields.dbcols, refs[:len(mi.fields.dbcols)], tz) 631 d.setColsValues(mi, &mind, tCols, refs[:len(tCols)], tz)
569 trefs = refs[len(mi.fields.dbcols):] 632 trefs = refs[len(tCols):]
570 633
571 for _, tbl := range tables.tables { 634 for _, tbl := range tables.tables {
572 if tbl.sel { 635 if tbl.sel {
......
...@@ -53,9 +53,9 @@ func (o *orm) getMiInd(md interface{}) (mi *modelInfo, ind reflect.Value) { ...@@ -53,9 +53,9 @@ func (o *orm) getMiInd(md interface{}) (mi *modelInfo, ind reflect.Value) {
53 panic(fmt.Sprintf("<Ormer> table: `%s` not found, maybe not RegisterModel", name)) 53 panic(fmt.Sprintf("<Ormer> table: `%s` not found, maybe not RegisterModel", name))
54 } 54 }
55 55
56 func (o *orm) Read(md interface{}) error { 56 func (o *orm) Read(md interface{}, cols ...string) error {
57 mi, ind := o.getMiInd(md) 57 mi, ind := o.getMiInd(md)
58 err := o.alias.DbBaser.Read(o.db, mi, ind, o.alias.TZ) 58 err := o.alias.DbBaser.Read(o.db, mi, ind, o.alias.TZ, cols)
59 if err != nil { 59 if err != nil {
60 return err 60 return err
61 } 61 }
...@@ -80,9 +80,9 @@ func (o *orm) Insert(md interface{}) (int64, error) { ...@@ -80,9 +80,9 @@ func (o *orm) Insert(md interface{}) (int64, error) {
80 return id, nil 80 return id, nil
81 } 81 }
82 82
83 func (o *orm) Update(md interface{}) (int64, error) { 83 func (o *orm) Update(md interface{}, cols ...string) (int64, error) {
84 mi, ind := o.getMiInd(md) 84 mi, ind := o.getMiInd(md)
85 num, err := o.alias.DbBaser.Update(o.db, mi, ind, o.alias.TZ) 85 num, err := o.alias.DbBaser.Update(o.db, mi, ind, o.alias.TZ, cols)
86 if err != nil { 86 if err != nil {
87 return num, err 87 return num, err
88 } 88 }
......
...@@ -105,12 +105,12 @@ func (o *querySet) PrepareInsert() (Inserter, error) { ...@@ -105,12 +105,12 @@ func (o *querySet) PrepareInsert() (Inserter, error) {
105 return newInsertSet(o.orm, o.mi) 105 return newInsertSet(o.orm, o.mi)
106 } 106 }
107 107
108 func (o *querySet) All(container interface{}) (int64, error) { 108 func (o *querySet) All(container interface{}, cols ...string) (int64, error) {
109 return o.orm.alias.DbBaser.ReadBatch(o.orm.db, o, o.mi, o.cond, container, o.orm.alias.TZ) 109 return o.orm.alias.DbBaser.ReadBatch(o.orm.db, o, o.mi, o.cond, container, o.orm.alias.TZ, cols)
110 } 110 }
111 111
112 func (o *querySet) One(container interface{}) error { 112 func (o *querySet) One(container interface{}, cols ...string) error {
113 num, err := o.orm.alias.DbBaser.ReadBatch(o.orm.db, o, o.mi, o.cond, container, o.orm.alias.TZ) 113 num, err := o.orm.alias.DbBaser.ReadBatch(o.orm.db, o, o.mi, o.cond, container, o.orm.alias.TZ, cols)
114 if err != nil { 114 if err != nil {
115 return err 115 return err
116 } 116 }
......
...@@ -20,91 +20,40 @@ var ( ...@@ -20,91 +20,40 @@ var (
20 test_DateTime = format_DateTime + " -0700" 20 test_DateTime = format_DateTime + " -0700"
21 ) 21 )
22 22
23 type T_Code int 23 func ValuesCompare(is bool, a interface{}, args ...interface{}) (err error, ok bool) {
24
25 const (
26 // =
27 T_Equal T_Code = iota
28 // <
29 T_Less
30 // >
31 T_Large
32 // elment in slice/array
33 // T_In
34 // key exists in map
35 // T_KeyExist
36 // index != -1
37 // T_Contain
38 // index == 0
39 // T_StartWith
40 // index == len(x) - 1
41 // T_EndWith
42 )
43
44 func ValuesCompare(is bool, a interface{}, o T_Code, args ...interface{}) (err error, ok bool) {
45 if len(args) == 0 { 24 if len(args) == 0 {
46 return fmt.Errorf("miss args"), false 25 return fmt.Errorf("miss args"), false
47 } 26 }
48 b := args[0] 27 b := args[0]
49 arg := argAny(args) 28 arg := argAny(args)
50 switch o { 29
51 case T_Equal: 30 switch v := a.(type) {
52 switch v := a.(type) { 31 case reflect.Kind:
53 case reflect.Kind: 32 ok = reflect.ValueOf(b).Kind() == v
54 ok = reflect.ValueOf(b).Kind() == v 33 case time.Time:
55 case time.Time: 34 if v2, vo := b.(time.Time); vo {
56 if v2, vo := b.(time.Time); vo { 35 if arg.Get(1) != nil {
57 if arg.Get(1) != nil { 36 format := ToStr(arg.Get(1))
58 format := ToStr(arg.Get(1)) 37 a = v.Format(format)
59 a = v.Format(format) 38 b = v2.Format(format)
60 b = v2.Format(format) 39 ok = a == b
61 ok = a == b
62 } else {
63 err = fmt.Errorf("compare datetime miss format")
64 goto wrongArg
65 }
66 }
67 default:
68 ok = ToStr(a) == ToStr(b)
69 }
70 ok = is && ok || !is && !ok
71 if !ok {
72 if is {
73 err = fmt.Errorf("expected: a == `%v`, get `%v`", b, a)
74 } else { 40 } else {
75 err = fmt.Errorf("expected: a != `%v`, get `%v`", b, a) 41 err = fmt.Errorf("compare datetime miss format")
42 goto wrongArg
76 } 43 }
77 } 44 }
78 case T_Less, T_Large: 45 default:
79 as := ToStr(a) 46 ok = ToStr(a) == ToStr(b)
80 bs := ToStr(b) 47 }
81 f1, er := StrTo(as).Float64() 48 ok = is && ok || !is && !ok
82 if er != nil { 49 if !ok {
83 err = fmt.Errorf("wrong type need numeric: `%v`", a) 50 if is {
84 goto wrongArg 51 err = fmt.Errorf("expected: a == `%v`, get `%v`", b, a)
85 }
86 f2, er := StrTo(bs).Float64()
87 if er != nil {
88 err = fmt.Errorf("wrong type need numeric: `%v`", b)
89 goto wrongArg
90 }
91 var opts []string
92 if o == T_Less {
93 opts = []string{"<", ">="}
94 ok = f1 < f2
95 } else { 52 } else {
96 opts = []string{">", "<="} 53 err = fmt.Errorf("expected: a != `%v`, get `%v`", b, a)
97 ok = f1 > f2
98 }
99 ok = is && ok || !is && !ok
100 if !ok {
101 if is {
102 err = fmt.Errorf("should: a %s b, but a = `%v`, b = `%v`", opts[0], f1, f2)
103 } else {
104 err = fmt.Errorf("should: a %s b, but a = `%v`, b = `%v`", opts[1], f1, f2)
105 }
106 } 54 }
107 } 55 }
56
108 wrongArg: 57 wrongArg:
109 if err != nil { 58 if err != nil {
110 return err, false 59 return err, false
...@@ -113,15 +62,15 @@ wrongArg: ...@@ -113,15 +62,15 @@ wrongArg:
113 return nil, true 62 return nil, true
114 } 63 }
115 64
116 func AssertIs(a interface{}, o T_Code, args ...interface{}) error { 65 func AssertIs(a interface{}, args ...interface{}) error {
117 if err, ok := ValuesCompare(true, a, o, args...); ok == false { 66 if err, ok := ValuesCompare(true, a, args...); ok == false {
118 return err 67 return err
119 } 68 }
120 return nil 69 return nil
121 } 70 }
122 71
123 func AssertNot(a interface{}, o T_Code, args ...interface{}) error { 72 func AssertNot(a interface{}, args ...interface{}) error {
124 if err, ok := ValuesCompare(false, a, o, args...); ok == false { 73 if err, ok := ValuesCompare(false, a, args...); ok == false {
125 return err 74 return err
126 } 75 }
127 return nil 76 return nil
...@@ -224,12 +173,12 @@ func TestModelSyntax(t *testing.T) { ...@@ -224,12 +173,12 @@ func TestModelSyntax(t *testing.T) {
224 ind := reflect.ValueOf(user).Elem() 173 ind := reflect.ValueOf(user).Elem()
225 fn := getFullName(ind.Type()) 174 fn := getFullName(ind.Type())
226 mi, ok := modelCache.getByFN(fn) 175 mi, ok := modelCache.getByFN(fn)
227 throwFail(t, AssertIs(ok, T_Equal, true)) 176 throwFail(t, AssertIs(ok, true))
228 177
229 mi, ok = modelCache.get("user") 178 mi, ok = modelCache.get("user")
230 throwFail(t, AssertIs(ok, T_Equal, true)) 179 throwFail(t, AssertIs(ok, true))
231 if ok { 180 if ok {
232 throwFail(t, AssertIs(mi.fields.GetByName("ShouldSkip") == nil, T_Equal, true)) 181 throwFail(t, AssertIs(mi.fields.GetByName("ShouldSkip") == nil, true))
233 } 182 }
234 } 183 }
235 184
...@@ -267,7 +216,7 @@ func TestDataTypes(t *testing.T) { ...@@ -267,7 +216,7 @@ func TestDataTypes(t *testing.T) {
267 216
268 id, err := dORM.Insert(&d) 217 id, err := dORM.Insert(&d)
269 throwFail(t, err) 218 throwFail(t, err)
270 throwFail(t, AssertIs(id, T_Equal, 1)) 219 throwFail(t, AssertIs(id, 1))
271 220
272 d = Data{Id: 1} 221 d = Data{Id: 1}
273 err = dORM.Read(&d) 222 err = dORM.Read(&d)
...@@ -286,7 +235,7 @@ func TestDataTypes(t *testing.T) { ...@@ -286,7 +235,7 @@ func TestDataTypes(t *testing.T) {
286 vu = vu.(time.Time).In(DefaultTimeLoc).Format(test_DateTime) 235 vu = vu.(time.Time).In(DefaultTimeLoc).Format(test_DateTime)
287 value = value.(time.Time).In(DefaultTimeLoc).Format(test_DateTime) 236 value = value.(time.Time).In(DefaultTimeLoc).Format(test_DateTime)
288 } 237 }
289 throwFail(t, AssertIs(vu == value, T_Equal, true), value, vu) 238 throwFail(t, AssertIs(vu == value, true), value, vu)
290 } 239 }
291 } 240 }
292 241
...@@ -301,7 +250,7 @@ func TestNullDataTypes(t *testing.T) { ...@@ -301,7 +250,7 @@ func TestNullDataTypes(t *testing.T) {
301 250
302 id, err := dORM.Insert(&d) 251 id, err := dORM.Insert(&d)
303 throwFail(t, err) 252 throwFail(t, err)
304 throwFail(t, AssertIs(id, T_Equal, 1)) 253 throwFail(t, AssertIs(id, 1))
305 254
306 d = DataNull{Id: 1} 255 d = DataNull{Id: 1}
307 err = dORM.Read(&d) 256 err = dORM.Read(&d)
...@@ -321,7 +270,7 @@ func TestCRUD(t *testing.T) { ...@@ -321,7 +270,7 @@ func TestCRUD(t *testing.T) {
321 profile.Money = 1234.12 270 profile.Money = 1234.12
322 id, err := dORM.Insert(profile) 271 id, err := dORM.Insert(profile)
323 throwFail(t, err) 272 throwFail(t, err)
324 throwFail(t, AssertIs(id, T_Equal, 1)) 273 throwFail(t, AssertIs(id, 1))
325 274
326 user := NewUser() 275 user := NewUser()
327 user.UserName = "slene" 276 user.UserName = "slene"
...@@ -333,63 +282,77 @@ func TestCRUD(t *testing.T) { ...@@ -333,63 +282,77 @@ func TestCRUD(t *testing.T) {
333 282
334 id, err = dORM.Insert(user) 283 id, err = dORM.Insert(user)
335 throwFail(t, err) 284 throwFail(t, err)
336 throwFail(t, AssertIs(id, T_Equal, 1)) 285 throwFail(t, AssertIs(id, 1))
337 286
338 u := &User{Id: user.Id} 287 u := &User{Id: user.Id}
339 err = dORM.Read(u) 288 err = dORM.Read(u)
340 throwFail(t, err) 289 throwFail(t, err)
341 290
342 throwFail(t, AssertIs(u.UserName, T_Equal, "slene")) 291 throwFail(t, AssertIs(u.UserName, "slene"))
343 throwFail(t, AssertIs(u.Email, T_Equal, "vslene@gmail.com")) 292 throwFail(t, AssertIs(u.Email, "vslene@gmail.com"))
344 throwFail(t, AssertIs(u.Password, T_Equal, "pass")) 293 throwFail(t, AssertIs(u.Password, "pass"))
345 throwFail(t, AssertIs(u.Status, T_Equal, 3)) 294 throwFail(t, AssertIs(u.Status, 3))
346 throwFail(t, AssertIs(u.IsStaff, T_Equal, true)) 295 throwFail(t, AssertIs(u.IsStaff, true))
347 throwFail(t, AssertIs(u.IsActive, T_Equal, true)) 296 throwFail(t, AssertIs(u.IsActive, true))
348 throwFail(t, AssertIs(u.Created.In(DefaultTimeLoc), T_Equal, user.Created.In(DefaultTimeLoc), test_Date)) 297 throwFail(t, AssertIs(u.Created.In(DefaultTimeLoc), user.Created.In(DefaultTimeLoc), test_Date))
349 throwFail(t, AssertIs(u.Updated.In(DefaultTimeLoc), T_Equal, user.Updated.In(DefaultTimeLoc), test_DateTime)) 298 throwFail(t, AssertIs(u.Updated.In(DefaultTimeLoc), user.Updated.In(DefaultTimeLoc), test_DateTime))
350 299
351 user.UserName = "astaxie" 300 user.UserName = "astaxie"
352 user.Profile = profile 301 user.Profile = profile
353 num, err := dORM.Update(user) 302 num, err := dORM.Update(user)
354 throwFail(t, err) 303 throwFail(t, err)
355 throwFail(t, AssertIs(num, T_Equal, 1)) 304 throwFail(t, AssertIs(num, 1))
356 305
357 u = &User{Id: user.Id} 306 u = &User{Id: user.Id}
358 err = dORM.Read(u) 307 err = dORM.Read(u)
308 throwFailNow(t, err)
309 throwFail(t, AssertIs(u.UserName, "astaxie"))
310 throwFail(t, AssertIs(u.Profile.Id, profile.Id))
311
312 u = &User{UserName: "astaxie", Password: "pass"}
313 err = dORM.Read(u, "UserName")
314 throwFailNow(t, err)
315 throwFailNow(t, AssertIs(id, 1))
316
317 u.UserName = "QQ"
318 u.Password = "111"
319 num, err = dORM.Update(u, "UserName")
359 throwFail(t, err) 320 throwFail(t, err)
321 throwFail(t, AssertIs(num, 1))
360 322
361 if err == nil { 323 u = &User{Id: user.Id}
362 throwFail(t, AssertIs(u.UserName, T_Equal, "astaxie")) 324 err = dORM.Read(u)
363 throwFail(t, AssertIs(u.Profile.Id, T_Equal, profile.Id)) 325 throwFailNow(t, err)
364 } 326 throwFail(t, AssertIs(u.UserName, "QQ"))
327 throwFail(t, AssertIs(u.Password, "pass"))
365 328
366 num, err = dORM.Delete(profile) 329 num, err = dORM.Delete(profile)
367 throwFail(t, err) 330 throwFail(t, err)
368 throwFail(t, AssertIs(num, T_Equal, 1)) 331 throwFail(t, AssertIs(num, 1))
369 332
370 u = &User{Id: user.Id} 333 u = &User{Id: user.Id}
371 err = dORM.Read(u) 334 err = dORM.Read(u)
372 throwFail(t, err) 335 throwFail(t, err)
373 throwFail(t, AssertIs(true, T_Equal, u.Profile == nil)) 336 throwFail(t, AssertIs(true, u.Profile == nil))
374 337
375 num, err = dORM.Delete(user) 338 num, err = dORM.Delete(user)
376 throwFail(t, err) 339 throwFail(t, err)
377 throwFail(t, AssertIs(num, T_Equal, 1)) 340 throwFail(t, AssertIs(num, 1))
378 341
379 u = &User{Id: 100} 342 u = &User{Id: 100}
380 err = dORM.Read(u) 343 err = dORM.Read(u)
381 throwFail(t, AssertIs(err, T_Equal, ErrNoRows)) 344 throwFail(t, AssertIs(err, ErrNoRows))
382 345
383 ub := UserBig{} 346 ub := UserBig{}
384 ub.Name = "name" 347 ub.Name = "name"
385 id, err = dORM.Insert(&ub) 348 id, err = dORM.Insert(&ub)
386 throwFail(t, err) 349 throwFail(t, err)
387 throwFail(t, AssertIs(id, T_Equal, 1)) 350 throwFail(t, AssertIs(id, 1))
388 351
389 ub = UserBig{Id: 1} 352 ub = UserBig{Id: 1}
390 err = dORM.Read(&ub) 353 err = dORM.Read(&ub)
391 throwFail(t, err) 354 throwFail(t, err)
392 throwFail(t, AssertIs(ub.Name, T_Equal, "name")) 355 throwFail(t, AssertIs(ub.Name, "name"))
393 } 356 }
394 357
395 func TestInsertTestData(t *testing.T) { 358 func TestInsertTestData(t *testing.T) {
...@@ -401,7 +364,7 @@ func TestInsertTestData(t *testing.T) { ...@@ -401,7 +364,7 @@ func TestInsertTestData(t *testing.T) {
401 364
402 id, err := dORM.Insert(profile) 365 id, err := dORM.Insert(profile)
403 throwFail(t, err) 366 throwFail(t, err)
404 throwFail(t, AssertIs(id, T_Equal, 2)) 367 throwFail(t, AssertIs(id, 2))
405 368
406 user := NewUser() 369 user := NewUser()
407 user.UserName = "slene" 370 user.UserName = "slene"
...@@ -416,7 +379,7 @@ func TestInsertTestData(t *testing.T) { ...@@ -416,7 +379,7 @@ func TestInsertTestData(t *testing.T) {
416 379
417 id, err = dORM.Insert(user) 380 id, err = dORM.Insert(user)
418 throwFail(t, err) 381 throwFail(t, err)
419 throwFail(t, AssertIs(id, T_Equal, 2)) 382 throwFail(t, AssertIs(id, 2))
420 383
421 profile = NewProfile() 384 profile = NewProfile()
422 profile.Age = 30 385 profile.Age = 30
...@@ -424,7 +387,7 @@ func TestInsertTestData(t *testing.T) { ...@@ -424,7 +387,7 @@ func TestInsertTestData(t *testing.T) {
424 387
425 id, err = dORM.Insert(profile) 388 id, err = dORM.Insert(profile)
426 throwFail(t, err) 389 throwFail(t, err)
427 throwFail(t, AssertIs(id, T_Equal, 3)) 390 throwFail(t, AssertIs(id, 3))
428 391
429 user = NewUser() 392 user = NewUser()
430 user.UserName = "astaxie" 393 user.UserName = "astaxie"
...@@ -439,7 +402,7 @@ func TestInsertTestData(t *testing.T) { ...@@ -439,7 +402,7 @@ func TestInsertTestData(t *testing.T) {
439 402
440 id, err = dORM.Insert(user) 403 id, err = dORM.Insert(user)
441 throwFail(t, err) 404 throwFail(t, err)
442 throwFail(t, AssertIs(id, T_Equal, 3)) 405 throwFail(t, AssertIs(id, 3))
443 406
444 user = NewUser() 407 user = NewUser()
445 user.UserName = "nobody" 408 user.UserName = "nobody"
...@@ -453,7 +416,7 @@ func TestInsertTestData(t *testing.T) { ...@@ -453,7 +416,7 @@ func TestInsertTestData(t *testing.T) {
453 416
454 id, err = dORM.Insert(user) 417 id, err = dORM.Insert(user)
455 throwFail(t, err) 418 throwFail(t, err)
456 throwFail(t, AssertIs(id, T_Equal, 4)) 419 throwFail(t, AssertIs(id, 4))
457 420
458 tags := []*Tag{ 421 tags := []*Tag{
459 &Tag{Name: "golang"}, 422 &Tag{Name: "golang"},
...@@ -484,20 +447,20 @@ The program—and web server—godoc processes Go source files to extract docume ...@@ -484,20 +447,20 @@ The program—and web server—godoc processes Go source files to extract docume
484 for _, tag := range tags { 447 for _, tag := range tags {
485 id, err := dORM.Insert(tag) 448 id, err := dORM.Insert(tag)
486 throwFail(t, err) 449 throwFail(t, err)
487 throwFail(t, AssertIs(id, T_Large, 0)) 450 throwFail(t, AssertIs(id > 0, true))
488 } 451 }
489 452
490 for _, post := range posts { 453 for _, post := range posts {
491 id, err := dORM.Insert(post) 454 id, err := dORM.Insert(post)
492 throwFail(t, err) 455 throwFail(t, err)
493 throwFail(t, AssertIs(id, T_Large, 0)) 456 throwFail(t, AssertIs(id > 0, true))
494 // dORM.M2mAdd(post, "tags", post.Tags) 457 // dORM.M2mAdd(post, "tags", post.Tags)
495 } 458 }
496 459
497 for _, comment := range comments { 460 for _, comment := range comments {
498 id, err := dORM.Insert(comment) 461 id, err := dORM.Insert(comment)
499 throwFail(t, err) 462 throwFail(t, err)
500 throwFail(t, AssertIs(id, T_Large, 0)) 463 throwFail(t, AssertIs(id > 0, true))
501 } 464 }
502 } 465 }
503 466
...@@ -508,34 +471,34 @@ func TestExpr(t *testing.T) { ...@@ -508,34 +471,34 @@ func TestExpr(t *testing.T) {
508 qs = dORM.QueryTable("user") 471 qs = dORM.QueryTable("user")
509 num, err := qs.Filter("UserName", "slene").Filter("user_name", "slene").Filter("profile__Age", 28).Count() 472 num, err := qs.Filter("UserName", "slene").Filter("user_name", "slene").Filter("profile__Age", 28).Count()
510 throwFail(t, err) 473 throwFail(t, err)
511 throwFail(t, AssertIs(num, T_Equal, 1)) 474 throwFail(t, AssertIs(num, 1))
512 475
513 num, err = qs.Filter("created", time.Now()).Count() 476 num, err = qs.Filter("created", time.Now()).Count()
514 throwFail(t, err) 477 throwFail(t, err)
515 throwFail(t, AssertIs(num, T_Equal, 3)) 478 throwFail(t, AssertIs(num, 3))
516 479
517 num, err = qs.Filter("created", time.Now().Format(format_Date)).Count() 480 num, err = qs.Filter("created", time.Now().Format(format_Date)).Count()
518 throwFail(t, err) 481 throwFail(t, err)
519 throwFail(t, AssertIs(num, T_Equal, 3)) 482 throwFail(t, AssertIs(num, 3))
520 } 483 }
521 484
522 func TestOperators(t *testing.T) { 485 func TestOperators(t *testing.T) {
523 qs := dORM.QueryTable("user") 486 qs := dORM.QueryTable("user")
524 num, err := qs.Filter("user_name", "slene").Count() 487 num, err := qs.Filter("user_name", "slene").Count()
525 throwFail(t, err) 488 throwFail(t, err)
526 throwFail(t, AssertIs(num, T_Equal, 1)) 489 throwFail(t, AssertIs(num, 1))
527 490
528 num, err = qs.Filter("user_name__exact", "slene").Count() 491 num, err = qs.Filter("user_name__exact", "slene").Count()
529 throwFail(t, err) 492 throwFail(t, err)
530 throwFail(t, AssertIs(num, T_Equal, 1)) 493 throwFail(t, AssertIs(num, 1))
531 494
532 num, err = qs.Filter("user_name__iexact", "Slene").Count() 495 num, err = qs.Filter("user_name__iexact", "Slene").Count()
533 throwFail(t, err) 496 throwFail(t, err)
534 throwFail(t, AssertIs(num, T_Equal, 1)) 497 throwFail(t, AssertIs(num, 1))
535 498
536 num, err = qs.Filter("user_name__contains", "e").Count() 499 num, err = qs.Filter("user_name__contains", "e").Count()
537 throwFail(t, err) 500 throwFail(t, err)
538 throwFail(t, AssertIs(num, T_Equal, 2)) 501 throwFail(t, AssertIs(num, 2))
539 502
540 var shouldNum int 503 var shouldNum int
541 504
...@@ -547,35 +510,35 @@ func TestOperators(t *testing.T) { ...@@ -547,35 +510,35 @@ func TestOperators(t *testing.T) {
547 510
548 num, err = qs.Filter("user_name__contains", "E").Count() 511 num, err = qs.Filter("user_name__contains", "E").Count()
549 throwFail(t, err) 512 throwFail(t, err)
550 throwFail(t, AssertIs(num, T_Equal, shouldNum)) 513 throwFail(t, AssertIs(num, shouldNum))
551 514
552 num, err = qs.Filter("user_name__icontains", "E").Count() 515 num, err = qs.Filter("user_name__icontains", "E").Count()
553 throwFail(t, err) 516 throwFail(t, err)
554 throwFail(t, AssertIs(num, T_Equal, 2)) 517 throwFail(t, AssertIs(num, 2))
555 518
556 num, err = qs.Filter("user_name__icontains", "E").Count() 519 num, err = qs.Filter("user_name__icontains", "E").Count()
557 throwFail(t, err) 520 throwFail(t, err)
558 throwFail(t, AssertIs(num, T_Equal, 2)) 521 throwFail(t, AssertIs(num, 2))
559 522
560 num, err = qs.Filter("status__gt", 1).Count() 523 num, err = qs.Filter("status__gt", 1).Count()
561 throwFail(t, err) 524 throwFail(t, err)
562 throwFail(t, AssertIs(num, T_Equal, 2)) 525 throwFail(t, AssertIs(num, 2))
563 526
564 num, err = qs.Filter("status__gte", 1).Count() 527 num, err = qs.Filter("status__gte", 1).Count()
565 throwFail(t, err) 528 throwFail(t, err)
566 throwFail(t, AssertIs(num, T_Equal, 3)) 529 throwFail(t, AssertIs(num, 3))
567 530
568 num, err = qs.Filter("status__lt", 3).Count() 531 num, err = qs.Filter("status__lt", 3).Count()
569 throwFail(t, err) 532 throwFail(t, err)
570 throwFail(t, AssertIs(num, T_Equal, 2)) 533 throwFail(t, AssertIs(num, 2))
571 534
572 num, err = qs.Filter("status__lte", 3).Count() 535 num, err = qs.Filter("status__lte", 3).Count()
573 throwFail(t, err) 536 throwFail(t, err)
574 throwFail(t, AssertIs(num, T_Equal, 3)) 537 throwFail(t, AssertIs(num, 3))
575 538
576 num, err = qs.Filter("user_name__startswith", "s").Count() 539 num, err = qs.Filter("user_name__startswith", "s").Count()
577 throwFail(t, err) 540 throwFail(t, err)
578 throwFail(t, AssertIs(num, T_Equal, 1)) 541 throwFail(t, AssertIs(num, 1))
579 542
580 if IsSqlite { 543 if IsSqlite {
581 shouldNum = 1 544 shouldNum = 1
...@@ -585,15 +548,15 @@ func TestOperators(t *testing.T) { ...@@ -585,15 +548,15 @@ func TestOperators(t *testing.T) {
585 548
586 num, err = qs.Filter("user_name__startswith", "S").Count() 549 num, err = qs.Filter("user_name__startswith", "S").Count()
587 throwFail(t, err) 550 throwFail(t, err)
588 throwFail(t, AssertIs(num, T_Equal, shouldNum)) 551 throwFail(t, AssertIs(num, shouldNum))
589 552
590 num, err = qs.Filter("user_name__istartswith", "S").Count() 553 num, err = qs.Filter("user_name__istartswith", "S").Count()
591 throwFail(t, err) 554 throwFail(t, err)
592 throwFail(t, AssertIs(num, T_Equal, 1)) 555 throwFail(t, AssertIs(num, 1))
593 556
594 num, err = qs.Filter("user_name__endswith", "e").Count() 557 num, err = qs.Filter("user_name__endswith", "e").Count()
595 throwFail(t, err) 558 throwFail(t, err)
596 throwFail(t, AssertIs(num, T_Equal, 2)) 559 throwFail(t, AssertIs(num, 2))
597 560
598 if IsSqlite { 561 if IsSqlite {
599 shouldNum = 2 562 shouldNum = 2
...@@ -603,28 +566,28 @@ func TestOperators(t *testing.T) { ...@@ -603,28 +566,28 @@ func TestOperators(t *testing.T) {
603 566
604 num, err = qs.Filter("user_name__endswith", "E").Count() 567 num, err = qs.Filter("user_name__endswith", "E").Count()
605 throwFail(t, err) 568 throwFail(t, err)
606 throwFail(t, AssertIs(num, T_Equal, shouldNum)) 569 throwFail(t, AssertIs(num, shouldNum))
607 570
608 num, err = qs.Filter("user_name__iendswith", "E").Count() 571 num, err = qs.Filter("user_name__iendswith", "E").Count()
609 throwFail(t, err) 572 throwFail(t, err)
610 throwFail(t, AssertIs(num, T_Equal, 2)) 573 throwFail(t, AssertIs(num, 2))
611 574
612 num, err = qs.Filter("profile__isnull", true).Count() 575 num, err = qs.Filter("profile__isnull", true).Count()
613 throwFail(t, err) 576 throwFail(t, err)
614 throwFail(t, AssertIs(num, T_Equal, 1)) 577 throwFail(t, AssertIs(num, 1))
615 578
616 num, err = qs.Filter("status__in", 1, 2).Count() 579 num, err = qs.Filter("status__in", 1, 2).Count()
617 throwFail(t, err) 580 throwFail(t, err)
618 throwFail(t, AssertIs(num, T_Equal, 2)) 581 throwFail(t, AssertIs(num, 2))
619 582
620 num, err = qs.Filter("status__in", []int{1, 2}).Count() 583 num, err = qs.Filter("status__in", []int{1, 2}).Count()
621 throwFail(t, err) 584 throwFail(t, err)
622 throwFail(t, AssertIs(num, T_Equal, 2)) 585 throwFail(t, AssertIs(num, 2))
623 586
624 n1, n2 := 1, 2 587 n1, n2 := 1, 2
625 num, err = qs.Filter("status__in", []*int{&n1}, &n2).Count() 588 num, err = qs.Filter("status__in", []*int{&n1}, &n2).Count()
626 throwFail(t, err) 589 throwFail(t, err)
627 throwFail(t, AssertIs(num, T_Equal, 2)) 590 throwFail(t, AssertIs(num, 2))
628 } 591 }
629 592
630 func TestAll(t *testing.T) { 593 func TestAll(t *testing.T) {
...@@ -632,41 +595,56 @@ func TestAll(t *testing.T) { ...@@ -632,41 +595,56 @@ func TestAll(t *testing.T) {
632 qs := dORM.QueryTable("user") 595 qs := dORM.QueryTable("user")
633 num, err := qs.OrderBy("Id").All(&users) 596 num, err := qs.OrderBy("Id").All(&users)
634 throwFail(t, err) 597 throwFail(t, err)
635 throwFailNow(t, AssertIs(num, T_Equal, 3)) 598 throwFailNow(t, AssertIs(num, 3))
636 599
637 throwFail(t, AssertIs(users[0].UserName, T_Equal, "slene")) 600 throwFail(t, AssertIs(users[0].UserName, "slene"))
638 throwFail(t, AssertIs(users[1].UserName, T_Equal, "astaxie")) 601 throwFail(t, AssertIs(users[1].UserName, "astaxie"))
639 throwFail(t, AssertIs(users[2].UserName, T_Equal, "nobody")) 602 throwFail(t, AssertIs(users[2].UserName, "nobody"))
640 603
641 var users2 []User 604 var users2 []User
642 qs = dORM.QueryTable("user") 605 qs = dORM.QueryTable("user")
643 num, err = qs.OrderBy("Id").All(&users2) 606 num, err = qs.OrderBy("Id").All(&users2)
644 throwFail(t, err) 607 throwFail(t, err)
645 throwFailNow(t, AssertIs(num, T_Equal, 3)) 608 throwFailNow(t, AssertIs(num, 3))
609
610 throwFailNow(t, AssertIs(users2[0].UserName, "slene"))
611 throwFailNow(t, AssertIs(users2[1].UserName, "astaxie"))
612 throwFailNow(t, AssertIs(users2[2].UserName, "nobody"))
646 613
647 throwFailNow(t, AssertIs(users2[0].UserName, T_Equal, "slene")) 614 qs = dORM.QueryTable("user")
648 throwFailNow(t, AssertIs(users2[1].UserName, T_Equal, "astaxie")) 615 num, err = qs.OrderBy("Id").RelatedSel().All(&users2, "UserName")
649 throwFailNow(t, AssertIs(users2[2].UserName, T_Equal, "nobody")) 616 throwFail(t, err)
617 throwFailNow(t, AssertIs(num, 3))
618 throwFailNow(t, AssertIs(len(users2), 3))
619 throwFailNow(t, AssertIs(users2[0].UserName, "slene"))
620 throwFailNow(t, AssertIs(users2[1].UserName, "astaxie"))
621 throwFailNow(t, AssertIs(users2[2].UserName, "nobody"))
622 throwFailNow(t, AssertIs(users2[0].Id, 0))
623 throwFailNow(t, AssertIs(users2[1].Id, 0))
624 throwFailNow(t, AssertIs(users2[2].Id, 0))
625 throwFailNow(t, AssertIs(users2[0].Profile == nil, false))
626 throwFailNow(t, AssertIs(users2[1].Profile == nil, false))
627 throwFailNow(t, AssertIs(users2[2].Profile == nil, true))
650 628
651 qs = dORM.QueryTable("user") 629 qs = dORM.QueryTable("user")
652 num, err = qs.Filter("user_name", "nothing").All(&users) 630 num, err = qs.Filter("user_name", "nothing").All(&users)
653 throwFail(t, err) 631 throwFail(t, err)
654 throwFail(t, AssertIs(num, T_Equal, 0)) 632 throwFail(t, AssertIs(num, 0))
655 } 633 }
656 634
657 func TestOne(t *testing.T) { 635 func TestOne(t *testing.T) {
658 var user User 636 var user User
659 qs := dORM.QueryTable("user") 637 qs := dORM.QueryTable("user")
660 err := qs.One(&user) 638 err := qs.One(&user)
661 throwFail(t, AssertIs(err, T_Equal, ErrMultiRows)) 639 throwFail(t, AssertIs(err, ErrMultiRows))
662 640
663 user = User{} 641 user = User{}
664 err = qs.OrderBy("Id").Limit(1).One(&user) 642 err = qs.OrderBy("Id").Limit(1).One(&user)
665 throwFailNow(t, err) 643 throwFailNow(t, err)
666 throwFail(t, AssertIs(user.UserName, T_Equal, "slene")) 644 throwFail(t, AssertIs(user.UserName, "slene"))
667 645
668 err = qs.Filter("user_name", "nothing").One(&user) 646 err = qs.Filter("user_name", "nothing").One(&user)
669 throwFail(t, AssertIs(err, T_Equal, ErrNoRows)) 647 throwFail(t, AssertIs(err, ErrNoRows))
670 648
671 } 649 }
672 650
...@@ -676,19 +654,19 @@ func TestValues(t *testing.T) { ...@@ -676,19 +654,19 @@ func TestValues(t *testing.T) {
676 654
677 num, err := qs.Values(&maps) 655 num, err := qs.Values(&maps)
678 throwFail(t, err) 656 throwFail(t, err)
679 throwFail(t, AssertIs(num, T_Equal, 3)) 657 throwFail(t, AssertIs(num, 3))
680 if num == 3 { 658 if num == 3 {
681 throwFail(t, AssertIs(maps[0]["UserName"], T_Equal, "slene")) 659 throwFail(t, AssertIs(maps[0]["UserName"], "slene"))
682 throwFail(t, AssertIs(maps[2]["Profile"], T_Equal, nil)) 660 throwFail(t, AssertIs(maps[2]["Profile"], nil))
683 } 661 }
684 662
685 num, err = qs.Values(&maps, "UserName", "Profile__Age") 663 num, err = qs.Values(&maps, "UserName", "Profile__Age")
686 throwFail(t, err) 664 throwFail(t, err)
687 throwFail(t, AssertIs(num, T_Equal, 3)) 665 throwFail(t, AssertIs(num, 3))
688 if num == 3 { 666 if num == 3 {
689 throwFail(t, AssertIs(maps[0]["UserName"], T_Equal, "slene")) 667 throwFail(t, AssertIs(maps[0]["UserName"], "slene"))
690 throwFail(t, AssertIs(maps[0]["Profile__Age"], T_Equal, 28)) 668 throwFail(t, AssertIs(maps[0]["Profile__Age"], 28))
691 throwFail(t, AssertIs(maps[2]["Profile__Age"], T_Equal, nil)) 669 throwFail(t, AssertIs(maps[2]["Profile__Age"], nil))
692 } 670 }
693 } 671 }
694 672
...@@ -698,19 +676,19 @@ func TestValuesList(t *testing.T) { ...@@ -698,19 +676,19 @@ func TestValuesList(t *testing.T) {
698 676
699 num, err := qs.ValuesList(&list) 677 num, err := qs.ValuesList(&list)
700 throwFail(t, err) 678 throwFail(t, err)
701 throwFail(t, AssertIs(num, T_Equal, 3)) 679 throwFail(t, AssertIs(num, 3))
702 if num == 3 { 680 if num == 3 {
703 throwFail(t, AssertIs(list[0][1], T_Equal, "slene")) 681 throwFail(t, AssertIs(list[0][1], "slene"))
704 throwFail(t, AssertIs(list[2][9], T_Equal, nil)) 682 throwFail(t, AssertIs(list[2][9], nil))
705 } 683 }
706 684
707 num, err = qs.ValuesList(&list, "UserName", "Profile__Age") 685 num, err = qs.ValuesList(&list, "UserName", "Profile__Age")
708 throwFail(t, err) 686 throwFail(t, err)
709 throwFail(t, AssertIs(num, T_Equal, 3)) 687 throwFail(t, AssertIs(num, 3))
710 if num == 3 { 688 if num == 3 {
711 throwFail(t, AssertIs(list[0][0], T_Equal, "slene")) 689 throwFail(t, AssertIs(list[0][0], "slene"))
712 throwFail(t, AssertIs(list[0][1], T_Equal, 28)) 690 throwFail(t, AssertIs(list[0][1], 28))
713 throwFail(t, AssertIs(list[2][1], T_Equal, nil)) 691 throwFail(t, AssertIs(list[2][1], nil))
714 } 692 }
715 } 693 }
716 694
...@@ -720,11 +698,11 @@ func TestValuesFlat(t *testing.T) { ...@@ -720,11 +698,11 @@ func TestValuesFlat(t *testing.T) {
720 698
721 num, err := qs.OrderBy("id").ValuesFlat(&list, "UserName") 699 num, err := qs.OrderBy("id").ValuesFlat(&list, "UserName")
722 throwFail(t, err) 700 throwFail(t, err)
723 throwFail(t, AssertIs(num, T_Equal, 3)) 701 throwFail(t, AssertIs(num, 3))
724 if num == 3 { 702 if num == 3 {
725 throwFail(t, AssertIs(list[0], T_Equal, "slene")) 703 throwFail(t, AssertIs(list[0], "slene"))
726 throwFail(t, AssertIs(list[1], T_Equal, "astaxie")) 704 throwFail(t, AssertIs(list[1], "astaxie"))
727 throwFail(t, AssertIs(list[2], T_Equal, "nobody")) 705 throwFail(t, AssertIs(list[2], "nobody"))
728 } 706 }
729 } 707 }
730 708
...@@ -732,41 +710,41 @@ func TestRelatedSel(t *testing.T) { ...@@ -732,41 +710,41 @@ func TestRelatedSel(t *testing.T) {
732 qs := dORM.QueryTable("user") 710 qs := dORM.QueryTable("user")
733 num, err := qs.Filter("profile__age", 28).Count() 711 num, err := qs.Filter("profile__age", 28).Count()
734 throwFail(t, err) 712 throwFail(t, err)
735 throwFail(t, AssertIs(num, T_Equal, 1)) 713 throwFail(t, AssertIs(num, 1))
736 714
737 num, err = qs.Filter("profile__age__gt", 28).Count() 715 num, err = qs.Filter("profile__age__gt", 28).Count()
738 throwFail(t, err) 716 throwFail(t, err)
739 throwFail(t, AssertIs(num, T_Equal, 1)) 717 throwFail(t, AssertIs(num, 1))
740 718
741 num, err = qs.Filter("profile__user__profile__age__gt", 28).Count() 719 num, err = qs.Filter("profile__user__profile__age__gt", 28).Count()
742 throwFail(t, err) 720 throwFail(t, err)
743 throwFail(t, AssertIs(num, T_Equal, 1)) 721 throwFail(t, AssertIs(num, 1))
744 722
745 var user User 723 var user User
746 err = qs.Filter("user_name", "slene").RelatedSel("profile").One(&user) 724 err = qs.Filter("user_name", "slene").RelatedSel("profile").One(&user)
747 throwFail(t, err) 725 throwFail(t, err)
748 throwFail(t, AssertIs(num, T_Equal, 1)) 726 throwFail(t, AssertIs(num, 1))
749 throwFail(t, AssertNot(user.Profile, T_Equal, nil)) 727 throwFail(t, AssertNot(user.Profile, nil))
750 if user.Profile != nil { 728 if user.Profile != nil {
751 throwFail(t, AssertIs(user.Profile.Age, T_Equal, 28)) 729 throwFail(t, AssertIs(user.Profile.Age, 28))
752 } 730 }
753 731
754 err = qs.Filter("user_name", "slene").RelatedSel().One(&user) 732 err = qs.Filter("user_name", "slene").RelatedSel().One(&user)
755 throwFail(t, err) 733 throwFail(t, err)
756 throwFail(t, AssertIs(num, T_Equal, 1)) 734 throwFail(t, AssertIs(num, 1))
757 throwFail(t, AssertNot(user.Profile, T_Equal, nil)) 735 throwFail(t, AssertNot(user.Profile, nil))
758 if user.Profile != nil { 736 if user.Profile != nil {
759 throwFail(t, AssertIs(user.Profile.Age, T_Equal, 28)) 737 throwFail(t, AssertIs(user.Profile.Age, 28))
760 } 738 }
761 739
762 err = qs.Filter("user_name", "nobody").RelatedSel("profile").One(&user) 740 err = qs.Filter("user_name", "nobody").RelatedSel("profile").One(&user)
763 throwFail(t, AssertIs(num, T_Equal, 1)) 741 throwFail(t, AssertIs(num, 1))
764 throwFail(t, AssertIs(user.Profile, T_Equal, nil)) 742 throwFail(t, AssertIs(user.Profile, nil))
765 743
766 qs = dORM.QueryTable("user_profile") 744 qs = dORM.QueryTable("user_profile")
767 num, err = qs.Filter("user__username", "slene").Count() 745 num, err = qs.Filter("user__username", "slene").Count()
768 throwFail(t, err) 746 throwFail(t, err)
769 throwFail(t, AssertIs(num, T_Equal, 1)) 747 throwFail(t, AssertIs(num, 1))
770 } 748 }
771 749
772 func TestSetCond(t *testing.T) { 750 func TestSetCond(t *testing.T) {
...@@ -776,12 +754,12 @@ func TestSetCond(t *testing.T) { ...@@ -776,12 +754,12 @@ func TestSetCond(t *testing.T) {
776 qs := dORM.QueryTable("user") 754 qs := dORM.QueryTable("user")
777 num, err := qs.SetCond(cond1).Count() 755 num, err := qs.SetCond(cond1).Count()
778 throwFail(t, err) 756 throwFail(t, err)
779 throwFail(t, AssertIs(num, T_Equal, 1)) 757 throwFail(t, AssertIs(num, 1))
780 758
781 cond2 := cond.AndCond(cond1).OrCond(cond.And("user_name", "slene")) 759 cond2 := cond.AndCond(cond1).OrCond(cond.And("user_name", "slene"))
782 num, err = qs.SetCond(cond2).Count() 760 num, err = qs.SetCond(cond2).Count()
783 throwFail(t, err) 761 throwFail(t, err)
784 throwFail(t, AssertIs(num, T_Equal, 2)) 762 throwFail(t, AssertIs(num, 2))
785 } 763 }
786 764
787 func TestLimit(t *testing.T) { 765 func TestLimit(t *testing.T) {
...@@ -789,19 +767,19 @@ func TestLimit(t *testing.T) { ...@@ -789,19 +767,19 @@ func TestLimit(t *testing.T) {
789 qs := dORM.QueryTable("post") 767 qs := dORM.QueryTable("post")
790 num, err := qs.Limit(1).All(&posts) 768 num, err := qs.Limit(1).All(&posts)
791 throwFail(t, err) 769 throwFail(t, err)
792 throwFail(t, AssertIs(num, T_Equal, 1)) 770 throwFail(t, AssertIs(num, 1))
793 771
794 num, err = qs.Limit(-1).All(&posts) 772 num, err = qs.Limit(-1).All(&posts)
795 throwFail(t, err) 773 throwFail(t, err)
796 throwFail(t, AssertIs(num, T_Equal, 4)) 774 throwFail(t, AssertIs(num, 4))
797 775
798 num, err = qs.Limit(-1, 2).All(&posts) 776 num, err = qs.Limit(-1, 2).All(&posts)
799 throwFail(t, err) 777 throwFail(t, err)
800 throwFail(t, AssertIs(num, T_Equal, 2)) 778 throwFail(t, AssertIs(num, 2))
801 779
802 num, err = qs.Limit(0, 2).All(&posts) 780 num, err = qs.Limit(0, 2).All(&posts)
803 throwFail(t, err) 781 throwFail(t, err)
804 throwFail(t, AssertIs(num, T_Equal, 2)) 782 throwFail(t, AssertIs(num, 2))
805 } 783 }
806 784
807 func TestOffset(t *testing.T) { 785 func TestOffset(t *testing.T) {
...@@ -809,26 +787,26 @@ func TestOffset(t *testing.T) { ...@@ -809,26 +787,26 @@ func TestOffset(t *testing.T) {
809 qs := dORM.QueryTable("post") 787 qs := dORM.QueryTable("post")
810 num, err := qs.Limit(1).Offset(2).All(&posts) 788 num, err := qs.Limit(1).Offset(2).All(&posts)
811 throwFail(t, err) 789 throwFail(t, err)
812 throwFail(t, AssertIs(num, T_Equal, 1)) 790 throwFail(t, AssertIs(num, 1))
813 791
814 num, err = qs.Offset(2).All(&posts) 792 num, err = qs.Offset(2).All(&posts)
815 throwFail(t, err) 793 throwFail(t, err)
816 throwFail(t, AssertIs(num, T_Equal, 2)) 794 throwFail(t, AssertIs(num, 2))
817 } 795 }
818 796
819 func TestOrderBy(t *testing.T) { 797 func TestOrderBy(t *testing.T) {
820 qs := dORM.QueryTable("user") 798 qs := dORM.QueryTable("user")
821 num, err := qs.OrderBy("-status").Filter("user_name", "nobody").Count() 799 num, err := qs.OrderBy("-status").Filter("user_name", "nobody").Count()
822 throwFail(t, err) 800 throwFail(t, err)
823 throwFail(t, AssertIs(num, T_Equal, 1)) 801 throwFail(t, AssertIs(num, 1))
824 802
825 num, err = qs.OrderBy("status").Filter("user_name", "slene").Count() 803 num, err = qs.OrderBy("status").Filter("user_name", "slene").Count()
826 throwFail(t, err) 804 throwFail(t, err)
827 throwFail(t, AssertIs(num, T_Equal, 1)) 805 throwFail(t, AssertIs(num, 1))
828 806
829 num, err = qs.OrderBy("-profile__age").Filter("user_name", "astaxie").Count() 807 num, err = qs.OrderBy("-profile__age").Filter("user_name", "astaxie").Count()
830 throwFail(t, err) 808 throwFail(t, err)
831 throwFail(t, AssertIs(num, T_Equal, 1)) 809 throwFail(t, AssertIs(num, 1))
832 } 810 }
833 811
834 func TestPrepareInsert(t *testing.T) { 812 func TestPrepareInsert(t *testing.T) {
...@@ -840,21 +818,21 @@ func TestPrepareInsert(t *testing.T) { ...@@ -840,21 +818,21 @@ func TestPrepareInsert(t *testing.T) {
840 user.UserName = "testing1" 818 user.UserName = "testing1"
841 num, err := i.Insert(&user) 819 num, err := i.Insert(&user)
842 throwFail(t, err) 820 throwFail(t, err)
843 throwFail(t, AssertIs(num, T_Large, 0)) 821 throwFail(t, AssertIs(num > 0, true))
844 822
845 user.UserName = "testing2" 823 user.UserName = "testing2"
846 num, err = i.Insert(&user) 824 num, err = i.Insert(&user)
847 throwFail(t, err) 825 throwFail(t, err)
848 throwFail(t, AssertIs(num, T_Large, 0)) 826 throwFail(t, AssertIs(num > 0, true))
849 827
850 num, err = qs.Filter("user_name__in", "testing1", "testing2").Delete() 828 num, err = qs.Filter("user_name__in", "testing1", "testing2").Delete()
851 throwFail(t, err) 829 throwFail(t, err)
852 throwFail(t, AssertIs(num, T_Equal, 2)) 830 throwFail(t, AssertIs(num, 2))
853 831
854 err = i.Close() 832 err = i.Close()
855 throwFail(t, err) 833 throwFail(t, err)
856 err = i.Close() 834 err = i.Close()
857 throwFail(t, AssertIs(err, T_Equal, ErrStmtClosed)) 835 throwFail(t, AssertIs(err, ErrStmtClosed))
858 } 836 }
859 837
860 func TestRawExec(t *testing.T) { 838 func TestRawExec(t *testing.T) {
...@@ -864,12 +842,12 @@ func TestRawExec(t *testing.T) { ...@@ -864,12 +842,12 @@ func TestRawExec(t *testing.T) {
864 res, err := dORM.Raw(query, "testing", "slene").Exec() 842 res, err := dORM.Raw(query, "testing", "slene").Exec()
865 throwFail(t, err) 843 throwFail(t, err)
866 num, err := res.RowsAffected() 844 num, err := res.RowsAffected()
867 throwFail(t, AssertIs(num, T_Equal, 1), err) 845 throwFail(t, AssertIs(num, 1), err)
868 846
869 res, err = dORM.Raw(query, "slene", "testing").Exec() 847 res, err = dORM.Raw(query, "slene", "testing").Exec()
870 throwFail(t, err) 848 throwFail(t, err)
871 num, err = res.RowsAffected() 849 num, err = res.RowsAffected()
872 throwFail(t, AssertIs(num, T_Equal, 1), err) 850 throwFail(t, AssertIs(num, 1), err)
873 } 851 }
874 852
875 func TestRawQueryRow(t *testing.T) { 853 func TestRawQueryRow(t *testing.T) {
...@@ -922,17 +900,17 @@ func TestRawQueryRow(t *testing.T) { ...@@ -922,17 +900,17 @@ func TestRawQueryRow(t *testing.T) {
922 v := reflect.ValueOf(vu).Elem().Interface() 900 v := reflect.ValueOf(vu).Elem().Interface()
923 switch col { 901 switch col {
924 case "id": 902 case "id":
925 throwFail(t, AssertIs(id, T_Equal, 1)) 903 throwFail(t, AssertIs(id, 1))
926 case "date": 904 case "date":
927 v = v.(time.Time).In(DefaultTimeLoc) 905 v = v.(time.Time).In(DefaultTimeLoc)
928 value := data_values[col].(time.Time).In(DefaultTimeLoc) 906 value := data_values[col].(time.Time).In(DefaultTimeLoc)
929 throwFail(t, AssertIs(v, T_Equal, value, test_Date)) 907 throwFail(t, AssertIs(v, value, test_Date))
930 case "datetime": 908 case "datetime":
931 v = v.(time.Time).In(DefaultTimeLoc) 909 v = v.(time.Time).In(DefaultTimeLoc)
932 value := data_values[col].(time.Time).In(DefaultTimeLoc) 910 value := data_values[col].(time.Time).In(DefaultTimeLoc)
933 throwFail(t, AssertIs(v, T_Equal, value, test_DateTime)) 911 throwFail(t, AssertIs(v, value, test_DateTime))
934 default: 912 default:
935 throwFail(t, AssertIs(v, T_Equal, data_values[col])) 913 throwFail(t, AssertIs(v, data_values[col]))
936 } 914 }
937 } 915 }
938 916
...@@ -965,26 +943,26 @@ func TestRawQueryRow(t *testing.T) { ...@@ -965,26 +943,26 @@ func TestRawQueryRow(t *testing.T) {
965 for _, col := range cols { 943 for _, col := range cols {
966 switch col { 944 switch col {
967 case "id": 945 case "id":
968 throwFail(t, AssertIs(tmp.Id, T_Equal, data_values[col])) 946 throwFail(t, AssertIs(tmp.Id, data_values[col]))
969 case "char": 947 case "char":
970 c := tmp.Char 948 c := tmp.Char
971 throwFail(t, AssertIs(*c, T_Equal, data_values[col])) 949 throwFail(t, AssertIs(*c, data_values[col]))
972 case "date": 950 case "date":
973 v := tmp.Date.In(DefaultTimeLoc) 951 v := tmp.Date.In(DefaultTimeLoc)
974 value := data_values[col].(time.Time).In(DefaultTimeLoc) 952 value := data_values[col].(time.Time).In(DefaultTimeLoc)
975 throwFail(t, AssertIs(v, T_Equal, value, test_Date)) 953 throwFail(t, AssertIs(v, value, test_Date))
976 case "datetime": 954 case "datetime":
977 v := tmp.DateTime.In(DefaultTimeLoc) 955 v := tmp.DateTime.In(DefaultTimeLoc)
978 value := data_values[col].(time.Time).In(DefaultTimeLoc) 956 value := data_values[col].(time.Time).In(DefaultTimeLoc)
979 throwFail(t, AssertIs(v, T_Equal, value, test_DateTime)) 957 throwFail(t, AssertIs(v, value, test_DateTime))
980 case "boolean": 958 case "boolean":
981 throwFail(t, AssertIs(Boolean, T_Equal, data_values[col])) 959 throwFail(t, AssertIs(Boolean, data_values[col]))
982 case "text": 960 case "text":
983 throwFail(t, AssertIs(Text, T_Equal, data_values[col])) 961 throwFail(t, AssertIs(Text, data_values[col]))
984 case "int64": 962 case "int64":
985 throwFail(t, AssertIs(Int64, T_Equal, data_values[col])) 963 throwFail(t, AssertIs(Int64, data_values[col]))
986 case "uint": 964 case "uint":
987 throwFail(t, AssertIs(Uint, T_Equal, data_values[col])) 965 throwFail(t, AssertIs(Uint, data_values[col]))
988 } 966 }
989 } 967 }
990 968
...@@ -1000,9 +978,9 @@ func TestRawQueryRow(t *testing.T) { ...@@ -1000,9 +978,9 @@ func TestRawQueryRow(t *testing.T) {
1000 query = fmt.Sprintf("SELECT %s%s%s FROM %suser%s WHERE id = ?", Q, strings.Join(cols, sep), Q, Q, Q) 978 query = fmt.Sprintf("SELECT %s%s%s FROM %suser%s WHERE id = ?", Q, strings.Join(cols, sep), Q, Q, Q)
1001 err = dORM.Raw(query, 4).QueryRow(&uid, &status, &pid) 979 err = dORM.Raw(query, 4).QueryRow(&uid, &status, &pid)
1002 throwFail(t, err) 980 throwFail(t, err)
1003 throwFail(t, AssertIs(uid, T_Equal, 4)) 981 throwFail(t, AssertIs(uid, 4))
1004 throwFail(t, AssertIs(*status, T_Equal, 3)) 982 throwFail(t, AssertIs(*status, 3))
1005 throwFail(t, AssertIs(pid, T_Equal, nil)) 983 throwFail(t, AssertIs(pid, nil))
1006 } 984 }
1007 985
1008 func TestQueryRows(t *testing.T) { 986 func TestQueryRows(t *testing.T) {
...@@ -1020,10 +998,10 @@ func TestQueryRows(t *testing.T) { ...@@ -1020,10 +998,10 @@ func TestQueryRows(t *testing.T) {
1020 query := fmt.Sprintf("SELECT %s%s%s, id FROM %sdata%s", Q, strings.Join(cols, sep), Q, Q, Q) 998 query := fmt.Sprintf("SELECT %s%s%s, id FROM %sdata%s", Q, strings.Join(cols, sep), Q, Q, Q)
1021 num, err := dORM.Raw(query).QueryRows(&datas, &dids) 999 num, err := dORM.Raw(query).QueryRows(&datas, &dids)
1022 throwFailNow(t, err) 1000 throwFailNow(t, err)
1023 throwFailNow(t, AssertIs(num, T_Equal, 1)) 1001 throwFailNow(t, AssertIs(num, 1))
1024 throwFailNow(t, AssertIs(len(datas), T_Equal, 1)) 1002 throwFailNow(t, AssertIs(len(datas), 1))
1025 throwFailNow(t, AssertIs(len(dids), T_Equal, 1)) 1003 throwFailNow(t, AssertIs(len(dids), 1))
1026 throwFailNow(t, AssertIs(dids[0], T_Equal, 1)) 1004 throwFailNow(t, AssertIs(dids[0], 1))
1027 1005
1028 ind := reflect.Indirect(reflect.ValueOf(datas[0])) 1006 ind := reflect.Indirect(reflect.ValueOf(datas[0]))
1029 1007
...@@ -1038,7 +1016,7 @@ func TestQueryRows(t *testing.T) { ...@@ -1038,7 +1016,7 @@ func TestQueryRows(t *testing.T) {
1038 vu = vu.(time.Time).In(DefaultTimeLoc).Format(test_DateTime) 1016 vu = vu.(time.Time).In(DefaultTimeLoc).Format(test_DateTime)
1039 value = value.(time.Time).In(DefaultTimeLoc).Format(test_DateTime) 1017 value = value.(time.Time).In(DefaultTimeLoc).Format(test_DateTime)
1040 } 1018 }
1041 throwFail(t, AssertIs(vu == value, T_Equal, true), value, vu) 1019 throwFail(t, AssertIs(vu == value, true), value, vu)
1042 } 1020 }
1043 1021
1044 type Tmp struct { 1022 type Tmp struct {
...@@ -1066,7 +1044,7 @@ func TestQueryRows(t *testing.T) { ...@@ -1066,7 +1044,7 @@ func TestQueryRows(t *testing.T) {
1066 query = fmt.Sprintf("SELECT %s%s%s FROM %suser%s ORDER BY id", Q, strings.Join(cols, sep), Q, Q, Q) 1044 query = fmt.Sprintf("SELECT %s%s%s FROM %suser%s ORDER BY id", Q, strings.Join(cols, sep), Q, Q, Q)
1067 num, err = dORM.Raw(query).QueryRows(&ids, &userNames, &profileIds1, &profileIds2, &tmps1, &tmps2, &createds, &updateds) 1045 num, err = dORM.Raw(query).QueryRows(&ids, &userNames, &profileIds1, &profileIds2, &tmps1, &tmps2, &createds, &updateds)
1068 throwFailNow(t, err) 1046 throwFailNow(t, err)
1069 throwFailNow(t, AssertIs(num, T_Equal, 3)) 1047 throwFailNow(t, AssertIs(num, 3))
1070 1048
1071 var users []User 1049 var users []User
1072 dORM.QueryTable("user").OrderBy("Id").All(&users) 1050 dORM.QueryTable("user").OrderBy("Id").All(&users)
...@@ -1080,37 +1058,37 @@ func TestQueryRows(t *testing.T) { ...@@ -1080,37 +1058,37 @@ func TestQueryRows(t *testing.T) {
1080 updated := updateds[i] 1058 updated := updateds[i]
1081 1059
1082 user := users[i] 1060 user := users[i]
1083 throwFailNow(t, AssertIs(id, T_Equal, user.Id)) 1061 throwFailNow(t, AssertIs(id, user.Id))
1084 throwFailNow(t, AssertIs(name, T_Equal, user.UserName)) 1062 throwFailNow(t, AssertIs(name, user.UserName))
1085 if user.Profile != nil { 1063 if user.Profile != nil {
1086 throwFailNow(t, AssertIs(pid1, T_Equal, user.Profile.Id)) 1064 throwFailNow(t, AssertIs(pid1, user.Profile.Id))
1087 throwFailNow(t, AssertIs(*pid2, T_Equal, user.Profile.Id)) 1065 throwFailNow(t, AssertIs(*pid2, user.Profile.Id))
1088 } else { 1066 } else {
1089 throwFailNow(t, AssertIs(pid1, T_Equal, 0)) 1067 throwFailNow(t, AssertIs(pid1, 0))
1090 throwFailNow(t, AssertIs(pid2, T_Equal, nil)) 1068 throwFailNow(t, AssertIs(pid2, nil))
1091 } 1069 }
1092 throwFailNow(t, AssertIs(created, T_Equal, user.Created, test_Date)) 1070 throwFailNow(t, AssertIs(created, user.Created, test_Date))
1093 throwFailNow(t, AssertIs(updated, T_Equal, user.Updated, test_DateTime)) 1071 throwFailNow(t, AssertIs(updated, user.Updated, test_DateTime))
1094 1072
1095 tmp := tmps1[i] 1073 tmp := tmps1[i]
1096 tmp1 := *tmp 1074 tmp1 := *tmp
1097 throwFailNow(t, AssertIs(tmp1.Id, T_Equal, user.Id)) 1075 throwFailNow(t, AssertIs(tmp1.Id, user.Id))
1098 throwFailNow(t, AssertIs(tmp1.Name, T_Equal, user.UserName)) 1076 throwFailNow(t, AssertIs(tmp1.Name, user.UserName))
1099 if user.Profile != nil { 1077 if user.Profile != nil {
1100 pid := tmp1.Pid 1078 pid := tmp1.Pid
1101 throwFailNow(t, AssertIs(*pid, T_Equal, user.Profile.Id)) 1079 throwFailNow(t, AssertIs(*pid, user.Profile.Id))
1102 } else { 1080 } else {
1103 throwFailNow(t, AssertIs(tmp1.Pid, T_Equal, nil)) 1081 throwFailNow(t, AssertIs(tmp1.Pid, nil))
1104 } 1082 }
1105 1083
1106 tmp2 := tmps2[i] 1084 tmp2 := tmps2[i]
1107 throwFailNow(t, AssertIs(tmp2.Id, T_Equal, user.Id)) 1085 throwFailNow(t, AssertIs(tmp2.Id, user.Id))
1108 throwFailNow(t, AssertIs(tmp2.Name, T_Equal, user.UserName)) 1086 throwFailNow(t, AssertIs(tmp2.Name, user.UserName))
1109 if user.Profile != nil { 1087 if user.Profile != nil {
1110 pid := tmp2.Pid 1088 pid := tmp2.Pid
1111 throwFailNow(t, AssertIs(*pid, T_Equal, user.Profile.Id)) 1089 throwFailNow(t, AssertIs(*pid, user.Profile.Id))
1112 } else { 1090 } else {
1113 throwFailNow(t, AssertIs(tmp2.Pid, T_Equal, nil)) 1091 throwFailNow(t, AssertIs(tmp2.Pid, nil))
1114 } 1092 }
1115 } 1093 }
1116 1094
...@@ -1123,8 +1101,8 @@ func TestQueryRows(t *testing.T) { ...@@ -1123,8 +1101,8 @@ func TestQueryRows(t *testing.T) {
1123 query = fmt.Sprintf("SELECT NULL, NULL FROM %suser%s LIMIT 1", Q, Q) 1101 query = fmt.Sprintf("SELECT NULL, NULL FROM %suser%s LIMIT 1", Q, Q)
1124 num, err = dORM.Raw(query).QueryRows(&tmp) 1102 num, err = dORM.Raw(query).QueryRows(&tmp)
1125 throwFail(t, err) 1103 throwFail(t, err)
1126 throwFail(t, AssertIs(num, T_Equal, 1)) 1104 throwFail(t, AssertIs(num, 1))
1127 throwFail(t, AssertIs(tmp[0], T_Equal, nil)) 1105 throwFail(t, AssertIs(tmp[0], nil))
1128 } 1106 }
1129 1107
1130 func TestRawValues(t *testing.T) { 1108 func TestRawValues(t *testing.T) {
...@@ -1134,28 +1112,28 @@ func TestRawValues(t *testing.T) { ...@@ -1134,28 +1112,28 @@ func TestRawValues(t *testing.T) {
1134 query := fmt.Sprintf("SELECT %suser_name%s FROM %suser%s WHERE %sstatus%s = ?", Q, Q, Q, Q, Q, Q) 1112 query := fmt.Sprintf("SELECT %suser_name%s FROM %suser%s WHERE %sstatus%s = ?", Q, Q, Q, Q, Q, Q)
1135 num, err := dORM.Raw(query, 1).Values(&maps) 1113 num, err := dORM.Raw(query, 1).Values(&maps)
1136 throwFail(t, err) 1114 throwFail(t, err)
1137 throwFail(t, AssertIs(num, T_Equal, 1)) 1115 throwFail(t, AssertIs(num, 1))
1138 if num == 1 { 1116 if num == 1 {
1139 throwFail(t, AssertIs(maps[0]["user_name"], T_Equal, "slene")) 1117 throwFail(t, AssertIs(maps[0]["user_name"], "slene"))
1140 } 1118 }
1141 1119
1142 var lists []ParamsList 1120 var lists []ParamsList
1143 num, err = dORM.Raw(query, 1).ValuesList(&lists) 1121 num, err = dORM.Raw(query, 1).ValuesList(&lists)
1144 throwFail(t, err) 1122 throwFail(t, err)
1145 throwFail(t, AssertIs(num, T_Equal, 1)) 1123 throwFail(t, AssertIs(num, 1))
1146 if num == 1 { 1124 if num == 1 {
1147 throwFail(t, AssertIs(lists[0][0], T_Equal, "slene")) 1125 throwFail(t, AssertIs(lists[0][0], "slene"))
1148 } 1126 }
1149 1127
1150 query = fmt.Sprintf("SELECT %sprofile_id%s FROM %suser%s ORDER BY %sid%s ASC", Q, Q, Q, Q, Q, Q) 1128 query = fmt.Sprintf("SELECT %sprofile_id%s FROM %suser%s ORDER BY %sid%s ASC", Q, Q, Q, Q, Q, Q)
1151 var list ParamsList 1129 var list ParamsList
1152 num, err = dORM.Raw(query).ValuesFlat(&list) 1130 num, err = dORM.Raw(query).ValuesFlat(&list)
1153 throwFail(t, err) 1131 throwFail(t, err)
1154 throwFail(t, AssertIs(num, T_Equal, 3)) 1132 throwFail(t, AssertIs(num, 3))
1155 if num == 3 { 1133 if num == 3 {
1156 throwFail(t, AssertIs(list[0], T_Equal, "2")) 1134 throwFail(t, AssertIs(list[0], "2"))
1157 throwFail(t, AssertIs(list[1], T_Equal, "3")) 1135 throwFail(t, AssertIs(list[1], "3"))
1158 throwFail(t, AssertIs(list[2], T_Equal, nil)) 1136 throwFail(t, AssertIs(list[2], nil))
1159 } 1137 }
1160 } 1138 }
1161 1139
...@@ -1171,21 +1149,21 @@ func TestRawPrepare(t *testing.T) { ...@@ -1171,21 +1149,21 @@ func TestRawPrepare(t *testing.T) {
1171 1149
1172 tid, err := r.LastInsertId() 1150 tid, err := r.LastInsertId()
1173 throwFail(t, err) 1151 throwFail(t, err)
1174 throwFail(t, AssertIs(tid, T_Large, 0)) 1152 throwFail(t, AssertIs(tid > 0, true))
1175 1153
1176 r, err = pre.Exec("name2") 1154 r, err = pre.Exec("name2")
1177 throwFail(t, err) 1155 throwFail(t, err)
1178 1156
1179 id, err := r.LastInsertId() 1157 id, err := r.LastInsertId()
1180 throwFail(t, err) 1158 throwFail(t, err)
1181 throwFail(t, AssertIs(id, T_Equal, tid+1)) 1159 throwFail(t, AssertIs(id, tid+1))
1182 1160
1183 r, err = pre.Exec("name3") 1161 r, err = pre.Exec("name3")
1184 throwFail(t, err) 1162 throwFail(t, err)
1185 1163
1186 id, err = r.LastInsertId() 1164 id, err = r.LastInsertId()
1187 throwFail(t, err) 1165 throwFail(t, err)
1188 throwFail(t, AssertIs(id, T_Equal, tid+2)) 1166 throwFail(t, AssertIs(id, tid+2))
1189 1167
1190 err = pre.Close() 1168 err = pre.Close()
1191 throwFail(t, err) 1169 throwFail(t, err)
...@@ -1195,7 +1173,7 @@ func TestRawPrepare(t *testing.T) { ...@@ -1195,7 +1173,7 @@ func TestRawPrepare(t *testing.T) {
1195 1173
1196 num, err := res.RowsAffected() 1174 num, err := res.RowsAffected()
1197 throwFail(t, err) 1175 throwFail(t, err)
1198 throwFail(t, AssertIs(num, T_Equal, 3)) 1176 throwFail(t, AssertIs(num, 3))
1199 } 1177 }
1200 1178
1201 case IsPostgres: 1179 case IsPostgres:
...@@ -1221,7 +1199,7 @@ func TestRawPrepare(t *testing.T) { ...@@ -1221,7 +1199,7 @@ func TestRawPrepare(t *testing.T) {
1221 if err == nil { 1199 if err == nil {
1222 num, err := res.RowsAffected() 1200 num, err := res.RowsAffected()
1223 throwFail(t, err) 1201 throwFail(t, err)
1224 throwFail(t, AssertIs(num, T_Equal, 3)) 1202 throwFail(t, AssertIs(num, 3))
1225 } 1203 }
1226 } 1204 }
1227 } 1205 }
...@@ -1233,26 +1211,26 @@ func TestUpdate(t *testing.T) { ...@@ -1233,26 +1211,26 @@ func TestUpdate(t *testing.T) {
1233 "is_staff": true, 1211 "is_staff": true,
1234 }) 1212 })
1235 throwFail(t, err) 1213 throwFail(t, err)
1236 throwFail(t, AssertIs(num, T_Equal, 1)) 1214 throwFail(t, AssertIs(num, 1))
1237 1215
1238 // with join 1216 // with join
1239 num, err = qs.Filter("user_name", "slene").Filter("profile__age", 28).Filter("is_staff", true).Update(Params{ 1217 num, err = qs.Filter("user_name", "slene").Filter("profile__age", 28).Filter("is_staff", true).Update(Params{
1240 "is_staff": false, 1218 "is_staff": false,
1241 }) 1219 })
1242 throwFail(t, err) 1220 throwFail(t, err)
1243 throwFail(t, AssertIs(num, T_Equal, 1)) 1221 throwFail(t, AssertIs(num, 1))
1244 } 1222 }
1245 1223
1246 func TestDelete(t *testing.T) { 1224 func TestDelete(t *testing.T) {
1247 qs := dORM.QueryTable("user_profile") 1225 qs := dORM.QueryTable("user_profile")
1248 num, err := qs.Filter("user__user_name", "slene").Delete() 1226 num, err := qs.Filter("user__user_name", "slene").Delete()
1249 throwFail(t, err) 1227 throwFail(t, err)
1250 throwFail(t, AssertIs(num, T_Equal, 1)) 1228 throwFail(t, AssertIs(num, 1))
1251 1229
1252 qs = dORM.QueryTable("user") 1230 qs = dORM.QueryTable("user")
1253 num, err = qs.Filter("user_name", "slene").Filter("profile__isnull", true).Count() 1231 num, err = qs.Filter("user_name", "slene").Filter("profile__isnull", true).Count()
1254 throwFail(t, err) 1232 throwFail(t, err)
1255 throwFail(t, AssertIs(num, T_Equal, 1)) 1233 throwFail(t, AssertIs(num, 1))
1256 } 1234 }
1257 1235
1258 func TestTransaction(t *testing.T) { 1236 func TestTransaction(t *testing.T) {
...@@ -1268,11 +1246,11 @@ func TestTransaction(t *testing.T) { ...@@ -1268,11 +1246,11 @@ func TestTransaction(t *testing.T) {
1268 tag.Name = names[0] 1246 tag.Name = names[0]
1269 id, err := o.Insert(&tag) 1247 id, err := o.Insert(&tag)
1270 throwFail(t, err) 1248 throwFail(t, err)
1271 throwFail(t, AssertIs(id, T_Large, 0)) 1249 throwFail(t, AssertIs(id > 0, true))
1272 1250
1273 num, err := o.QueryTable("tag").Filter("name", "golang").Update(Params{"name": names[1]}) 1251 num, err := o.QueryTable("tag").Filter("name", "golang").Update(Params{"name": names[1]})
1274 throwFail(t, err) 1252 throwFail(t, err)
1275 throwFail(t, AssertIs(num, T_Equal, 1)) 1253 throwFail(t, AssertIs(num, 1))
1276 1254
1277 switch { 1255 switch {
1278 case IsMysql || IsSqlite: 1256 case IsMysql || IsSqlite:
...@@ -1281,7 +1259,7 @@ func TestTransaction(t *testing.T) { ...@@ -1281,7 +1259,7 @@ func TestTransaction(t *testing.T) {
1281 if err == nil { 1259 if err == nil {
1282 id, err = res.LastInsertId() 1260 id, err = res.LastInsertId()
1283 throwFail(t, err) 1261 throwFail(t, err)
1284 throwFail(t, AssertIs(id, T_Large, 0)) 1262 throwFail(t, AssertIs(id > 0, true))
1285 } 1263 }
1286 } 1264 }
1287 1265
...@@ -1290,7 +1268,7 @@ func TestTransaction(t *testing.T) { ...@@ -1290,7 +1268,7 @@ func TestTransaction(t *testing.T) {
1290 1268
1291 num, err = o.QueryTable("tag").Filter("name__in", names).Count() 1269 num, err = o.QueryTable("tag").Filter("name__in", names).Count()
1292 throwFail(t, err) 1270 throwFail(t, err)
1293 throwFail(t, AssertIs(num, T_Equal, 0)) 1271 throwFail(t, AssertIs(num, 0))
1294 1272
1295 err = o.Begin() 1273 err = o.Begin()
1296 throwFail(t, err) 1274 throwFail(t, err)
...@@ -1298,13 +1276,13 @@ func TestTransaction(t *testing.T) { ...@@ -1298,13 +1276,13 @@ func TestTransaction(t *testing.T) {
1298 tag.Name = "commit" 1276 tag.Name = "commit"
1299 id, err = o.Insert(&tag) 1277 id, err = o.Insert(&tag)
1300 throwFail(t, err) 1278 throwFail(t, err)
1301 throwFail(t, AssertIs(id, T_Large, 0)) 1279 throwFail(t, AssertIs(id > 0, true))
1302 1280
1303 o.Commit() 1281 o.Commit()
1304 throwFail(t, err) 1282 throwFail(t, err)
1305 1283
1306 num, err = o.QueryTable("tag").Filter("name", "commit").Delete() 1284 num, err = o.QueryTable("tag").Filter("name", "commit").Delete()
1307 throwFail(t, err) 1285 throwFail(t, err)
1308 throwFail(t, AssertIs(num, T_Equal, 1)) 1286 throwFail(t, AssertIs(num, 1))
1309 1287
1310 } 1288 }
......
...@@ -20,9 +20,9 @@ type Fielder interface { ...@@ -20,9 +20,9 @@ type Fielder interface {
20 } 20 }
21 21
22 type Ormer interface { 22 type Ormer interface {
23 Read(interface{}) error 23 Read(interface{}, ...string) error
24 Insert(interface{}) (int64, error) 24 Insert(interface{}) (int64, error)
25 Update(interface{}) (int64, error) 25 Update(interface{}, ...string) (int64, error)
26 Delete(interface{}) (int64, error) 26 Delete(interface{}) (int64, error)
27 M2mAdd(interface{}, string, ...interface{}) (int64, error) 27 M2mAdd(interface{}, string, ...interface{}) (int64, error)
28 M2mDel(interface{}, string, ...interface{}) (int64, error) 28 M2mDel(interface{}, string, ...interface{}) (int64, error)
...@@ -53,8 +53,8 @@ type QuerySeter interface { ...@@ -53,8 +53,8 @@ type QuerySeter interface {
53 Update(Params) (int64, error) 53 Update(Params) (int64, error)
54 Delete() (int64, error) 54 Delete() (int64, error)
55 PrepareInsert() (Inserter, error) 55 PrepareInsert() (Inserter, error)
56 All(interface{}) (int64, error) 56 All(interface{}, ...string) (int64, error)
57 One(interface{}) error 57 One(interface{}, ...string) error
58 Values(*[]Params, ...string) (int64, error) 58 Values(*[]Params, ...string) (int64, error)
59 ValuesList(*[]ParamsList, ...string) (int64, error) 59 ValuesList(*[]ParamsList, ...string) (int64, error)
60 ValuesFlat(*ParamsList, string) (int64, error) 60 ValuesFlat(*ParamsList, string) (int64, error)
...@@ -111,12 +111,12 @@ type txEnder interface { ...@@ -111,12 +111,12 @@ type txEnder interface {
111 } 111 }
112 112
113 type dbBaser interface { 113 type dbBaser interface {
114 Read(dbQuerier, *modelInfo, reflect.Value, *time.Location) error 114 Read(dbQuerier, *modelInfo, reflect.Value, *time.Location, []string) error
115 Insert(dbQuerier, *modelInfo, reflect.Value, *time.Location) (int64, error) 115 Insert(dbQuerier, *modelInfo, reflect.Value, *time.Location) (int64, error)
116 InsertStmt(stmtQuerier, *modelInfo, reflect.Value, *time.Location) (int64, error) 116 InsertStmt(stmtQuerier, *modelInfo, reflect.Value, *time.Location) (int64, error)
117 Update(dbQuerier, *modelInfo, reflect.Value, *time.Location) (int64, error) 117 Update(dbQuerier, *modelInfo, reflect.Value, *time.Location, []string) (int64, error)
118 Delete(dbQuerier, *modelInfo, reflect.Value, *time.Location) (int64, error) 118 Delete(dbQuerier, *modelInfo, reflect.Value, *time.Location) (int64, error)
119 ReadBatch(dbQuerier, *querySet, *modelInfo, *Condition, interface{}, *time.Location) (int64, error) 119 ReadBatch(dbQuerier, *querySet, *modelInfo, *Condition, interface{}, *time.Location, []string) (int64, error)
120 SupportUpdateJoin() bool 120 SupportUpdateJoin() bool
121 UpdateBatch(dbQuerier, *querySet, *modelInfo, *Condition, Params, *time.Location) (int64, error) 121 UpdateBatch(dbQuerier, *querySet, *modelInfo, *Condition, Params, *time.Location) (int64, error)
122 DeleteBatch(dbQuerier, *querySet, *modelInfo, *Condition, *time.Location) (int64, error) 122 DeleteBatch(dbQuerier, *querySet, *modelInfo, *Condition, *time.Location) (int64, error)
......
...@@ -38,6 +38,11 @@ func (f StrTo) Float64() (float64, error) { ...@@ -38,6 +38,11 @@ func (f StrTo) Float64() (float64, error) {
38 return strconv.ParseFloat(f.String(), 64) 38 return strconv.ParseFloat(f.String(), 64)
39 } 39 }
40 40
41 func (f StrTo) Int() (int, error) {
42 v, err := strconv.ParseInt(f.String(), 10, 32)
43 return int(v), err
44 }
45
41 func (f StrTo) Int8() (int8, error) { 46 func (f StrTo) Int8() (int8, error) {
42 v, err := strconv.ParseInt(f.String(), 10, 8) 47 v, err := strconv.ParseInt(f.String(), 10, 8)
43 return int8(v), err 48 return int8(v), err
...@@ -58,6 +63,11 @@ func (f StrTo) Int64() (int64, error) { ...@@ -58,6 +63,11 @@ func (f StrTo) Int64() (int64, error) {
58 return int64(v), err 63 return int64(v), err
59 } 64 }
60 65
66 func (f StrTo) Uint() (uint, error) {
67 v, err := strconv.ParseUint(f.String(), 10, 32)
68 return uint(v), err
69 }
70
61 func (f StrTo) Uint8() (uint8, error) { 71 func (f StrTo) Uint8() (uint8, error) {
62 v, err := strconv.ParseUint(f.String(), 10, 8) 72 v, err := strconv.ParseUint(f.String(), 10, 8)
63 return uint8(v), err 73 return uint8(v), err
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!