From 68507125076fb068c3abaad60e83211ec9e99cc4 Mon Sep 17 00:00:00 2001 From: lunny Date: Fri, 20 Dec 2013 18:18:20 +0800 Subject: [PATCH] mssql bug fixed --- mssql.go | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/mssql.go b/mssql.go index a195d7f0..0f4bf5e4 100644 --- a/mssql.go +++ b/mssql.go @@ -16,16 +16,30 @@ type mssql struct { quoteFilter Filter } -type mssqlParser struct { +type odbcParser struct { } -func (p *mssqlParser) parse(driverName, dataSourceName string) (*uri, error) { - return &uri{dbName: "xorm_test", dbType: MSSQL}, nil +func (p *odbcParser) parse(driverName, dataSourceName string) (*uri, error) { + kv := strings.Split(dataSourceName, ";") + var dbName string + for _, c := range kv { + vv := strings.Split(strings.TrimSpace(c), "=") + if len(vv) == 2 { + switch strings.ToLower(vv[0]) { + case "database": + dbName = vv[1] + } + } + } + if dbName == "" { + return nil, errors.New("no db name provided") + } + return &uri{dbName: dbName, dbType: MSSQL}, nil } func (db *mssql) Init(drivername, uri string) error { db.quoteFilter = &QuoteFilter{} - return db.base.init(&mssqlParser{}, drivername, uri) + return db.base.init(&odbcParser{}, drivername, uri) } func (db *mssql) SqlType(c *Column) string { @@ -153,7 +167,7 @@ where a.object_id=object_id('` + tableName + `')` if _, ok := sqlTypes[ct]; ok { col.SQLType = SQLType{ct, 0, 0} } else { - return nil, nil, errors.New(fmt.Sprintf("unknow colType %v", ct)) + return nil, nil, errors.New(fmt.Sprintf("unknow colType %v for %v", ct, col)) } }