orm.Read support specify condition fields, orm.Update and QuerySeter All/One support omit fields.
Showing
6 changed files
with
345 additions
and
294 deletions
| ... | @@ -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 | ... | ... |
-
Please register or sign in to post a comment