From 6dfc62a8f8222e0218b06a0660fc25765a2a2f8c Mon Sep 17 00:00:00 2001 From: Deepak-dash007 <63140413+Deepak-dash007@users.noreply.github.com> Date: Sat, 16 Mar 2024 16:14:05 +0530 Subject: [PATCH] Update: ensureVersionTable & ensureLockTable removing select query on information_schema tables. Such query are expensive ones. --- database/cockroachdb/cockroachdb.go | 28 ++++------------------------ 1 file changed, 4 insertions(+), 24 deletions(-) diff --git a/database/cockroachdb/cockroachdb.go b/database/cockroachdb/cockroachdb.go index 699b3facd..9e680058c 100644 --- a/database/cockroachdb/cockroachdb.go +++ b/database/cockroachdb/cockroachdb.go @@ -326,18 +326,8 @@ func (c *CockroachDb) ensureVersionTable() (err error) { } }() - // check if migration table exists - var count int - query := `SELECT COUNT(1) FROM information_schema.tables WHERE table_name = $1 AND table_schema = (SELECT current_schema()) LIMIT 1` - if err := c.db.QueryRow(query, c.config.MigrationsTable).Scan(&count); err != nil { - return &database.Error{OrigErr: err, Query: []byte(query)} - } - if count == 1 { - return nil - } - - // if not, create the empty migration table - query = `CREATE TABLE "` + c.config.MigrationsTable + `" (version INT NOT NULL PRIMARY KEY, dirty BOOL NOT NULL)` + // create table query is idempotent. + query := `CREATE TABLE IF NOT EXISTS "` + c.config.MigrationsTable + `" (version INT NOT NULL PRIMARY KEY, dirty BOOL NOT NULL)` if _, err := c.db.Exec(query); err != nil { return &database.Error{OrigErr: err, Query: []byte(query)} } @@ -345,18 +335,8 @@ func (c *CockroachDb) ensureVersionTable() (err error) { } func (c *CockroachDb) ensureLockTable() error { - // check if lock table exists - var count int - query := `SELECT COUNT(1) FROM information_schema.tables WHERE table_name = $1 AND table_schema = (SELECT current_schema()) LIMIT 1` - if err := c.db.QueryRow(query, c.config.LockTable).Scan(&count); err != nil { - return &database.Error{OrigErr: err, Query: []byte(query)} - } - if count == 1 { - return nil - } - - // if not, create the empty lock table - query = `CREATE TABLE "` + c.config.LockTable + `" (lock_id INT NOT NULL PRIMARY KEY)` + // create table query is idempotent. + query := `CREATE TABLE IF NOT EXISTS "` + c.config.LockTable + `" (lock_id INT NOT NULL PRIMARY KEY)` if _, err := c.db.Exec(query); err != nil { return &database.Error{OrigErr: err, Query: []byte(query)} }