Support use nvarchar for all varchar columns when using mssql (#12269)

* Support use nvarchar for all varchar columns when using mssql

* fix lint

* Change DEFAULT_VARCHAR to nvarchar

* Remove the config for default varchar since it's unnecessary
This commit is contained in:
Lunny Xiao 2020-07-21 20:28:27 +08:00 committed by GitHub
parent ed8e064f5e
commit 45631083a4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 68 additions and 8 deletions

View file

@ -214,6 +214,8 @@ var (
type mssql struct {
Base
defaultVarchar string
defaultChar string
}
func (db *mssql) Init(uri *URI) error {
@ -221,6 +223,34 @@ func (db *mssql) Init(uri *URI) error {
return db.Base.Init(db, uri)
}
func (db *mssql) SetParams(params map[string]string) {
defaultVarchar, ok := params["DEFAULT_VARCHAR"]
if ok {
var t = strings.ToUpper(defaultVarchar)
switch t {
case "NVARCHAR", "VARCHAR":
db.defaultVarchar = defaultVarchar
default:
db.defaultVarchar = "VARCHAR"
}
} else {
db.defaultVarchar = "VARCHAR"
}
defaultChar, ok := params["DEFAULT_CHAR"]
if ok {
var t = strings.ToUpper(defaultChar)
switch t {
case "NCHAR", "CHAR":
db.defaultChar = defaultChar
default:
db.defaultChar = "CHAR"
}
} else {
db.defaultChar = "CHAR"
}
}
func (db *mssql) SQLType(c *schemas.Column) string {
var res string
switch t := c.SQLType.Name; t {
@ -267,6 +297,10 @@ func (db *mssql) SQLType(c *schemas.Column) string {
case schemas.BigInt:
res = schemas.BigInt
c.Length = 0
case schemas.Varchar:
res = db.defaultVarchar
case schemas.Char:
res = db.defaultChar
default:
res = t
}