Skip to content

Commit f6d77f3

Browse files
committed
GORM v1.25.5.
1 parent d5d7cd1 commit f6d77f3

File tree

9 files changed

+170
-130
lines changed

9 files changed

+170
-130
lines changed

go.work.sum

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
github.com/ncruces/go-sqlite3 v0.9.0/go.mod h1:IyRoNwT0Z+mNRXIVeP2DgWPNl78Kmc/B+pO9i6GNgRg=
1+
github.com/ncruces/go-sqlite3 v0.9.1/go.mod h1:jFoUbaCDNUS1KN5ZgFxN7bgcWoWfO0EOKeik9QAHZ08=
22
golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8=
33
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
44
golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM=

gormlite/ddlmod.go

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ func parseDDL(strs ...string) (*ddl, error) {
125125
ColumnTypeValue: sql.NullString{String: matches[2], Valid: true},
126126
PrimaryKeyValue: sql.NullBool{Valid: true},
127127
UniqueValue: sql.NullBool{Valid: true},
128-
NullableValue: sql.NullBool{Valid: true},
128+
NullableValue: sql.NullBool{Bool: true, Valid: true},
129129
DefaultValueValue: sql.NullString{Valid: false},
130130
}
131131

@@ -175,6 +175,18 @@ func parseDDL(strs ...string) (*ddl, error) {
175175
return &result, nil
176176
}
177177

