Skip to content
This repository was archived by the owner on Sep 23, 2024. It is now read-only.

Commit c732c22

Browse files
authored
Merge pull request #2 from zztkm/support-mysql-type
Support mysql type
2 parents 0431a69 + ea2451d commit c732c22

File tree

5 files changed

+93
-14
lines changed

5 files changed

+93
-14
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ jobs:
99
name: test
1010
runs-on: ubuntu-latest
1111
steps:
12-
- uses: actions/checkout@v3
12+
- uses: actions/checkout@v4
1313
- uses: actions/setup-go@v4
1414
with:
1515
go-version: '1.21.0'

go.mod

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,9 @@ module github.com/zztkm/sqlc-gen-python-orm
33
go 1.19
44

55
require (
6-
buf.build/gen/go/sqlc/sqlc/protocolbuffers/go v1.30.0-20230621221448-196413f69ab3.1
6+
buf.build/gen/go/sqlc/sqlc/protocolbuffers/go v1.31.0-20231002190240-3f2d312ab6fd.1
77
github.com/google/go-cmp v0.5.9
88
github.com/jinzhu/inflection v1.0.0
9-
github.com/sqlc-dev/sqlc-go v1.18.1
10-
google.golang.org/protobuf v1.30.0
9+
github.com/sqlc-dev/sqlc-go v1.22.0
10+
google.golang.org/protobuf v1.31.0
1111
)
12-
13-
require github.com/tabbed/sqlc-go v1.18.0 // indirect

go.sum

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
1-
buf.build/gen/go/sqlc/sqlc/protocolbuffers/go v1.30.0-20230621221448-196413f69ab3.1 h1:ze0HODAjPRXSkiqSpDTYq2baS4IVtRtDLSZY2p1ZCX4=
2-
buf.build/gen/go/sqlc/sqlc/protocolbuffers/go v1.30.0-20230621221448-196413f69ab3.1/go.mod h1:DSpReHp8PwHOeCfGymiiY4HSx2iVL358X7JRMciL7T0=
1+
buf.build/gen/go/sqlc/sqlc/protocolbuffers/go v1.31.0-20231002190240-3f2d312ab6fd.1 h1:94JzirpGhebc3++MqmvWY0fi9TJxlle5M52NO4pTEZY=
2+
buf.build/gen/go/sqlc/sqlc/protocolbuffers/go v1.31.0-20231002190240-3f2d312ab6fd.1/go.mod h1:x7kMRcmAiYQXko+NDqLP2agondNlbHKUNGPXqU1nrOU=
33
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
44
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
55
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
66
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
77
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
88
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
9-
github.com/sqlc-dev/sqlc-go v1.18.1 h1:mmudfN9G938piXnZGvrMEHp9RF4dD+InQIY1BaoQOvU=
10-
github.com/sqlc-dev/sqlc-go v1.18.1/go.mod h1:v6c+FMh0YrbT9RU9+S5Sh62VXmVhdpTsQoXn1QxH294=
11-
github.com/tabbed/sqlc-go v1.18.0 h1:GNE8b8xue8fKVptQnr3Z6DV8FqdokyDYML7O0kYtbe4=
12-
github.com/tabbed/sqlc-go v1.18.0/go.mod h1:qx8ocsmviBDyRfLNuJQtdu0f5oqa8XBjKxMldl+Wm24=
9+
github.com/sqlc-dev/sqlc-go v1.22.0 h1:ivUplxHRkw1WZ++rs80OfoJLYbpXMXYGtc79e7z/0HA=
10+
github.com/sqlc-dev/sqlc-go v1.22.0/go.mod h1:/4snw3ucbglJfyLRxp8X2weM4pwT8w1NlEKm4PzxAuQ=
1311
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
1412
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
15-
google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
16-
google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
13+
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
14+
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=

internal/gen.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,8 @@ func pyInnerType(req *plugin.CodeGenRequest, col *plugin.Column) string {
207207
switch req.Settings.Engine {
208208
case "postgresql":
209209
return postgresType(req, col)
210+
case "mysql":
211+
return mysqlType(req, col)
210212
default:
211213
log.Println("unsupported engine type")
212214
return "Any"
@@ -376,6 +378,15 @@ func sqlalchemySQL(s, engine string) string {
376378
s = strings.ReplaceAll(s, ":", `\\:`)
377379
if engine == "postgresql" {
378380
return postgresPlaceholderRegexp.ReplaceAllString(s, ":p$1")
381+
} else if engine == "mysql" {
382+
// All "?" in string s in string s are replaced with ":p1", ":p2", ... in that order
383+
parts := strings.Split(s, "?")
384+
for i := range parts {
385+
if i != 0 {
386+
parts[i] = fmt.Sprintf(":p%d%s", i, parts[i])
387+
}
388+
}
389+
return strings.Join(parts, "")
379390
}
380391
return s
381392
}

internal/mysql_type.go

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package python
2+
3+
import (
4+
"log"
5+
6+
"buf.build/gen/go/sqlc/sqlc/protocolbuffers/go/protos/plugin"
7+
"github.com/sqlc-dev/sqlc-go/sdk"
8+
)
9+
10+
func mysqlType(req *plugin.CodeGenRequest, col *plugin.Column) string {
11+
columnType := sdk.DataType(col.Type)
12+
13+
switch columnType {
14+
15+
case "varchar", "text", "char", "tinytext", "mediumtext", "longtext":
16+
return "str"
17+
18+
case "tinyint":
19+
if col.Length == 1 {
20+
return "bool"
21+
} else {
22+
return "int"
23+
}
24+
25+
case "int", "integer", "smallint", "mediumint", "year":
26+
return "int"
27+
28+
case "bigint":
29+
return "int"
30+
31+
case "blob", "binary", "varbinary", "tinyblob", "mediumblob", "longblob":
32+
// TODO: Proper blob support
33+
return "Any"
34+
35+
case "double", "double precision", "real", "float":
36+
return "float"
37+
38+
case "decimal", "dec", "fixed":
39+
return "string"
40+
41+
case "enum":
42+
// TODO: Proper Enum support
43+
return "string"
44+
45+
case "date", "timestamp", "datetime", "time":
46+
return "datetime.date"
47+
48+
case "boolean", "bool":
49+
return "bool"
50+
51+
case "json":
52+
return "Any"
53+
54+
case "any":
55+
return "Any"
56+
57+
default:
58+
for _, schema := range req.Catalog.Schemas {
59+
for _, enum := range schema.Enums {
60+
if columnType == enum.Name {
61+
if schema.Name == req.Catalog.DefaultSchema {
62+
return "models." + modelName(enum.Name, req.Settings)
63+
}
64+
return "models." + modelName(schema.Name+"_"+enum.Name, req.Settings)
65+
}
66+
}
67+
}
68+
log.Printf("Unknown MySQL type: %s\n", columnType)
69+
return "Any"
70+
71+
}
72+
}

0 commit comments

Comments
 (0)