github.com/johnnyeven/libtools@v0.0.0-20191126065708-61829c1adf46/sqlx/gen/test/user__generated.go (about) 1 package test 2 3 import ( 4 fmt "fmt" 5 time "time" 6 7 golib_tools_courier_enumeration "github.com/johnnyeven/libtools/courier/enumeration" 8 golib_tools_sqlx "github.com/johnnyeven/libtools/sqlx" 9 golib_tools_sqlx_builder "github.com/johnnyeven/libtools/sqlx/builder" 10 golib_tools_timelib "github.com/johnnyeven/libtools/timelib" 11 ) 12 13 var UserTable *golib_tools_sqlx_builder.Table 14 15 func init() { 16 UserTable = DBTest.Register(&User{}) 17 } 18 19 func (user *User) D() *golib_tools_sqlx.Database { 20 return DBTest 21 } 22 23 func (user *User) T() *golib_tools_sqlx_builder.Table { 24 return UserTable 25 } 26 27 func (user *User) TableName() string { 28 return "t_user" 29 } 30 31 type UserFields struct { 32 Name *golib_tools_sqlx_builder.Column 33 Username *golib_tools_sqlx_builder.Column 34 Nickname *golib_tools_sqlx_builder.Column 35 Gender *golib_tools_sqlx_builder.Column 36 Birthday *golib_tools_sqlx_builder.Column 37 Boolean *golib_tools_sqlx_builder.Column 38 CreateTime *golib_tools_sqlx_builder.Column 39 UpdateTime *golib_tools_sqlx_builder.Column 40 ID *golib_tools_sqlx_builder.Column 41 Enabled *golib_tools_sqlx_builder.Column 42 } 43 44 var UserField = struct { 45 Name string 46 Username string 47 Nickname string 48 Gender string 49 Birthday string 50 Boolean string 51 CreateTime string 52 UpdateTime string 53 ID string 54 Enabled string 55 }{ 56 Name: "Name", 57 Username: "Username", 58 Nickname: "Nickname", 59 Gender: "Gender", 60 Birthday: "Birthday", 61 Boolean: "Boolean", 62 CreateTime: "CreateTime", 63 UpdateTime: "UpdateTime", 64 ID: "ID", 65 Enabled: "Enabled", 66 } 67 68 func (user *User) Fields() *UserFields { 69 table := user.T() 70 71 return &UserFields{ 72 Name: table.F(UserField.Name), 73 Username: table.F(UserField.Username), 74 Nickname: table.F(UserField.Nickname), 75 Gender: table.F(UserField.Gender), 76 Birthday: table.F(UserField.Birthday), 77 Boolean: table.F(UserField.Boolean), 78 CreateTime: table.F(UserField.CreateTime), 79 UpdateTime: table.F(UserField.UpdateTime), 80 ID: table.F(UserField.ID), 81 Enabled: table.F(UserField.Enabled), 82 } 83 } 84 85 func (user *User) IndexFieldNames() []string { 86 return []string{"ID", "Name", "Nickname", "Username"} 87 } 88 89 func (user *User) ConditionByStruct() *golib_tools_sqlx_builder.Condition { 90 table := user.T() 91 92 fieldValues := golib_tools_sqlx.FieldValuesFromStructByNonZero(user) 93 94 conditions := []*golib_tools_sqlx_builder.Condition{} 95 96 for _, fieldName := range user.IndexFieldNames() { 97 if v, exists := fieldValues[fieldName]; exists { 98 conditions = append(conditions, table.F(fieldName).Eq(v)) 99 delete(fieldValues, fieldName) 100 } 101 } 102 103 if len(conditions) == 0 { 104 panic(fmt.Errorf("at least one of field for indexes has value")) 105 } 106 107 for fieldName, v := range fieldValues { 108 conditions = append(conditions, table.F(fieldName).Eq(v)) 109 } 110 111 condition := golib_tools_sqlx_builder.And(conditions...) 112 113 condition = golib_tools_sqlx_builder.And(condition, table.F("Enabled").Eq(golib_tools_courier_enumeration.BOOL__TRUE)) 114 115 return condition 116 } 117 118 func (user *User) PrimaryKey() golib_tools_sqlx.FieldNames { 119 return golib_tools_sqlx.FieldNames{"ID"} 120 } 121 func (user *User) Indexes() golib_tools_sqlx.Indexes { 122 return golib_tools_sqlx.Indexes{ 123 "I_nickname": golib_tools_sqlx.FieldNames{"Nickname"}, 124 "I_username": golib_tools_sqlx.FieldNames{"Username"}, 125 } 126 } 127 func (user *User) UniqueIndexes() golib_tools_sqlx.Indexes { 128 return golib_tools_sqlx.Indexes{"I_name": golib_tools_sqlx.FieldNames{"Name", "Enabled"}} 129 } 130 131 func (user *User) Create(db *golib_tools_sqlx.DB) error { 132 user.Enabled = golib_tools_courier_enumeration.BOOL__TRUE 133 134 if user.CreateTime.IsZero() { 135 user.CreateTime = golib_tools_timelib.MySQLTimestamp(time.Now()) 136 } 137 user.UpdateTime = user.CreateTime 138 139 stmt := user.D(). 140 Insert(user). 141 Comment("User.Create") 142 143 dbRet := db.Do(stmt) 144 err := dbRet.Err() 145 146 if err == nil { 147 lastInsertID, _ := dbRet.LastInsertId() 148 user.ID = uint64(lastInsertID) 149 } 150 151 return err 152 } 153 154 func (user *User) DeleteByStruct(db *golib_tools_sqlx.DB) (err error) { 155 table := user.T() 156 157 stmt := table.Delete(). 158 Comment("User.DeleteByStruct"). 159 Where(user.ConditionByStruct()) 160 161 err = db.Do(stmt).Err() 162 return 163 } 164 165 func (user *User) CreateOnDuplicateWithUpdateFields(db *golib_tools_sqlx.DB, updateFields []string) error { 166 if len(updateFields) == 0 { 167 panic(fmt.Errorf("must have update fields")) 168 } 169 170 user.Enabled = golib_tools_courier_enumeration.BOOL__TRUE 171 172 if user.CreateTime.IsZero() { 173 user.CreateTime = golib_tools_timelib.MySQLTimestamp(time.Now()) 174 } 175 user.UpdateTime = user.CreateTime 176 177 table := user.T() 178 179 fieldValues := golib_tools_sqlx.FieldValuesFromStructByNonZero(user, updateFields...) 180 181 delete(fieldValues, "ID") 182 183 cols, vals := table.ColumnsAndValuesByFieldValues(fieldValues) 184 185 m := make(map[string]bool, len(updateFields)) 186 for _, field := range updateFields { 187 m[field] = true 188 } 189 190 // fields of unique index can not update 191 delete(m, "CreateTime") 192 193 for _, fieldNames := range user.UniqueIndexes() { 194 for _, field := range fieldNames { 195 delete(m, field) 196 } 197 } 198 199 if len(m) == 0 { 200 panic(fmt.Errorf("no fields for updates")) 201 } 202 203 for field := range fieldValues { 204 if !m[field] { 205 delete(fieldValues, field) 206 } 207 } 208 209 stmt := table. 210 Insert().Columns(cols).Values(vals...). 211 OnDuplicateKeyUpdate(table.AssignsByFieldValues(fieldValues)...). 212 Comment("User.CreateOnDuplicateWithUpdateFields") 213 214 return db.Do(stmt).Err() 215 } 216 217 func (user *User) FetchByID(db *golib_tools_sqlx.DB) error { 218 user.Enabled = golib_tools_courier_enumeration.BOOL__TRUE 219 220 table := user.T() 221 stmt := table.Select(). 222 Comment("User.FetchByID"). 223 Where(golib_tools_sqlx_builder.And( 224 table.F("ID").Eq(user.ID), 225 table.F("Enabled").Eq(user.Enabled), 226 )) 227 228 return db.Do(stmt).Scan(user).Err() 229 } 230 231 func (user *User) FetchByIDForUpdate(db *golib_tools_sqlx.DB) error { 232 user.Enabled = golib_tools_courier_enumeration.BOOL__TRUE 233 234 table := user.T() 235 stmt := table.Select(). 236 Comment("User.FetchByIDForUpdate"). 237 Where(golib_tools_sqlx_builder.And( 238 table.F("ID").Eq(user.ID), 239 table.F("Enabled").Eq(user.Enabled), 240 )). 241 ForUpdate() 242 243 return db.Do(stmt).Scan(user).Err() 244 } 245 246 func (user *User) DeleteByID(db *golib_tools_sqlx.DB) error { 247 user.Enabled = golib_tools_courier_enumeration.BOOL__TRUE 248 249 table := user.T() 250 stmt := table.Delete(). 251 Comment("User.DeleteByID"). 252 Where(golib_tools_sqlx_builder.And( 253 table.F("ID").Eq(user.ID), 254 table.F("Enabled").Eq(user.Enabled), 255 )) 256 257 return db.Do(stmt).Scan(user).Err() 258 } 259 260 func (user *User) UpdateByIDWithMap(db *golib_tools_sqlx.DB, fieldValues golib_tools_sqlx_builder.FieldValues) error { 261 262 if _, ok := fieldValues["UpdateTime"]; !ok { 263 fieldValues["UpdateTime"] = golib_tools_timelib.MySQLTimestamp(time.Now()) 264 } 265 266 user.Enabled = golib_tools_courier_enumeration.BOOL__TRUE 267 268 table := user.T() 269 270 delete(fieldValues, "ID") 271 272 stmt := table.Update(). 273 Comment("User.UpdateByIDWithMap"). 274 Set(table.AssignsByFieldValues(fieldValues)...). 275 Where(golib_tools_sqlx_builder.And( 276 table.F("ID").Eq(user.ID), 277 table.F("Enabled").Eq(user.Enabled), 278 )) 279 280 dbRet := db.Do(stmt).Scan(user) 281 err := dbRet.Err() 282 if err != nil { 283 return err 284 } 285 286 rowsAffected, _ := dbRet.RowsAffected() 287 if rowsAffected == 0 { 288 return user.FetchByID(db) 289 } 290 return nil 291 } 292 293 func (user *User) UpdateByIDWithStruct(db *golib_tools_sqlx.DB, zeroFields ...string) error { 294 fieldValues := golib_tools_sqlx.FieldValuesFromStructByNonZero(user, zeroFields...) 295 return user.UpdateByIDWithMap(db, fieldValues) 296 } 297 298 func (user *User) SoftDeleteByID(db *golib_tools_sqlx.DB) error { 299 user.Enabled = golib_tools_courier_enumeration.BOOL__TRUE 300 301 table := user.T() 302 303 fieldValues := golib_tools_sqlx_builder.FieldValues{} 304 fieldValues["Enabled"] = golib_tools_courier_enumeration.BOOL__FALSE 305 306 if _, ok := fieldValues["UpdateTime"]; !ok { 307 fieldValues["UpdateTime"] = golib_tools_timelib.MySQLTimestamp(time.Now()) 308 } 309 310 stmt := table.Update(). 311 Comment("User.SoftDeleteByID"). 312 Set(table.AssignsByFieldValues(fieldValues)...). 313 Where(golib_tools_sqlx_builder.And( 314 table.F("ID").Eq(user.ID), 315 table.F("Enabled").Eq(user.Enabled), 316 )) 317 318 dbRet := db.Do(stmt).Scan(user) 319 err := dbRet.Err() 320 if err != nil { 321 dbErr := golib_tools_sqlx.DBErr(err) 322 if dbErr.IsConflict() { 323 return user.DeleteByID(db) 324 } 325 return err 326 } 327 return nil 328 } 329 330 func (user *User) FetchByName(db *golib_tools_sqlx.DB) error { 331 user.Enabled = golib_tools_courier_enumeration.BOOL__TRUE 332 333 table := user.T() 334 stmt := table.Select(). 335 Comment("User.FetchByName"). 336 Where(golib_tools_sqlx_builder.And( 337 table.F("Name").Eq(user.Name), 338 table.F("Enabled").Eq(user.Enabled), 339 )) 340 341 return db.Do(stmt).Scan(user).Err() 342 } 343 344 func (user *User) FetchByNameForUpdate(db *golib_tools_sqlx.DB) error { 345 user.Enabled = golib_tools_courier_enumeration.BOOL__TRUE 346 347 table := user.T() 348 stmt := table.Select(). 349 Comment("User.FetchByNameForUpdate"). 350 Where(golib_tools_sqlx_builder.And( 351 table.F("Name").Eq(user.Name), 352 table.F("Enabled").Eq(user.Enabled), 353 )). 354 ForUpdate() 355 356 return db.Do(stmt).Scan(user).Err() 357 } 358 359 func (user *User) DeleteByName(db *golib_tools_sqlx.DB) error { 360 user.Enabled = golib_tools_courier_enumeration.BOOL__TRUE 361 362 table := user.T() 363 stmt := table.Delete(). 364 Comment("User.DeleteByName"). 365 Where(golib_tools_sqlx_builder.And( 366 table.F("Name").Eq(user.Name), 367 table.F("Enabled").Eq(user.Enabled), 368 )) 369 370 return db.Do(stmt).Scan(user).Err() 371 } 372 373 func (user *User) UpdateByNameWithMap(db *golib_tools_sqlx.DB, fieldValues golib_tools_sqlx_builder.FieldValues) error { 374 375 if _, ok := fieldValues["UpdateTime"]; !ok { 376 fieldValues["UpdateTime"] = golib_tools_timelib.MySQLTimestamp(time.Now()) 377 } 378 379 user.Enabled = golib_tools_courier_enumeration.BOOL__TRUE 380 381 table := user.T() 382 383 delete(fieldValues, "ID") 384 385 stmt := table.Update(). 386 Comment("User.UpdateByNameWithMap"). 387 Set(table.AssignsByFieldValues(fieldValues)...). 388 Where(golib_tools_sqlx_builder.And( 389 table.F("Name").Eq(user.Name), 390 table.F("Enabled").Eq(user.Enabled), 391 )) 392 393 dbRet := db.Do(stmt).Scan(user) 394 err := dbRet.Err() 395 if err != nil { 396 return err 397 } 398 399 rowsAffected, _ := dbRet.RowsAffected() 400 if rowsAffected == 0 { 401 return user.FetchByName(db) 402 } 403 return nil 404 } 405 406 func (user *User) UpdateByNameWithStruct(db *golib_tools_sqlx.DB, zeroFields ...string) error { 407 fieldValues := golib_tools_sqlx.FieldValuesFromStructByNonZero(user, zeroFields...) 408 return user.UpdateByNameWithMap(db, fieldValues) 409 } 410 411 func (user *User) SoftDeleteByName(db *golib_tools_sqlx.DB) error { 412 user.Enabled = golib_tools_courier_enumeration.BOOL__TRUE 413 414 table := user.T() 415 416 fieldValues := golib_tools_sqlx_builder.FieldValues{} 417 fieldValues["Enabled"] = golib_tools_courier_enumeration.BOOL__FALSE 418 419 if _, ok := fieldValues["UpdateTime"]; !ok { 420 fieldValues["UpdateTime"] = golib_tools_timelib.MySQLTimestamp(time.Now()) 421 } 422 423 stmt := table.Update(). 424 Comment("User.SoftDeleteByName"). 425 Set(table.AssignsByFieldValues(fieldValues)...). 426 Where(golib_tools_sqlx_builder.And( 427 table.F("Name").Eq(user.Name), 428 table.F("Enabled").Eq(user.Enabled), 429 )) 430 431 dbRet := db.Do(stmt).Scan(user) 432 err := dbRet.Err() 433 if err != nil { 434 dbErr := golib_tools_sqlx.DBErr(err) 435 if dbErr.IsConflict() { 436 return user.DeleteByName(db) 437 } 438 return err 439 } 440 return nil 441 } 442 443 type UserList []User 444 445 // deprecated 446 func (userList *UserList) FetchList(db *golib_tools_sqlx.DB, size int32, offset int32, conditions ...*golib_tools_sqlx_builder.Condition) (count int32, err error) { 447 *userList, count, err = (&User{}).FetchList(db, size, offset, conditions...) 448 return 449 } 450 451 func (user *User) FetchList(db *golib_tools_sqlx.DB, size int32, offset int32, conditions ...*golib_tools_sqlx_builder.Condition) (userList UserList, count int32, err error) { 452 userList = UserList{} 453 454 table := user.T() 455 456 condition := golib_tools_sqlx_builder.And(conditions...) 457 458 condition = golib_tools_sqlx_builder.And(condition, table.F("Enabled").Eq(golib_tools_courier_enumeration.BOOL__TRUE)) 459 460 stmt := table.Select(). 461 Comment("User.FetchList"). 462 Where(condition) 463 464 errForCount := db.Do(stmt.For(golib_tools_sqlx_builder.Count(golib_tools_sqlx_builder.Star()))).Scan(&count).Err() 465 if errForCount != nil { 466 err = errForCount 467 return 468 } 469 470 stmt = stmt.Limit(size).Offset(offset) 471 472 stmt = stmt.OrderDescBy(table.F("CreateTime")) 473 474 err = db.Do(stmt).Scan(&userList).Err() 475 476 return 477 } 478 479 func (user *User) List(db *golib_tools_sqlx.DB, condition *golib_tools_sqlx_builder.Condition) (userList UserList, err error) { 480 userList = UserList{} 481 482 table := user.T() 483 484 condition = golib_tools_sqlx_builder.And(condition, table.F("Enabled").Eq(golib_tools_courier_enumeration.BOOL__TRUE)) 485 486 stmt := table.Select(). 487 Comment("User.List"). 488 Where(condition) 489 490 err = db.Do(stmt).Scan(&userList).Err() 491 492 return 493 } 494 495 func (user *User) ListByStruct(db *golib_tools_sqlx.DB) (userList UserList, err error) { 496 userList = UserList{} 497 498 table := user.T() 499 500 condition := user.ConditionByStruct() 501 502 condition = golib_tools_sqlx_builder.And(condition, table.F("Enabled").Eq(golib_tools_courier_enumeration.BOOL__TRUE)) 503 504 stmt := table.Select(). 505 Comment("User.ListByStruct"). 506 Where(condition) 507 508 err = db.Do(stmt).Scan(&userList).Err() 509 510 return 511 } 512 513 // deprecated 514 func (userList *UserList) BatchFetchByIDList(db *golib_tools_sqlx.DB, idList []uint64) (err error) { 515 *userList, err = (&User{}).BatchFetchByIDList(db, idList) 516 return 517 } 518 519 func (user *User) BatchFetchByIDList(db *golib_tools_sqlx.DB, idList []uint64) (userList UserList, err error) { 520 if len(idList) == 0 { 521 return UserList{}, nil 522 } 523 524 table := user.T() 525 526 condition := table.F("ID").In(idList) 527 528 condition = condition.And(table.F("Enabled").Eq(golib_tools_courier_enumeration.BOOL__TRUE)) 529 530 stmt := table.Select(). 531 Comment("User.BatchFetchByIDList"). 532 Where(condition) 533 534 err = db.Do(stmt).Scan(&userList).Err() 535 536 return 537 } 538 539 // deprecated 540 func (userList *UserList) BatchFetchByNameList(db *golib_tools_sqlx.DB, nameList []string) (err error) { 541 *userList, err = (&User{}).BatchFetchByNameList(db, nameList) 542 return 543 } 544 545 func (user *User) BatchFetchByNameList(db *golib_tools_sqlx.DB, nameList []string) (userList UserList, err error) { 546 if len(nameList) == 0 { 547 return UserList{}, nil 548 } 549 550 table := user.T() 551 552 condition := table.F("Name").In(nameList) 553 554 condition = condition.And(table.F("Enabled").Eq(golib_tools_courier_enumeration.BOOL__TRUE)) 555 556 stmt := table.Select(). 557 Comment("User.BatchFetchByNameList"). 558 Where(condition) 559 560 err = db.Do(stmt).Scan(&userList).Err() 561 562 return 563 } 564 565 // deprecated 566 func (userList *UserList) BatchFetchByNicknameList(db *golib_tools_sqlx.DB, nicknameList []string) (err error) { 567 *userList, err = (&User{}).BatchFetchByNicknameList(db, nicknameList) 568 return 569 } 570 571 func (user *User) BatchFetchByNicknameList(db *golib_tools_sqlx.DB, nicknameList []string) (userList UserList, err error) { 572 if len(nicknameList) == 0 { 573 return UserList{}, nil 574 } 575 576 table := user.T() 577 578 condition := table.F("Nickname").In(nicknameList) 579 580 condition = condition.And(table.F("Enabled").Eq(golib_tools_courier_enumeration.BOOL__TRUE)) 581 582 stmt := table.Select(). 583 Comment("User.BatchFetchByNicknameList"). 584 Where(condition) 585 586 err = db.Do(stmt).Scan(&userList).Err() 587 588 return 589 } 590 591 // deprecated 592 func (userList *UserList) BatchFetchByUsernameList(db *golib_tools_sqlx.DB, usernameList []string) (err error) { 593 *userList, err = (&User{}).BatchFetchByUsernameList(db, usernameList) 594 return 595 } 596 597 func (user *User) BatchFetchByUsernameList(db *golib_tools_sqlx.DB, usernameList []string) (userList UserList, err error) { 598 if len(usernameList) == 0 { 599 return UserList{}, nil 600 } 601 602 table := user.T() 603 604 condition := table.F("Username").In(usernameList) 605 606 condition = condition.And(table.F("Enabled").Eq(golib_tools_courier_enumeration.BOOL__TRUE)) 607 608 stmt := table.Select(). 609 Comment("User.BatchFetchByUsernameList"). 610 Where(condition) 611 612 err = db.Do(stmt).Scan(&userList).Err() 613 614 return 615 }