Add dameng support #2007

Merged
lunny merged 59 commits from lunny/dm into master 2021-08-24 05:46:09 +00:00
Showing only changes of commit a3c96246ec - Show all commits

View File

@ -586,7 +586,9 @@ func (db *dameng) SQLType(c *schemas.Column) string {
res = "REAL" res = "REAL"
case schemas.Numeric, schemas.Decimal, "NUMBER": case schemas.Numeric, schemas.Decimal, "NUMBER":
res = "NUMERIC" res = "NUMERIC"
case schemas.Text, schemas.MediumText, schemas.LongText, schemas.Json: case schemas.Text, schemas.Json:
res = "TEXT"
case schemas.MediumText, schemas.LongText:
res = "CLOB" res = "CLOB"
case schemas.Char, schemas.Varchar, schemas.TinyText: case schemas.Char, schemas.Varchar, schemas.TinyText:
res = "VARCHAR2" res = "VARCHAR2"
@ -758,6 +760,10 @@ func (d *dmClobScanner) Scan(data interface{}) error {
if err != nil { if err != nil {
return err return err
} }
if l == 0 {
d.valid = true
return nil
}
d.data, err = t.ReadString(1, int(l)) d.data, err = t.ReadString(1, int(l))
if err != nil { if err != nil {
return err return err
@ -884,7 +890,7 @@ func (db *dameng) GetColumns(queryer core.Queryer, ctx context.Context, tableNam
col.SQLType = schemas.SQLType{Name: schemas.TimeStampz, DefaultLength: 0, DefaultLength2: 0} col.SQLType = schemas.SQLType{Name: schemas.TimeStampz, DefaultLength: 0, DefaultLength2: 0}
case "NUMBER": case "NUMBER":
col.SQLType = schemas.SQLType{Name: "NUMBER", DefaultLength: len1, DefaultLength2: len2} col.SQLType = schemas.SQLType{Name: "NUMBER", DefaultLength: len1, DefaultLength2: len2}
case "LONG", "LONG RAW", "NCLOB", "CLOB": case "LONG", "LONG RAW", "NCLOB", "CLOB", "TEXT":
col.SQLType = schemas.SQLType{Name: schemas.Text, DefaultLength: 0, DefaultLength2: 0} col.SQLType = schemas.SQLType{Name: schemas.Text, DefaultLength: 0, DefaultLength2: 0}
case "RAW": case "RAW":
col.SQLType = schemas.SQLType{Name: schemas.Binary, DefaultLength: 0, DefaultLength2: 0} col.SQLType = schemas.SQLType{Name: schemas.Binary, DefaultLength: 0, DefaultLength2: 0}
@ -1066,7 +1072,7 @@ func (d *damengDriver) Scan(ctx *ScanContext, rows *core.Rows, types []*sql.Colu
var replaced bool var replaced bool
var scanResult interface{} var scanResult interface{}
switch types[i].DatabaseTypeName() { switch types[i].DatabaseTypeName() {
case "CLOB": case "CLOB", "TEXT":
scanResult = &dmClobScanner{} scanResult = &dmClobScanner{}
replaced = true replaced = true
default: default: