Skip to content

Commit 0b90f9e

Browse files
committed
table use ptr
1 parent 54133e7 commit 0b90f9e

28 files changed

+987
-802
lines changed

README.md

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
)
99

1010

11-
1211
//connect mysql db
1312
var db, _ = orm.OpenMysql("user:password@tcp(127.0.0.1:3306)/mydb?parseTime=true&charset=utf8mb4&loc=Asia%2FShanghai")
1413

@@ -20,17 +19,17 @@ type User struct {
2019
Name string `json:"name"`
2120
}
2221

23-
func (User) Connections() []*sql.DB {
22+
func (*User) Connections() []*sql.DB {
2423
return []*sql.DB{db}
2524
}
26-
func (User) DatabaseName() string {
25+
func (*User) DatabaseName() string {
2726
return "mydb"
2827
}
29-
func (User) TableName() string {
28+
func (*User) TableName() string {
3029
return "user"
3130
}
32-
func (u *User) Query() *orm.Query[User] {
33-
return orm.NewQuery(u)
31+
func (u *User) Query() *orm.Query[*User] {
32+
return orm.NewQuery(UserTable).WherePrimaryIfNotZero(u.Id)
3433
}
3534

3635
func main() {
@@ -40,27 +39,33 @@ func main() {
4039
//create struct from db table
4140
UserTable.Query().CreateStruct()
4241

43-
//select * from user where id in (1,2,3)
44-
users, query = UserTable.Query().Gets(1, 2, 3)
42+
//insert one user
43+
UserTable.Query().Insert(&User{Name:"john"})
44+
45+
//get user id = 1
46+
user, _ := UserTable.Query().Get(1)
47+
48+
//update user name
49+
user.Query().Update(&UserTable.Name, "john 2")
4550
}
4651
```
4752

4853
## select
4954

5055
```go
51-
//get first user (name='join') as struct
52-
user, query := UserTable.Query().Where(&UserTable.Name, "john").Get()
56+
//get users where name='join'
57+
users, _ := UserTable.Query().Where(&UserTable.Name, "john").Gets()
5358

5459
//get users count(*)
55-
count, query := UserTable.Query().GetCount()
60+
count, _ := UserTable.Query().GetCount()
5661

5762
//get user names map key by id
5863
var userNameKeyById map[int]string
5964
UserTable.Query().Select(&UserTable.Id, &UserTable.Name).GetTo(&userNameKeyById)
6065

6166
//get users map key by name
6267
//useful when find has-many relations
63-
var usersMapkeyByName map[string][]User
68+
var usersMapkeyByName map[string][]*User
6469
UserTable.Query().Select(&UserTable.Name, UserTable).GetTo(&usersMapkeyByName)
6570

6671
```
@@ -69,21 +74,21 @@ func main() {
6974

7075
```go
7176
//update user set name="hello" where id = 1
72-
UserTable.Query().WherePrimary(1).Update(&UserTable.Name, "hello")
77+
UserTable.Query().WherePrimary(1).Update(&UserTable.Name, "john 2")
7378

7479
//query delete
7580
UserTable.Query().Delete(1, 2, 3)
7681

7782
//query insert
78-
_ = UserTable.Query().Insert(User{Name: "han"}).LastInsertId //insert one row and get id
83+
_ = UserTable.Query().Insert(&User{Name: "han"}).LastInsertId //insert one row and get id
7984

8085
```
8186

8287
### join
8388

8489
```go
8590
//query join
86-
UserTable.Query().Join(OrderTable, func (query *orm.Query[User]) *orm.Query[User] {
91+
UserTable.Query().Join(OrderTable, func (query *orm.Query[*User]) *orm.Query[*User] {
8792
return query.Where(&UserTable.Id, &OrderTable.UserId)
8893
}).Select(UserTable).Gets()
8994
```
@@ -92,8 +97,8 @@ func main() {
9297

9398
```go
9499
//transaction
95-
_ = UserTable.Query().Transaction(func (query *orm.Query[User]) error {
96-
newId := query.Insert(User{Name: "john"}).LastInsertId //insert
100+
_ = UserTable.Query().Transaction(func (query *orm.Query[*User]) error {
101+
newId := query.Insert(&User{Name: "john"}).LastInsertId //insert
97102
//newId := orm.NewQuery(UserTable).UseTx(query.Tx()).Insert(User{Name: "john"}).LastInsertId
98103
fmt.Println(newId)
99104
return errors.New("I want rollback") //rollback
@@ -110,11 +115,11 @@ func main() {
110115
UserTable.Query().Where(&UserTable.Id, orm.WhereIn, subquery).Gets()
111116

112117
//insert subquery
113-
UserTable.Query().InsertSubquery(subquery, nil)
118+
UserTable.Query().InsertSubquery(subquery)
114119

115120
//join subquery
116-
UserTable.Query().Join(subquery, func (query *orm.Query[User]) *orm.Query[User] {
121+
UserTable.Query().Join(subquery, func (query *orm.Query[*User]) *orm.Query[*User] {
117122
return query.Where(&UserTable.Id, orm.Raw("sub.id"))
118123
}).Gets()
119124

120-
```
125+
```

orm/create_struct.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ var findNotNullRegex = regexp.MustCompile("(.+) NOT NULL")
2020
var findNullRegex = regexp.MustCompile("(.+) NULL")
2121

2222
func (q *Query[T]) CreateStruct(file ...string) error {
23-
table := q.TableInterface()
23+
table := q.tableInterface()
2424
dbColumns, err := getTableDbColumns(q)
2525
if err != nil {
2626
return err
@@ -139,7 +139,7 @@ func getStructFieldTypeStringByDBType(dbType string) string {
139139
}
140140

141141
func getSqlSegments[T Table](query *Query[T]) ([]string, error) {
142-
table := query.TableInterface()
142+
table := query.tableInterface()
143143
var res map[string]string
144144

145145
err := query.Raw("show create table " + "`" + table.TableName() + "`").GetTo(&res).Err

orm/create_table.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,9 @@ func (q *Query[T]) CreateTable() (string, error) {
6363
extraStrs := getTableNewColumns(originColumnStrs, dbColumnStrs)
6464
retSql := ""
6565
var err error
66+
6667
for _, v := range extraStrs {
67-
tempSql := "ALTER TABLE " + "`" + q.TableInterface().TableName() + "`" + " ADD " + v
68+
tempSql := "ALTER TABLE " + "`" + q.tableInterface().TableName() + "`" + " ADD " + v
6869

6970
retSql += tempSql + "\n"
7071
_, err = db.Exec(tempSql)
@@ -98,12 +99,18 @@ func getTableNewColumns(origin, current []string) []string {
9899
}
99100

100101
var ret []string
102+
var preCol string
101103
for _, v := range current {
102104
if strings.HasPrefix(v, "`") {
103105
tempStrs := strings.SplitN(v, " ", 2)
104106
if exist[strings.ToLower(tempStrs[0])] == false {
105-
ret = append(ret, v)
107+
if preCol != "" {
108+
ret = append(ret, v+" after "+preCol)
109+
} else {
110+
ret = append(ret, v)
111+
}
106112
}
113+
preCol = tempStrs[0]
107114
} else {
108115
tempStrs := strings.SplitN(v, " (", 2)
109116
if exist[strings.ToLower(tempStrs[0])] == false {

orm/err.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,8 @@ var (
1414
ErrColumnShouldBeStringOrPtr = errors.New("select|where column should be string or ptr of Table.T.field")
1515
ErrDestOfGetToMustBePtr = errors.New("dest of Get-to must be ptr")
1616
ErrDestOfGetToSliceElemMustNotBePtr = errors.New("dest of Get-to slice elem kind must not be ptr")
17+
ErrDestOfGetToMapElemMustNotBePtr = errors.New("dest of Get-to map elem kind must not be ptr")
1718
ErrInsertPtrNotAllowed = errors.New("insert ptr data not allowed")
19+
ErrUpdateWithoutCondition = errors.New("update without condition not allowed")
20+
ErrDeleteWithoutCondition = errors.New("delete without condition not allowed")
1821
)

0 commit comments

Comments
 (0)