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  }