Skip to content

Commit

Permalink
🎨 Add IF NOT EXISTS to INFORMATION_SCHEMA views
Browse files Browse the repository at this point in the history
To ensure the init func will not fail if a view was already created
  • Loading branch information
julien040 committed Jun 21, 2024
1 parent 0b08c6d commit a3de328
Showing 1 changed file with 22 additions and 22 deletions.
44 changes: 22 additions & 22 deletions namespace/mysql_information_schema.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ func prepareDatabaseForMySQL(db *sql.DB) error {

// We create views that will be used to retrive collations, tables, columns, constraints and views
_, err = db.Exec(`
CREATE VIEW INFORMATION_SCHEMA.COLLATIONS AS
CREATE VIEW IF NOT EXISTS INFORMATION_SCHEMA.COLLATIONS AS
SELECT
column1 AS COLLATION_NAME,
column2 AS CHARACTER_SET_NAME,
Expand Down Expand Up @@ -68,7 +68,7 @@ func prepareDatabaseForMySQL(db *sql.DB) error {
}

_, err = db.Exec(`
CREATE VIEW INFORMATION_SCHEMA.PARTITIONS AS SELECT
CREATE VIEW IF NOT EXISTS INFORMATION_SCHEMA.PARTITIONS AS SELECT
"def" AS TABLE_CATALOG,
tl.schema AS TABLE_SCHEMA,
tl.name AS TABLE_NAME,
Expand Down Expand Up @@ -136,7 +136,7 @@ func prepareDatabaseForMySQL(db *sql.DB) error {
-- INFORMATION_SCHEMA.COLUMNS
CREATE VIEW INFORMATION_SCHEMA.COLUMNS AS WITH RECURSIVE table_list AS (
CREATE VIEW IF NOT EXISTS INFORMATION_SCHEMA.COLUMNS AS WITH RECURSIVE table_list AS (
SELECT name, schema
FROM pragma_table_list()
UNION
Expand Down Expand Up @@ -212,7 +212,7 @@ SELECT * FROM table_info;`)
}

_, err = db.Exec(`
CREATE VIEW INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS WITH RECURSIVE table_list AS (
CREATE VIEW IF NOT EXISTS INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS WITH RECURSIVE table_list AS (
SELECT name, schema
FROM pragma_table_list()
WHERE "type" = 'table'
Expand All @@ -239,7 +239,7 @@ SELECT * FROM table_info;`)
SELECT * FROM table_info;
-- INFORMATION_SCHEMA.TABLES
CREATE VIEW INFORMATION_SCHEMA.TABLES AS SELECT
CREATE VIEW IF NOT EXISTS INFORMATION_SCHEMA.TABLES AS SELECT
"def" AS TABLE_CATALOG,
tl.schema AS TABLE_SCHEMA,
tl.name AS TABLE_NAME,
Expand Down Expand Up @@ -300,7 +300,7 @@ SELECT * FROM table_info;`)
}

_, err = db.Exec(`
CREATE VIEW INFORMATION_SCHEMA.VIEWS AS SELECT
CREATE VIEW IF NOT EXISTS INFORMATION_SCHEMA.VIEWS AS SELECT
'def' AS TABLE_CATALOG,
tl.schema AS TABLE_SCHEMA,
tl.name AS TABLE_NAME,
Expand All @@ -316,7 +316,7 @@ SELECT * FROM table_info;`)
pragma_table_list tl
WHERE tl.type = 'view';
CREATE VIEW INFORMATION_SCHEMA.STATISTICS AS WITH RECURSIVE table_list AS (
CREATE VIEW IF NOT EXISTS INFORMATION_SCHEMA.STATISTICS AS WITH RECURSIVE table_list AS (
SELECT name, schema
FROM pragma_table_list()
WHERE "type" = 'table'
Expand Down Expand Up @@ -354,7 +354,7 @@ SELECT * FROM table_info;`)
CREATE VIEW INFORMATION_SCHEMA.SCHEMATA AS SELECT
CREATE VIEW IF NOT EXISTS INFORMATION_SCHEMA.SCHEMATA AS SELECT
'def' AS TABLE_CATALOG,
name AS SCHEMA_NAME,
'utf8mb3' AS DEFAULT_CHARACTER_SET_NAME,
Expand All @@ -363,7 +363,7 @@ SELECT * FROM table_info;`)
'NO' AS DEFAULT_ENCRYPTION
FROM pragma_database_list();
CREATE VIEW INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS WITH RECURSIVE table_list AS (
CREATE VIEW IF NOT EXISTS INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS WITH RECURSIVE table_list AS (
SELECT name, schema
FROM pragma_table_list()
WHERE "type" = 'table'
Expand Down Expand Up @@ -398,14 +398,14 @@ SELECT * FROM table_info;`)
return fmt.Errorf("error creating view INFORMATION_SCHEMA.VIEWS: %w", err)
}

_, err = db.Exec(`CREATE VIEW dual AS SELECT 'x' AS dummy;`)
_, err = db.Exec(`CREATE VIEW IF NOT EXISTS dual AS SELECT 'x' AS dummy;`)
if err != nil {
return err
}

// Those views are empty but created so that SQLite does not return a missing table error
_, err = db.Exec(`
/*CREATE VIEW INFORMATION_SCHEMA.STATISTICS AS
CREATE VIEW IF NOT EXISTS INFORMATION_SCHEMA.STATISTICS AS
SELECT
'' AS TABLE_CATALOG,
'' AS TABLE_SCHEMA,
Expand All @@ -425,9 +425,9 @@ SELECT * FROM table_info;`)
'' AS INDEX_COMMENT,
'YES' AS IS_VISIBLE,
NULL AS EXPRESSION
WHERE FALSE;*/
WHERE FALSE;
CREATE VIEW INFORMATION_SCHEMA.TRIGGERS AS
CREATE VIEW IF NOT EXISTS INFORMATION_SCHEMA.TRIGGERS AS
SELECT
'' AS TRIGGER_CATALOG,
'' AS TRIGGER_SCHEMA,
Expand All @@ -454,7 +454,7 @@ SELECT * FROM table_info;`)
WHERE FALSE;
CREATE VIEW INFORMATION_SCHEMA.ROUTINES AS
CREATE VIEW IF NOT EXISTS INFORMATION_SCHEMA.ROUTINES AS
SELECT
'' AS SPECIFIC_NAME,
'' AS ROUTINE_CATALOG,
Expand Down Expand Up @@ -489,7 +489,7 @@ SELECT * FROM table_info;`)
'' AS DATABASE_COLLATION
WHERE FALSE;
CREATE VIEW INFORMATION_SCHEMA.EVENTS AS
CREATE VIEW IF NOT EXISTS INFORMATION_SCHEMA.EVENTS AS
SELECT
'' AS EVENT_CATALOG,
'' AS EVENT_SCHEMA,
Expand Down Expand Up @@ -517,7 +517,7 @@ SELECT * FROM table_info;`)
'' AS DATABASE_COLLATION
WHERE FALSE;
CREATE VIEW INFORMATION_SCHEMA.TABLE_PRIVILEGES AS
CREATE VIEW IF NOT EXISTS INFORMATION_SCHEMA.TABLE_PRIVILEGES AS
SELECT
'' AS GRANTEE,
'' AS TABLE_CATALOG,
Expand All @@ -527,7 +527,7 @@ SELECT * FROM table_info;`)
'' AS IS_GRANTABLE
WHERE FALSE;
CREATE VIEW INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS
CREATE VIEW IF NOT EXISTS INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS
SELECT
'' AS CONSTRAINT_CATALOG,
'' AS CONSTRAINT_SCHEMA,
Expand All @@ -542,7 +542,7 @@ SELECT * FROM table_info;`)
'' AS REFERENCED_TABLE_NAME
WHERE FALSE;
CREATE VIEW INFORMATION_SCHEMA.COLUMN_PRIVILEGES AS
CREATE VIEW IF NOT EXISTS INFORMATION_SCHEMA.COLUMN_PRIVILEGES AS
SELECT
'' AS GRANTEE,
'' AS TABLE_CATALOG,
Expand All @@ -553,15 +553,15 @@ SELECT * FROM table_info;`)
'' AS IS_GRANTABLE
WHERE FALSE;
CREATE VIEW INFORMATION_SCHEMA.USER_PRIVILEGES AS
CREATE VIEW IF NOT EXISTS INFORMATION_SCHEMA.USER_PRIVILEGES AS
SELECT
'' AS GRANTEE,
'' AS TABLE_CATALOG,
'' AS PRIVILEGE_TYPE,
'NO' AS IS_GRANTABLE
WHERE FALSE;
CREATE VIEW INFORMATION_SCHEMA.SCHEMA_PRIVILEGES AS
CREATE VIEW IF NOT EXISTS INFORMATION_SCHEMA.SCHEMA_PRIVILEGES AS
SELECT
'' AS GRANTEE,
'' AS TABLE_CATALOG,
Expand All @@ -582,7 +582,7 @@ SELECT * FROM table_info;`)
}

_, err = db.Exec(`
CREATE VIEW mysql.user AS SELECT
CREATE VIEW IF NOT EXISTS mysql.user AS SELECT
column1 AS Host,
column2 AS User,
column3 AS Select_priv,
Expand Down Expand Up @@ -648,7 +648,7 @@ SELECT * FROM table_info;`)
NULL, NULL, NULL, NULL));
CREATE VIEW mysql.procs_priv AS SELECT
CREATE VIEW IF NOT EXISTS mysql.procs_priv AS SELECT
'' AS Host,
'' AS Db,
'' AS User,
Expand Down

0 comments on commit a3de328

Please sign in to comment.