diff --git a/.drone.yml b/.drone.yml index 78c386cb..300c7841 100644 --- a/.drone.yml +++ b/.drone.yml @@ -190,30 +190,6 @@ steps: - push - pull_request -- name: test-mssql-nvarchar - pull: default - image: golang:1.12 - depends_on: - - test-mssql - environment: - GO111MODULE: "on" - GOPROXY: "https://goproxy.cn" - TEST_MSSQL_HOST: mssql - TEST_MSSQL_DBNAME: xorm_test - TEST_MSSQL_USERNAME: sa - TEST_MSSQL_PASSWORD: "yourStrong(!)Password" - TEST_MSSQL_DEFAULT_VARCHAR: nvarchar - TEST_MSSQL_DEFAULT_CHAR: nchar - commands: - - make test-mssql - - TEST_CACHE_ENABLE=true make test-mssql - - TEST_QUOTE_POLICY=reserved make test-mssql - - TEST_MSSQL_DEFAULT_VARCHAR=NVARCHAR TEST_MSSQL_DEFAULT_CHAR=NCHAR make test-mssql - when: - event: - - push - - pull_request - - name: test-tidb pull: default image: golang:1.12 diff --git a/Makefile b/Makefile index ed873883..092f23b3 100644 --- a/Makefile +++ b/Makefile @@ -22,6 +22,7 @@ TEST_MSSQL_USERNAME ?= sa TEST_MSSQL_PASSWORD ?= MwantsaSecurePassword1 TEST_MSSQL_DEFAULT_VARCHAR ?= varchar TEST_MSSQL_DEFAULT_CHAR ?= char +TEST_MSSQL_DO_NVARCHAR_OVERRIDE_TEST ?= true TEST_MYSQL_HOST ?= mysql:3306 TEST_MYSQL_CHARSET ?= utf8 @@ -147,6 +148,7 @@ test-mssql: go-check $(GO) test $(INTEGRATION_PACKAGES) -v -race -db=mssql -cache=$(TEST_CACHE_ENABLE) -quote=$(TEST_QUOTE_POLICY) \ -conn_str="server=$(TEST_MSSQL_HOST);user id=$(TEST_MSSQL_USERNAME);password=$(TEST_MSSQL_PASSWORD);database=$(TEST_MSSQL_DBNAME)" \ -default_varchar=$(TEST_MSSQL_DEFAULT_VARCHAR) -default_char=$(TEST_MSSQL_DEFAULT_CHAR) \ + -do_nvarchar_override_test=$(TEST_MSSQL_DO_NVARCHAR_OVERRIDE_TEST) \ -coverprofile=mssql.$(TEST_QUOTE_POLICY).$(TEST_CACHE_ENABLE).coverage.out -covermode=atomic .PNONY: test-mssql\#% @@ -154,6 +156,7 @@ test-mssql\#%: go-check $(GO) test $(INTEGRATION_PACKAGES) -v -race -run $* -db=mssql -cache=$(TEST_CACHE_ENABLE) -quote=$(TEST_QUOTE_POLICY) \ -conn_str="server=$(TEST_MSSQL_HOST);user id=$(TEST_MSSQL_USERNAME);password=$(TEST_MSSQL_PASSWORD);database=$(TEST_MSSQL_DBNAME)" \ -default_varchar=$(TEST_MSSQL_DEFAULT_VARCHAR) -default_char=$(TEST_MSSQL_DEFAULT_CHAR) \ + -do_nvarchar_override_test=$(TEST_MSSQL_DO_NVARCHAR_OVERRIDE_TEST) \ -coverprofile=mssql.$(TEST_QUOTE_POLICY).$(TEST_CACHE_ENABLE).coverage.out -covermode=atomic .PNONY: test-mymysql diff --git a/integrations/session_schema_test.go b/integrations/session_schema_test.go index e40bf3bf..d030c6a5 100644 --- a/integrations/session_schema_test.go +++ b/integrations/session_schema_test.go @@ -152,6 +152,61 @@ func TestSyncTable2(t *testing.T) { assert.EqualValues(t, colMapper.Obj2Table("NewCol"), tables[0].Columns()[3].Name) } +type SyncTable4 struct { + Id int64 + Name string + Text string `xorm:"TEXT"` + Char byte `xorm:"CHAR"` +} + +func (s *SyncTable4) TableName() string { + return "sync_table1" +} + +func TestSyncTable3(t *testing.T) { + assert.NoError(t, PrepareEngine()) + + assert.NoError(t, testEngine.Sync2(new(SyncTable4))) + + tables, err := testEngine.DBMetas() + assert.NoError(t, err) + assert.EqualValues(t, 1, len(tables)) + assert.EqualValues(t, "sync_table1", tables[0].Name) + tableInfo, err := testEngine.TableInfo(new(SyncTable4)) + assert.NoError(t, err) + assert.EqualValues(t, testEngine.Dialect().SQLType(tables[0].GetColumn("name")), testEngine.Dialect().SQLType(tableInfo.GetColumn("name"))) + + if *doNVarcharTest { + var oldDefaultVarchar string + var oldDefaultChar string + oldDefaultVarchar, *defaultVarchar = *defaultVarchar, "nvarchar" + oldDefaultChar, *defaultChar = *defaultChar, "nchar" + testEngine.Dialect().SetParams(map[string]string{ + "DEFAULT_VARCHAR": *defaultVarchar, + "DEFAULT_CHAR": *defaultChar, + }) + defer func() { + *defaultVarchar = oldDefaultVarchar + *defaultChar = oldDefaultChar + testEngine.Dialect().SetParams(map[string]string{ + "DEFAULT_VARCHAR": *defaultVarchar, + "DEFAULT_CHAR": *defaultChar, + }) + }() + assert.NoError(t, PrepareEngine()) + + assert.NoError(t, testEngine.Sync2(new(SyncTable4))) + + tables, err := testEngine.DBMetas() + assert.NoError(t, err) + assert.EqualValues(t, 1, len(tables)) + assert.EqualValues(t, "sync_table1", tables[0].Name) + tableInfo, err := testEngine.TableInfo(new(SyncTable4)) + assert.NoError(t, err) + assert.EqualValues(t, testEngine.Dialect().SQLType(tables[0].GetColumn("name")), testEngine.Dialect().SQLType(tableInfo.GetColumn("name"))) + } +} + func TestIsTableExist(t *testing.T) { assert.NoError(t, PrepareEngine()) diff --git a/integrations/tests.go b/integrations/tests.go index b135bd90..31fa99bf 100644 --- a/integrations/tests.go +++ b/integrations/tests.go @@ -35,6 +35,7 @@ var ( schema = flag.String("schema", "", "specify the schema") ignoreSelectUpdate = flag.Bool("ignore_select_update", false, "ignore select update if implementation difference, only for tidb") ingoreUpdateLimit = flag.Bool("ignore_update_limit", false, "ignore update limit if implementation difference, only for cockroach") + doNVarcharTest = flag.Bool("do_nvarchar_override_test", false, "do nvarchar override test in sync table, only for mssql") quotePolicyStr = flag.String("quote", "always", "quote could be always, none, reversed") defaultVarchar = flag.String("default_varchar", "varchar", "default varchar type, mssql only, could be varchar or nvarchar, default is varchar") defaultChar = flag.String("default_char", "char", "default char type, mssql only, could be char or nchar, default is char")