snapshot of https://github.com/sqlc-dev/sqlc.git (main, 2026-09-16; blobs > 131072B omitted)
Some checks failed
kotlin / test (push) Has been skipped
python / test (push) Has been skipped
typescript / test (push) Has been skipped
go / build darwin/amd64 (push) Has been cancelled
go / build linux/amd64 (push) Has been cancelled
go / build windows/amd64 (push) Has been cancelled
go / build darwin/arm64 (push) Has been cancelled
go / build linux/arm64 (push) Has been cancelled
go / build windows/arm64 (push) Has been cancelled
go / test (push) Has been cancelled
go / vuln_check (push) Has been cancelled
Some checks failed
kotlin / test (push) Has been skipped
python / test (push) Has been skipped
typescript / test (push) Has been skipped
go / build darwin/amd64 (push) Has been cancelled
go / build linux/amd64 (push) Has been cancelled
go / build windows/amd64 (push) Has been cancelled
go / build darwin/arm64 (push) Has been cancelled
go / build linux/arm64 (push) Has been cancelled
go / build windows/arm64 (push) Has been cancelled
go / test (push) Has been cancelled
go / vuln_check (push) Has been cancelled
This commit is contained in:
53
internal/codegen/golang/struct.go
Normal file
53
internal/codegen/golang/struct.go
Normal file
@@ -0,0 +1,53 @@
|
||||
package golang
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"unicode"
|
||||
"unicode/utf8"
|
||||
|
||||
"github.com/sqlc-dev/sqlc/internal/codegen/golang/opts"
|
||||
"github.com/sqlc-dev/sqlc/internal/plugin"
|
||||
)
|
||||
|
||||
type Struct struct {
|
||||
Table *plugin.Identifier
|
||||
Name string
|
||||
Fields []Field
|
||||
Comment string
|
||||
// IsModel is true for table structs that live in the models file. When
|
||||
// the models file is generated into a different Go package, references
|
||||
// to these types from query files must be qualified.
|
||||
IsModel bool
|
||||
}
|
||||
|
||||
func StructName(name string, options *opts.Options) string {
|
||||
if rename := options.Rename[name]; rename != "" {
|
||||
return rename
|
||||
}
|
||||
var out strings.Builder
|
||||
name = strings.Map(func(r rune) rune {
|
||||
if unicode.IsLetter(r) {
|
||||
return r
|
||||
}
|
||||
if unicode.IsDigit(r) {
|
||||
return r
|
||||
}
|
||||
return rune('_')
|
||||
}, name)
|
||||
|
||||
for p := range strings.SplitSeq(name, "_") {
|
||||
if _, found := options.InitialismsMap[p]; found {
|
||||
out.WriteString(strings.ToUpper(p))
|
||||
} else {
|
||||
out.WriteString(strings.Title(p))
|
||||
}
|
||||
}
|
||||
|
||||
// If a name has a digit as its first char, prepand an underscore to make it a valid Go name.
|
||||
r, _ := utf8.DecodeRuneInString(out.String())
|
||||
if unicode.IsDigit(r) {
|
||||
return "_" + out.String()
|
||||
} else {
|
||||
return out.String()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user