Fix get columns
This commit is contained in:
parent
3b48a044f6
commit
9296cfdcd7
4
Makefile
4
Makefile
|
@ -258,13 +258,13 @@ test-tidb\#%: go-check
|
||||||
|
|
||||||
.PNONY: test-dameng
|
.PNONY: test-dameng
|
||||||
test-dameng: go-check
|
test-dameng: go-check
|
||||||
$(GO) test $(INTEGRATION_PACKAGES) -v -race -db=dm -cache=$(TEST_CACHE_ENABLE) -quote=$(TEST_QUOTE_POLICY) \
|
$(GO) test -tags=dm $(INTEGRATION_PACKAGES) -v -race -db=dm -cache=$(TEST_CACHE_ENABLE) -quote=$(TEST_QUOTE_POLICY) \
|
||||||
-conn_str="dm://$(TEST_DAMENG_USERNAME):$(TEST_DAMENG_PASSWORD)@$(TEST_DAMENG_HOST)" \
|
-conn_str="dm://$(TEST_DAMENG_USERNAME):$(TEST_DAMENG_PASSWORD)@$(TEST_DAMENG_HOST)" \
|
||||||
-coverprofile=dameng.$(TEST_QUOTE_POLICY).$(TEST_CACHE_ENABLE).coverage.out -covermode=atomic -timeout=20m
|
-coverprofile=dameng.$(TEST_QUOTE_POLICY).$(TEST_CACHE_ENABLE).coverage.out -covermode=atomic -timeout=20m
|
||||||
|
|
||||||
.PHONY: test-dameng\#%
|
.PHONY: test-dameng\#%
|
||||||
test-dameng\#%: go-check
|
test-dameng\#%: go-check
|
||||||
$(GO) test $(INTEGRATION_PACKAGES) -v -race -run $* -db=dm -cache=$(TEST_CACHE_ENABLE) -quote=$(TEST_QUOTE_POLICY) \
|
$(GO) test -tags=dm $(INTEGRATION_PACKAGES) -v -race -run $* -db=dm -cache=$(TEST_CACHE_ENABLE) -quote=$(TEST_QUOTE_POLICY) \
|
||||||
-conn_str="dm://$(TEST_DAMENG_USERNAME):$(TEST_DAMENG_PASSWORD)@$(TEST_DAMENG_HOST)" \
|
-conn_str="dm://$(TEST_DAMENG_USERNAME):$(TEST_DAMENG_PASSWORD)@$(TEST_DAMENG_HOST)" \
|
||||||
-coverprofile=dameng.$(TEST_QUOTE_POLICY).$(TEST_CACHE_ENABLE).coverage.out -covermode=atomic -timeout=20m
|
-coverprofile=dameng.$(TEST_QUOTE_POLICY).$(TEST_CACHE_ENABLE).coverage.out -covermode=atomic -timeout=20m
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
// Copyright 2015 The Xorm Authors. All rights reserved.
|
// Copyright 2021 The Xorm Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// +build dm
|
||||||
|
|
||||||
package dialects
|
package dialects
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
@ -13,10 +15,18 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"gitee.com/travelliu/dm"
|
||||||
"xorm.io/xorm/core"
|
"xorm.io/xorm/core"
|
||||||
"xorm.io/xorm/schemas"
|
"xorm.io/xorm/schemas"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
RegisterDriver("dm", &damengDriver{})
|
||||||
|
RegisterDialect(schemas.DAMENG, func() Dialect {
|
||||||
|
return &dameng{}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
damengReservedWords = map[string]bool{
|
damengReservedWords = map[string]bool{
|
||||||
"ACCESS": true,
|
"ACCESS": true,
|
||||||
|
@ -512,7 +522,7 @@ type dameng struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *dameng) Init(uri *URI) error {
|
func (db *dameng) Init(uri *URI) error {
|
||||||
db.quoter = oracleQuoter
|
db.quoter = damengQuoter
|
||||||
return db.Base.Init(db, uri)
|
return db.Base.Init(db, uri)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -595,7 +605,7 @@ func (db *dameng) AutoIncrStr() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *dameng) IsReserved(name string) bool {
|
func (db *dameng) IsReserved(name string) bool {
|
||||||
_, ok := oracleReservedWords[strings.ToUpper(name)]
|
_, ok := damengReservedWords[strings.ToUpper(name)]
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -641,17 +651,17 @@ func (db *dameng) CreateTableSQL(table *schemas.Table, tableName string) ([]stri
|
||||||
func (db *dameng) SetQuotePolicy(quotePolicy QuotePolicy) {
|
func (db *dameng) SetQuotePolicy(quotePolicy QuotePolicy) {
|
||||||
switch quotePolicy {
|
switch quotePolicy {
|
||||||
case QuotePolicyNone:
|
case QuotePolicyNone:
|
||||||
var q = oracleQuoter
|
var q = damengQuoter
|
||||||
q.IsReserved = schemas.AlwaysNoReserve
|
q.IsReserved = schemas.AlwaysNoReserve
|
||||||
db.quoter = q
|
db.quoter = q
|
||||||
case QuotePolicyReserved:
|
case QuotePolicyReserved:
|
||||||
var q = oracleQuoter
|
var q = damengQuoter
|
||||||
q.IsReserved = db.IsReserved
|
q.IsReserved = db.IsReserved
|
||||||
db.quoter = q
|
db.quoter = q
|
||||||
case QuotePolicyAlways:
|
case QuotePolicyAlways:
|
||||||
fallthrough
|
fallthrough
|
||||||
default:
|
default:
|
||||||
db.quoter = oracleQuoter
|
db.quoter = damengQuoter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -672,10 +682,49 @@ func (db *dameng) IsColumnExist(queryer core.Queryer, ctx context.Context, table
|
||||||
return db.HasRecords(queryer, ctx, query, args...)
|
return db.HasRecords(queryer, ctx, query, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func OracleSeqName(tableName string) string {
|
func DamengSeqName(tableName string) string {
|
||||||
return "SEQ_" + strings.ToUpper(tableName)
|
return "SEQ_" + strings.ToUpper(tableName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var _ sql.Scanner = &dmClobScanner{}
|
||||||
|
|
||||||
|
type dmClobScanner struct {
|
||||||
|
valid bool
|
||||||
|
data string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *dmClobScanner) Scan(data interface{}) error {
|
||||||
|
if data == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
switch t := data.(type) {
|
||||||
|
case *dm.DmClob:
|
||||||
|
if t == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
l, err := t.GetLength()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
d.data, err = t.ReadString(1, int(l))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
d.valid = true
|
||||||
|
return nil
|
||||||
|
case []byte:
|
||||||
|
if t == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
d.data = string(t)
|
||||||
|
d.valid = true
|
||||||
|
return nil
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("cannot convert %T as dmClobScanner", data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (db *dameng) GetColumns(queryer core.Queryer, ctx context.Context, tableName string) ([]string, map[string]*schemas.Column, error) {
|
func (db *dameng) GetColumns(queryer core.Queryer, ctx context.Context, tableName string) ([]string, map[string]*schemas.Column, error) {
|
||||||
s := `select column_name from user_cons_columns
|
s := `select column_name from user_cons_columns
|
||||||
where constraint_name = (select constraint_name from user_constraints
|
where constraint_name = (select constraint_name from user_constraints
|
||||||
|
@ -716,7 +765,8 @@ func (db *dameng) GetColumns(queryer core.Queryer, ctx context.Context, tableNam
|
||||||
col := new(schemas.Column)
|
col := new(schemas.Column)
|
||||||
col.Indexes = make(map[string]int)
|
col.Indexes = make(map[string]int)
|
||||||
|
|
||||||
var colName, colDefault, nullable, dataType, dataPrecision, dataScale, comment sql.NullString
|
var colDefault dmClobScanner
|
||||||
|
var colName, nullable, dataType, dataPrecision, dataScale, comment sql.NullString
|
||||||
var dataLen sql.NullInt64
|
var dataLen sql.NullInt64
|
||||||
|
|
||||||
err = rows.Scan(&colName, &colDefault, &dataType, &dataLen, &dataPrecision,
|
err = rows.Scan(&colName, &colDefault, &dataType, &dataLen, &dataPrecision,
|
||||||
|
@ -730,8 +780,8 @@ func (db *dameng) GetColumns(queryer core.Queryer, ctx context.Context, tableNam
|
||||||
}
|
}
|
||||||
|
|
||||||
col.Name = strings.Trim(colName.String, `" `)
|
col.Name = strings.Trim(colName.String, `" `)
|
||||||
if colDefault.Valid {
|
if colDefault.valid {
|
||||||
col.Default = colDefault.String
|
col.Default = colDefault.data
|
||||||
col.DefaultIsEmpty = false
|
col.DefaultIsEmpty = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -747,7 +797,7 @@ func (db *dameng) GetColumns(queryer core.Queryer, ctx context.Context, tableNam
|
||||||
if pkName != "" && pkName == col.Name {
|
if pkName != "" && pkName == col.Name {
|
||||||
col.IsPrimaryKey = true
|
col.IsPrimaryKey = true
|
||||||
|
|
||||||
has, err := db.HasRecords(queryer, ctx, "SELECT * FROM USER_SEQUENCES WHERE SEQUENCE_NAME = ?", OracleSeqName(tableName))
|
has, err := db.HasRecords(queryer, ctx, "SELECT * FROM USER_SEQUENCES WHERE SEQUENCE_NAME = ?", DamengSeqName(tableName))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -254,7 +254,6 @@ func regDrvsNDialects() bool {
|
||||||
"sqlite": {"sqlite3", func() Driver { return &sqlite3Driver{} }, func() Dialect { return &sqlite3{} }},
|
"sqlite": {"sqlite3", func() Driver { return &sqlite3Driver{} }, func() Dialect { return &sqlite3{} }},
|
||||||
"oci8": {"oracle", func() Driver { return &oci8Driver{} }, func() Dialect { return &oracle{} }},
|
"oci8": {"oracle", func() Driver { return &oci8Driver{} }, func() Dialect { return &oracle{} }},
|
||||||
"godror": {"oracle", func() Driver { return &godrorDriver{} }, func() Dialect { return &oracle{} }},
|
"godror": {"oracle", func() Driver { return &godrorDriver{} }, func() Dialect { return &oracle{} }},
|
||||||
"dm": {"dameng", func() Driver { return &damengDriver{} }, func() Dialect { return &dameng{} }},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for driverName, v := range providedDrvsNDialects {
|
for driverName, v := range providedDrvsNDialects {
|
||||||
|
|
Loading…
Reference in New Issue