178+
func (d *ddl) clone() *ddl {
179+
copied := new(ddl)
180+
*copied = *d
181+
182+
copied.fields = make([]string, len(d.fields))
183+
copy(copied.fields, d.fields)
184+
copied.columns = make([]migrator.ColumnType, len(d.columns))
185+
copy(copied.columns, d.columns)
186+
187+
return copied
188+
}
189+
178190
func (d *ddl) compile() string {
179191
if len(d.fields) == 0 {
180192
return d.head
@@ -183,6 +195,21 @@ func (d *ddl) compile() string {
183195
return fmt.Sprintf("%s (%s)", d.head, strings.Join(d.fields, ","))
184196
}
185197

198+
func (d *ddl) renameTable(dst, src string) error {
199+
tableReg, err := regexp.Compile("\\s*('|`|\")?\\b" + regexp.QuoteMeta(src) + "\\b('|`|\")?\\s*")
200+
if err != nil {
201+
return err
202+
}
203+
204+
replaced := tableReg.ReplaceAllString(d.head, fmt.Sprintf(" `%s` ", dst))
205+
if replaced == d.head {
206+
return fmt.Errorf("failed to look up tablename `%s` from DDL head '%s'", src, d.head)
207+
}
208+
209+
d.head = replaced
210+
return nil
211+
}
212+
186213
func (d *ddl) addConstraint(name string, sql string) {
187214
reg := regexp.MustCompile("^CONSTRAINT [\"`]?" + regexp.QuoteMeta(name) + "[\"` ]")
188215

@@ -208,6 +235,17 @@ func (d *ddl) removeConstraint(name string) bool {
208235
return false
209236
}
210237

238+
func (d *ddl) hasConstraint(name string) bool {
239+
reg := regexp.MustCompile("^CONSTRAINT [\"`]?" + regexp.QuoteMeta(name) + "[\"` ]")
240+
241+
for _, f := range d.fields {
242+
if reg.MatchString(f) {
243+
return true
244+
}
245+
}
246+
return false
247+
}
248+
211249
func (d *ddl) getColumns() []string {
212250
res := []string{}
213251

@@ -229,3 +267,30 @@ func (d *ddl) getColumns() []string {
229267
}
230268
return res
231269
}
270+
271+
func (d *ddl) alterColumn(name, sql string) bool {
272+
reg := regexp.MustCompile("^(`|'|\"| )" + regexp.QuoteMeta(name) + "(`|'|\"| ) .*?$")
273+
274+
for i := 0; i < len(d.fields); i++ {
275+
if reg.MatchString(d.fields[i]) {
276+
d.fields[i] = sql
277+
return false
278+
}
279+
}
280+
281+
d.fields = append(d.fields, sql)
282+
return true
283+
}
284+
285+
func (d *ddl) removeColumn(name string) bool {
286+
reg := regexp.MustCompile("^(`|'|\"| )" + regexp.QuoteMeta(name) + "(`|'|\"| ) .*?$")
287+
288+
for i := 0; i < len(d.fields); i++ {
289+
if reg.MatchString(d.fields[i]) {
290+
d.fields = append(d.fields[:i], d.fields[i+1:]...)
291+
return true
292+
}
293+
}
294+
295+
return false
296+
}

gormlite/ddlmod_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,16 @@ func TestParseDDL(t *testing.T) {
2020
"CREATE UNIQUE INDEX `idx_profiles_refer` ON `profiles`(`text`)",
2121
}, 6, []migrator.ColumnType{
2222
{NameValue: sql.NullString{String: "id", Valid: true}, DataTypeValue: sql.NullString{String: "integer", Valid: true}, ColumnTypeValue: sql.NullString{String: "integer", Valid: true}, PrimaryKeyValue: sql.NullBool{Bool: true, Valid: true}, NullableValue: sql.NullBool{Valid: true}, UniqueValue: sql.NullBool{Valid: true}, DefaultValueValue: sql.NullString{Valid: false}},
23-
{NameValue: sql.NullString{String: "text", Valid: true}, DataTypeValue: sql.NullString{String: "varchar", Valid: true}, LengthValue: sql.NullInt64{Int64: 500, Valid: true}, ColumnTypeValue: sql.NullString{String: "varchar(500)", Valid: true}, DefaultValueValue: sql.NullString{String: "hello", Valid: true}, NullableValue: sql.NullBool{Valid: true}, UniqueValue: sql.NullBool{Bool: true, Valid: true}, PrimaryKeyValue: sql.NullBool{Valid: true}},
24-
{NameValue: sql.NullString{String: "age", Valid: true}, DataTypeValue: sql.NullString{String: "integer", Valid: true}, ColumnTypeValue: sql.NullString{String: "integer", Valid: true}, DefaultValueValue: sql.NullString{String: "18", Valid: true}, NullableValue: sql.NullBool{Valid: true}, UniqueValue: sql.NullBool{Valid: true}, PrimaryKeyValue: sql.NullBool{Valid: true}},
25-
{NameValue: sql.NullString{String: "user_id", Valid: true}, DataTypeValue: sql.NullString{String: "integer", Valid: true}, ColumnTypeValue: sql.NullString{String: "integer", Valid: true}, DefaultValueValue: sql.NullString{Valid: false}, NullableValue: sql.NullBool{Valid: true}, UniqueValue: sql.NullBool{Valid: true}, PrimaryKeyValue: sql.NullBool{Valid: true}},
23+
{NameValue: sql.NullString{String: "text", Valid: true}, DataTypeValue: sql.NullString{String: "varchar", Valid: true}, LengthValue: sql.NullInt64{Int64: 500, Valid: true}, ColumnTypeValue: sql.NullString{String: "varchar(500)", Valid: true}, DefaultValueValue: sql.NullString{String: "hello", Valid: true}, NullableValue: sql.NullBool{Bool: true, Valid: true}, UniqueValue: sql.NullBool{Bool: true, Valid: true}, PrimaryKeyValue: sql.NullBool{Valid: true}},
24+
{NameValue: sql.NullString{String: "age", Valid: true}, DataTypeValue: sql.NullString{String: "integer", Valid: true}, ColumnTypeValue: sql.NullString{String: "integer", Valid: true}, DefaultValueValue: sql.NullString{String: "18", Valid: true}, NullableValue: sql.NullBool{Bool: true, Valid: true}, UniqueValue: sql.NullBool{Valid: true}, PrimaryKeyValue: sql.NullBool{Valid: true}},
25+
{NameValue: sql.NullString{String: "user_id", Valid: true}, DataTypeValue: sql.NullString{String: "integer", Valid: true}, ColumnTypeValue: sql.NullString{String: "integer", Valid: true}, DefaultValueValue: sql.NullString{Valid: false}, NullableValue: sql.NullBool{Bool: true, Valid: true}, UniqueValue: sql.NullBool{Valid: true}, PrimaryKeyValue: sql.NullBool{Valid: true}},
2626
},
2727
},
2828
{"with_check", []string{"CREATE TABLE Persons (ID int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Age int,CHECK (Age>=18),CHECK (FirstName<>'John'))"}, 6, []migrator.ColumnType{
2929
{NameValue: sql.NullString{String: "ID", Valid: true}, DataTypeValue: sql.NullString{String: "int", Valid: true}, ColumnTypeValue: sql.NullString{String: "int", Valid: true}, NullableValue: sql.NullBool{Valid: true}, DefaultValueValue: sql.NullString{Valid: false}, UniqueValue: sql.NullBool{Valid: true}, PrimaryKeyValue: sql.NullBool{Valid: true}},
3030
{NameValue: sql.NullString{String: "LastName", Valid: true}, DataTypeValue: sql.NullString{String: "varchar", Valid: true}, LengthValue: sql.NullInt64{Int64: 255, Valid: true}, ColumnTypeValue: sql.NullString{String: "varchar(255)", Valid: true}, NullableValue: sql.NullBool{Bool: false, Valid: true}, DefaultValueValue: sql.NullString{Valid: false}, UniqueValue: sql.NullBool{Valid: true}, PrimaryKeyValue: sql.NullBool{Valid: true}},
31-
{NameValue: sql.NullString{String: "FirstName", Valid: true}, DataTypeValue: sql.NullString{String: "varchar", Valid: true}, LengthValue: sql.NullInt64{Int64: 255, Valid: true}, ColumnTypeValue: sql.NullString{String: "varchar(255)", Valid: true}, DefaultValueValue: sql.NullString{Valid: false}, NullableValue: sql.NullBool{Valid: true}, UniqueValue: sql.NullBool{Valid: true}, PrimaryKeyValue: sql.NullBool{Valid: true}},
32-
{NameValue: sql.NullString{String: "Age", Valid: true}, DataTypeValue: sql.NullString{String: "int", Valid: true}, ColumnTypeValue: sql.NullString{String: "int", Valid: true}, DefaultValueValue: sql.NullString{Valid: false}, NullableValue: sql.NullBool{Valid: true}, UniqueValue: sql.NullBool{Valid: true}, PrimaryKeyValue: sql.NullBool{Valid: true}},
31+
{NameValue: sql.NullString{String: "FirstName", Valid: true}, DataTypeValue: sql.NullString{String: "varchar", Valid: true}, LengthValue: sql.NullInt64{Int64: 255, Valid: true}, ColumnTypeValue: sql.NullString{String: "varchar(255)", Valid: true}, DefaultValueValue: sql.NullString{Valid: false}, NullableValue: sql.NullBool{Bool: true, Valid: true}, UniqueValue: sql.NullBool{Valid: true}, PrimaryKeyValue: sql.NullBool{Valid: true}},
32+
{NameValue: sql.NullString{String: "Age", Valid: true}, DataTypeValue: sql.NullString{String: "int", Valid: true}, ColumnTypeValue: sql.NullString{String: "int", Valid: true}, DefaultValueValue: sql.NullString{Valid: false}, NullableValue: sql.NullBool{Bool: true, Valid: true}, UniqueValue: sql.NullBool{Valid: true}, PrimaryKeyValue: sql.NullBool{Valid: true}},
3333
}},
3434
{"lowercase", []string{"create table test (ID int NOT NULL)"}, 1, []migrator.ColumnType{
3535
{NameValue: sql.NullString{String: "ID", Valid: true}, DataTypeValue: sql.NullString{String: "int", Valid: true}, ColumnTypeValue: sql.NullString{String: "int", Valid: true}, NullableValue: sql.NullBool{Bool: false, Valid: true}, DefaultValueValue: sql.NullString{Valid: false}, UniqueValue: sql.NullBool{Valid: true}, PrimaryKeyValue: sql.NullBool{Valid: true}},
@@ -39,7 +39,7 @@ func TestParseDDL(t *testing.T) {
3939
{"with_special_characters", []string{
4040
"CREATE TABLE `test` (`text` varchar(10) DEFAULT \"测试, \")",
4141
}, 1, []migrator.ColumnType{
42-
{NameValue: sql.NullString{String: "text", Valid: true}, DataTypeValue: sql.NullString{String: "varchar", Valid: true}, LengthValue: sql.NullInt64{Int64: 10, Valid: true}, ColumnTypeValue: sql.NullString{String: "varchar(10)", Valid: true}, DefaultValueValue: sql.NullString{String: "测试, ", Valid: true}, NullableValue: sql.NullBool{Valid: true}, UniqueValue: sql.NullBool{Valid: true}, PrimaryKeyValue: sql.NullBool{Valid: true}},
42+
{NameValue: sql.NullString{String: "text", Valid: true}, DataTypeValue: sql.NullString{String: "varchar", Valid: true}, LengthValue: sql.NullInt64{Int64: 10, Valid: true}, ColumnTypeValue: sql.NullString{String: "varchar(10)", Valid: true}, DefaultValueValue: sql.NullString{String: "测试, ", Valid: true}, NullableValue: sql.NullBool{Bool: true, Valid: true}, UniqueValue: sql.NullBool{Valid: true}, PrimaryKeyValue: sql.NullBool{Valid: true}},
4343
},
4444
},
4545
{
@@ -122,7 +122,7 @@ func TestParseDDL_Whitespaces(t *testing.T) {
122122
NameValue: sql.NullString{String: "id", Valid: true},
123123
DataTypeValue: sql.NullString{String: "integer", Valid: true},
124124
ColumnTypeValue: sql.NullString{String: "integer", Valid: true},
125-
NullableValue: sql.NullBool{Bool: false, Valid: true},
125+
NullableValue: sql.NullBool{Bool: true, Valid: true},
126126
DefaultValueValue: sql.NullString{Valid: false},
127127
UniqueValue: sql.NullBool{Bool: true, Valid: true},
128128
PrimaryKeyValue: sql.NullBool{Bool: true, Valid: true},
@@ -131,7 +131,7 @@ func TestParseDDL_Whitespaces(t *testing.T) {
131131
NameValue: sql.NullString{String: "dark_mode", Valid: true},
132132
DataTypeValue: sql.NullString{String: "numeric", Valid: true},
133133
ColumnTypeValue: sql.NullString{String: "numeric", Valid: true},
134-
NullableValue: sql.NullBool{Valid: true},
134+
NullableValue: sql.NullBool{Bool: true, Valid: true},
135135
DefaultValueValue: sql.NullString{String: "true", Valid: true},
136136
UniqueValue: sql.NullBool{Bool: false, Valid: true},
137137
PrimaryKeyValue: sql.NullBool{Bool: false, Valid: true},

gormlite/error_translator.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"gorm.io/gorm"
88
)
99

10-
func (dialector Dialector) Translate(err error) error {
10+
func (_Dialector) Translate(err error) error {
1111
switch {
1212
case
1313
errors.Is(err, sqlite3.CONSTRAINT_UNIQUE),

gormlite/go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ module github.com/ncruces/go-sqlite3/gormlite
33
go 1.21
44

55
require (
6-
github.com/ncruces/go-sqlite3 v0.9.0
7-
gorm.io/gorm v1.25.4
6+
github.com/ncruces/go-sqlite3 v0.9.1
7+
gorm.io/gorm v1.25.5
88
)
99

1010
require (
1111
github.com/jinzhu/inflection v1.0.0 // indirect
1212
github.com/jinzhu/now v1.1.5 // indirect
1313
github.com/ncruces/julianday v0.1.5 // indirect
1414
github.com/tetratelabs/wazero v1.5.0 // indirect
15-
golang.org/x/sys v0.12.0 // indirect
15+
golang.org/x/sys v0.13.0 // indirect
1616
)

gormlite/go.sum

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD
22
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
33
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
44
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
5-
github.com/ncruces/go-sqlite3 v0.9.0 h1:tl5eEmGEyzZH2ur8sDgPJTdzV4CRnKpsFngoP1QRjD8=
6-
github.com/ncruces/go-sqlite3 v0.9.0/go.mod h1:IyRoNwT0Z+mNRXIVeP2DgWPNl78Kmc/B+pO9i6GNgRg=
5+
github.com/ncruces/go-sqlite3 v0.9.1 h1:kV7Zy+ZNyHMfMyZeWc1Yyq+wtgYZDZdp2qAA/wfeMWo=
6+
github.com/ncruces/go-sqlite3 v0.9.1/go.mod h1:jFoUbaCDNUS1KN5ZgFxN7bgcWoWfO0EOKeik9QAHZ08=
77
github.com/ncruces/julianday v0.1.5 h1:hDJ9ejiMp3DHsoZ5KW4c1lwfMjbARS7u/gbYcd0FBZk=
88
github.com/ncruces/julianday v0.1.5/go.mod h1:Dusn2KvZrrovOMJuOt0TNXL6tB7U2E8kvza5fFc9G7g=
99
github.com/tetratelabs/wazero v1.5.0 h1:Yz3fZHivfDiZFUXnWMPUoiW7s8tC1sjdBtlJn08qYa0=
1010
github.com/tetratelabs/wazero v1.5.0/go.mod h1:0U0G41+ochRKoPKCJlh0jMg1CHkyfK8kDqiirMmKY8A=
11-
golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
12-
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
11+
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
12+
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
1313
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
1414
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
15-
gorm.io/gorm v1.25.4 h1:iyNd8fNAe8W9dvtlgeRI5zSVZPsq3OpcTu37cYcpCmw=
16-
gorm.io/gorm v1.25.4/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
15+
gorm.io/gorm v1.25.5 h1:zR9lOiiYf09VNh5Q1gphfyia1JpiClIWG9hQaxB/mls=
16+
gorm.io/gorm v1.25.5/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=

0 commit comments

Comments
 (0)