From 6f12712ad629a1bb225cf8b57ac4f1520022bc4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0tibran=C3=BD?= Date: Thu, 13 Mar 2025 16:38:05 +0100 Subject: [PATCH] Add Spanner dialect to pkg/storage/unified/sql/sqltemplate package. (#102121) --- .../unified/sql/sqltemplate/dialect.go | 2 ++ .../sql/sqltemplate/dialect_spanner.go | 32 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 pkg/storage/unified/sql/sqltemplate/dialect_spanner.go diff --git a/pkg/storage/unified/sql/sqltemplate/dialect.go b/pkg/storage/unified/sql/sqltemplate/dialect.go index 918545fdb25..0789ab7f214 100644 --- a/pkg/storage/unified/sql/sqltemplate/dialect.go +++ b/pkg/storage/unified/sql/sqltemplate/dialect.go @@ -24,6 +24,8 @@ func DialectForDriver(driverName string) Dialect { return PostgreSQL case "sqlite", "sqlite3": return SQLite + case "spanner": + return Spanner default: return nil } diff --git a/pkg/storage/unified/sql/sqltemplate/dialect_spanner.go b/pkg/storage/unified/sql/sqltemplate/dialect_spanner.go new file mode 100644 index 00000000000..4fba8375d3a --- /dev/null +++ b/pkg/storage/unified/sql/sqltemplate/dialect_spanner.go @@ -0,0 +1,32 @@ +package sqltemplate + +// Spanner is an implementation of Dialect for the Google Spanner database. +var Spanner = spanner{} + +var _ Dialect = Spanner + +type spanner struct{} + +func (s spanner) DialectName() string { + return "spanner" +} + +func (s spanner) Ident(a string) (string, error) { + return backtickIdent{}.Ident(a) +} + +func (s spanner) ArgPlaceholder(argNum int) string { + return argFmtSQL92.ArgPlaceholder(argNum) +} + +func (s spanner) SelectFor(a ...string) (string, error) { + return rowLockingClauseSpanner.SelectFor(a...) +} + +func (spanner) CurrentEpoch() string { + return "UNIX_MICROS(CURRENT_TIMESTAMP())" +} + +var rowLockingClauseSpanner = rowLockingClauseMap{ + SelectForUpdate: SelectForUpdate, +}