diff --git a/spanner/spannertest/db_test.go b/spanner/spannertest/db_test.go index 1cc53fcd06b..cd4d2291d81 100644 --- a/spanner/spannertest/db_test.go +++ b/spanner/spannertest/db_test.go @@ -714,3 +714,17 @@ func TestForeignKeyAddAndAlterConstraint(t *testing.T) { } } } + +func TestAddBackQuoteForHypen(t *testing.T) { + ddl, err := spansql.ParseDDL("filename", "ALTER DATABASE `test-db` SET OPTIONS (optimizer_version=4, version_retention_period = '7d', enable_key_visualizer=true)") + if err != nil { + t.Fatalf("%s: Bad DDL", err) + } + + got := ddl.List[0].SQL() + want := "ALTER DATABASE `test-db` SET OPTIONS (optimizer_version=4, version_retention_period='7d', enable_key_visualizer=true)" + + if !reflect.DeepEqual(got, want) { + t.Errorf("Generated SQL statement incorrect.\n got %v\nwant %v", got, want) + } +} diff --git a/spanner/spansql/sql.go b/spanner/spansql/sql.go index 2afda836e79..0afcc026131 100644 --- a/spanner/spansql/sql.go +++ b/spanner/spansql/sql.go @@ -701,7 +701,8 @@ func (id ID) addSQL(sb *strings.Builder) { // TODO: If there are non-letters/numbers/underscores then this also needs quoting. - if IsKeyword(string(id)) { + // Naming Convention: Must be enclosed in backticks (`) if it's a reserved keyword or contains a hyphen. + if IsKeyword(string(id)) || strings.Contains(string(id), "-") { // TODO: Escaping may be needed here. sb.WriteString("`") sb.WriteString(string(id))