diff --git a/sources/common/dbdump.go b/sources/common/dbdump.go index 71740fbe85..280ff2dc7a 100644 --- a/sources/common/dbdump.go +++ b/sources/common/dbdump.go @@ -42,7 +42,7 @@ func ProcessDbDump(conv *internal.Conv, r *internal.Reader, dbDump DbDump, ddlVe ExpressionVerificationAccessor: exprVerifier, DdlV: ddlVerifier, } - schemaToSpanner.SchemaToSpannerDDL(conv, dbDump.GetToDdl()) + schemaToSpanner.SchemaToSpannerDDL(conv, dbDump.GetToDdl(), internal.AdditionalSchemaAttributes{}) conv.AddPrimaryKeys() } return nil diff --git a/sources/common/infoschema.go b/sources/common/infoschema.go index ae43ea4a07..6dfc9e15fd 100644 --- a/sources/common/infoschema.go +++ b/sources/common/infoschema.go @@ -89,15 +89,11 @@ func (ps *ProcessSchemaImpl) ProcessSchema(conv *internal.Conv, infoSchema InfoS } uo.initPrimaryKeyOrder(conv) uo.initIndexOrder(conv) - s.SchemaToSpannerDDL(conv, infoSchema.GetToDdl()) + s.SchemaToSpannerDDL(conv, infoSchema.GetToDdl(), attributes) if tableCount != len(conv.SpSchema) { fmt.Printf("Failed to load all the source tables, source table count: %v, processed tables:%v. Please retry connecting to the source database to load tables.\n", tableCount, len(conv.SpSchema)) return fmt.Errorf("failed to load all the source tables, source table count: %v, processed tables:%v. Please retry connecting to the source database to load tables.", tableCount, len(conv.SpSchema)) } - conv.AddPrimaryKeys() - if attributes.IsSharded { - conv.AddShardIdColumn() - } fmt.Println("loaded schema") return nil } diff --git a/sources/common/toddl.go b/sources/common/toddl.go index 1dd51b6765..de9916a459 100644 --- a/sources/common/toddl.go +++ b/sources/common/toddl.go @@ -54,7 +54,7 @@ type ToDdl interface { } type SchemaToSpannerInterface interface { - SchemaToSpannerDDL(conv *internal.Conv, toddl ToDdl) error + SchemaToSpannerDDL(conv *internal.Conv, toddl ToDdl, attributes internal.AdditionalSchemaAttributes) error SchemaToSpannerDDLHelper(conv *internal.Conv, toddl ToDdl, srcTable schema.Table, isRestore bool) error SchemaToSpannerSequenceHelper(conv *internal.Conv, srcSequence ddl.Sequence) error } @@ -75,7 +75,7 @@ var ErrorTypeMapping = map[string]internal.SchemaIssue{ // SchemaToSpannerDDL performs schema conversion from the source DB schema to // Spanner. It uses the source schema in conv.SrcSchema, and writes // the Spanner schema to conv.SpSchema. -func (ss *SchemaToSpannerImpl) SchemaToSpannerDDL(conv *internal.Conv, toddl ToDdl) error { +func (ss *SchemaToSpannerImpl) SchemaToSpannerDDL(conv *internal.Conv, toddl ToDdl, attributes internal.AdditionalSchemaAttributes) error { srcSequences := conv.SrcSequences for _, srcSequence := range srcSequences { ss.SchemaToSpannerSequenceHelper(conv, srcSequence) @@ -86,6 +86,11 @@ func (ss *SchemaToSpannerImpl) SchemaToSpannerDDL(conv *internal.Conv, toddl ToD ss.SchemaToSpannerDDLHelper(conv, toddl, srcTable, false) } + conv.AddPrimaryKeys() + if attributes.IsSharded { + conv.AddShardIdColumn() + } + if (conv.Source == constants.MYSQL || conv.Source == constants.MYSQLDUMP) && conv.SpProjectId != "" && conv.SpInstanceId != "" { // Process and verify Check constraints for MySQL and MySQLDump flow only err := ss.VerifyExpressions(conv) diff --git a/sources/dynamodb/toddl_test.go b/sources/dynamodb/toddl_test.go index b316108e17..5f3554faf5 100644 --- a/sources/dynamodb/toddl_test.go +++ b/sources/dynamodb/toddl_test.go @@ -74,7 +74,7 @@ func TestToSpannerType(t *testing.T) { ExpressionVerificationAccessor: mockAccessor, DdlV: &expressions_api.MockDDLVerifier{}, } - assert.Nil(t, schemaToSpanner.SchemaToSpannerDDL(conv, ToDdlImpl{})) + assert.Nil(t, schemaToSpanner.SchemaToSpannerDDL(conv, ToDdlImpl{}, internal.AdditionalSchemaAttributes{})) actual := conv.SpSchema[name] dropComments(&actual) // Don't test comment. expected := ddl.CreateTable{ @@ -146,7 +146,7 @@ func TestToSpannerPostgreSQLDialectType(t *testing.T) { ExpressionVerificationAccessor: mockAccessor, DdlV: &expressions_api.MockDDLVerifier{}, } - assert.Nil(t, schemaToSpanner.SchemaToSpannerDDL(conv, ToDdlImpl{})) + assert.Nil(t, schemaToSpanner.SchemaToSpannerDDL(conv, ToDdlImpl{}, internal.AdditionalSchemaAttributes{})) actual := conv.SpSchema["t1"] dropComments(&actual) // Don't test comment. expected := ddl.CreateTable{ diff --git a/sources/mysql/toddl_test.go b/sources/mysql/toddl_test.go index 713efb0f45..881cd8da69 100644 --- a/sources/mysql/toddl_test.go +++ b/sources/mysql/toddl_test.go @@ -192,7 +192,7 @@ func TestToSpannerType(t *testing.T) { ExpressionVerificationAccessor: mockAccessor, DdlV: &expressions_api.MockDDLVerifier{}, } - assert.Nil(t, schemaToSpanner.SchemaToSpannerDDL(conv, ToDdlImpl{})) + assert.Nil(t, schemaToSpanner.SchemaToSpannerDDL(conv, ToDdlImpl{}, internal.AdditionalSchemaAttributes{})) actual := conv.SpSchema[tableId] dropComments(&actual) // Don't test comment. expected := ddl.CreateTable{ @@ -296,7 +296,7 @@ func TestToSpannerPostgreSQLDialectType(t *testing.T) { ExpressionVerificationAccessor: mockAccessor, DdlV: &expressions_api.MockDDLVerifier{}, } - assert.Nil(t, schemaToSpanner.SchemaToSpannerDDL(conv, ToDdlImpl{})) + assert.Nil(t, schemaToSpanner.SchemaToSpannerDDL(conv, ToDdlImpl{}, internal.AdditionalSchemaAttributes{})) actual := conv.SpSchema[tableId] dropComments(&actual) // Don't test comment. expected := ddl.CreateTable{ diff --git a/sources/oracle/toddl_test.go b/sources/oracle/toddl_test.go index 07391a7eab..2470373b37 100644 --- a/sources/oracle/toddl_test.go +++ b/sources/oracle/toddl_test.go @@ -182,7 +182,7 @@ func TestToSpannerType(t *testing.T) { ExpressionVerificationAccessor: mockAccessor, DdlV: &expressions_api.MockDDLVerifier{}, } - assert.Nil(t, schemaToSpanner.SchemaToSpannerDDL(conv, ToDdlImpl{})) + assert.Nil(t, schemaToSpanner.SchemaToSpannerDDL(conv, ToDdlImpl{}, internal.AdditionalSchemaAttributes{})) actual := conv.SpSchema[tableId] dropComments(&actual) // Don't test comment. expected := ddl.CreateTable{ @@ -285,7 +285,7 @@ func TestToSpannerPostgreSQLDialectType(t *testing.T) { ExpressionVerificationAccessor: mockAccessor, DdlV: &expressions_api.MockDDLVerifier{}, } - assert.Nil(t, schemaToSpanner.SchemaToSpannerDDL(conv, ToDdlImpl{})) + assert.Nil(t, schemaToSpanner.SchemaToSpannerDDL(conv, ToDdlImpl{}, internal.AdditionalSchemaAttributes{})) actual := conv.SpSchema[tableId] dropComments(&actual) // Don't test comment. expected := ddl.CreateTable{ diff --git a/sources/postgres/toddl_test.go b/sources/postgres/toddl_test.go index 5174c9dfe3..67314aab5b 100644 --- a/sources/postgres/toddl_test.go +++ b/sources/postgres/toddl_test.go @@ -183,7 +183,7 @@ func TestToSpannerType(t *testing.T) { DdlV: &expressions_api.MockDDLVerifier{}, ExpressionVerificationAccessor: mockAccessor, } - assert.Nil(t, schemaToSpanner.SchemaToSpannerDDL(conv, ToDdlImpl{})) + assert.Nil(t, schemaToSpanner.SchemaToSpannerDDL(conv, ToDdlImpl{}, internal.AdditionalSchemaAttributes{})) actual := conv.SpSchema[tableId] dropComments(&actual) // Don't test comment. expected := ddl.CreateTable{ @@ -282,7 +282,7 @@ func TestToExperimentalSpannerType(t *testing.T) { ExpressionVerificationAccessor: mockAccessor, DdlV: &expressions_api.MockDDLVerifier{}, } - assert.Nil(t, schemaToSpanner.SchemaToSpannerDDL(conv, ToDdlImpl{})) + assert.Nil(t, schemaToSpanner.SchemaToSpannerDDL(conv, ToDdlImpl{}, internal.AdditionalSchemaAttributes{})) actual := conv.SpSchema[tableId] dropComments(&actual) // Don't test comment. expected := ddl.CreateTable{ diff --git a/sources/sqlserver/toddl_test.go b/sources/sqlserver/toddl_test.go index 2dee591eb5..8e22ddea51 100644 --- a/sources/sqlserver/toddl_test.go +++ b/sources/sqlserver/toddl_test.go @@ -188,7 +188,7 @@ func TestToSpannerType(t *testing.T) { ExpressionVerificationAccessor: mockAccessor, DdlV: &expressions_api.MockDDLVerifier{}, } - assert.Nil(t, schemaToSpanner.SchemaToSpannerDDL(conv, ToDdlImpl{})) + assert.Nil(t, schemaToSpanner.SchemaToSpannerDDL(conv, ToDdlImpl{}, internal.AdditionalSchemaAttributes{})) actual := conv.SpSchema[tableId] dropComments(&actual) // Don't test comment. expected := ddl.CreateTable{ @@ -302,7 +302,7 @@ func TestToSpannerPostgreSQLDialectType(t *testing.T) { ExpressionVerificationAccessor: mockAccessor, DdlV: &expressions_api.MockDDLVerifier{}, } - assert.Nil(t, schemaToSpanner.SchemaToSpannerDDL(conv, ToDdlImpl{})) + assert.Nil(t, schemaToSpanner.SchemaToSpannerDDL(conv, ToDdlImpl{}, internal.AdditionalSchemaAttributes{})) actual := conv.SpSchema[tableId] dropComments(&actual) // Don't test comment. expected := ddl.CreateTable{ diff --git a/testing/postgres/golden_test.go b/testing/postgres/golden_test.go index 1955f1b436..a90f7c9c91 100644 --- a/testing/postgres/golden_test.go +++ b/testing/postgres/golden_test.go @@ -67,7 +67,7 @@ func TestGoldens(t *testing.T) { t.Fatalf("error when processing dump %s: %s", tc.Input, err) } - err = schemaToSpanner.SchemaToSpannerDDL(conv, postgres.ToDdlImpl{}) + err = schemaToSpanner.SchemaToSpannerDDL(conv, postgres.ToDdlImpl{}, internal.AdditionalSchemaAttributes{}) if err != nil { t.Fatalf("error when converting schema to spanner ddl %s: %s", tc.Input, err) }