t8y2--dbx
313 行
9.4 KiB
JSON
313 行
9.4 KiB
JSON
[
|
|
{
|
|
"name": "mysql qualified delete targets production database",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "DELETE FROM prod_app.users WHERE id = 1",
|
|
"active": true,
|
|
"isMutation": true,
|
|
"databases": ["prod_app"]
|
|
},
|
|
{
|
|
"name": "mysql use switch carries production target to unqualified mutation",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "USE `prod_app`; DELETE FROM users WHERE id = 1",
|
|
"active": true,
|
|
"isMutation": true,
|
|
"databases": ["prod_app"]
|
|
},
|
|
{
|
|
"name": "mysql executable comment can contain a production delete",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "/*! DELETE FROM prod_app.users WHERE id = 1 */",
|
|
"active": true,
|
|
"isMutation": true,
|
|
"databases": ["prod_app"]
|
|
},
|
|
{
|
|
"name": "mysql qualified procedure call targets production database",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "CALL prod_app.purge_users()",
|
|
"active": true,
|
|
"isMutation": true,
|
|
"databases": ["prod_app"]
|
|
},
|
|
{
|
|
"name": "mysql qualified grant targets production database",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "GRANT ALL ON prod_app.* TO 'u'@'%'",
|
|
"active": true,
|
|
"isMutation": true,
|
|
"databases": ["prod_app"]
|
|
},
|
|
{
|
|
"name": "mysql unqualified procedure call is ambiguous with production markers",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "CALL purge_users()",
|
|
"active": true,
|
|
"isMutation": true,
|
|
"databases": ["prod_app"]
|
|
},
|
|
{
|
|
"name": "mysql global privilege statement is ambiguous with production markers",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "GRANT PROCESS ON *.* TO 'u'@'%'",
|
|
"active": true,
|
|
"isMutation": true,
|
|
"databases": ["prod_app"]
|
|
},
|
|
{
|
|
"name": "mysql non-production procedure target does not trip production marker",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "CALL staging.purge_users()",
|
|
"active": false,
|
|
"isMutation": true,
|
|
"databases": []
|
|
},
|
|
{
|
|
"name": "mysql non-production privilege target does not trip production marker",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "GRANT ALL ON staging.* TO 'u'@'%'",
|
|
"active": false,
|
|
"isMutation": true,
|
|
"databases": []
|
|
},
|
|
{
|
|
"name": "mysql unqualified table DML resolves to the selected non-production database",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "UPDATE users SET active = 1 WHERE id = 1",
|
|
"active": false,
|
|
"isMutation": true,
|
|
"databases": []
|
|
},
|
|
{
|
|
"name": "mysql repeated unqualified table DML resolves per statement",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "UPDATE users SET active = 1 WHERE id = 1; DELETE FROM users WHERE id = 2",
|
|
"active": false,
|
|
"isMutation": true,
|
|
"databases": []
|
|
},
|
|
{
|
|
"name": "mysql unknown mutation without a resolved target is conservatively confirmed",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "MAINTAIN UNKNOWN THING",
|
|
"active": true,
|
|
"isMutation": true,
|
|
"databases": ["prod_app"]
|
|
},
|
|
{
|
|
"name": "mysql transaction statement does not target a production database",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "BEGIN",
|
|
"active": false,
|
|
"isMutation": true,
|
|
"databases": []
|
|
},
|
|
{
|
|
"name": "mysql qualified rename table source and destination target production database",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "RENAME TABLE prod_app.old_name TO prod_app.new_name",
|
|
"active": true,
|
|
"isMutation": true,
|
|
"databases": ["prod_app"]
|
|
},
|
|
{
|
|
"name": "mysql rename table into production database is detected",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "RENAME TABLE staging.old_name TO prod_app.new_name",
|
|
"active": true,
|
|
"isMutation": true,
|
|
"databases": ["prod_app"]
|
|
},
|
|
{
|
|
"name": "mysql resolved non-production rename table target stays non-production",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "RENAME TABLE staging.old_name TO staging.new_name",
|
|
"active": false,
|
|
"isMutation": true,
|
|
"databases": []
|
|
},
|
|
{
|
|
"name": "mysql multi-target rename conservatively protects unresolved production target",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "RENAME TABLE staging.a TO staging.b, prod_app.c TO prod_app.d",
|
|
"active": true,
|
|
"isMutation": true,
|
|
"databases": ["prod_app"]
|
|
},
|
|
{
|
|
"name": "mysql multi-target drop conservatively protects unresolved production target",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "DROP TABLE staging.a, prod_app.b",
|
|
"active": true,
|
|
"isMutation": true,
|
|
"databases": ["prod_app"]
|
|
},
|
|
{
|
|
"name": "mysql qualified truncate table targets production database",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "TRUNCATE TABLE prod_app.users",
|
|
"active": true,
|
|
"isMutation": true,
|
|
"databases": ["prod_app"]
|
|
},
|
|
{
|
|
"name": "mysql resolved non-production truncate table target stays non-production",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "TRUNCATE TABLE staging.users",
|
|
"active": false,
|
|
"isMutation": true,
|
|
"databases": []
|
|
},
|
|
{
|
|
"name": "mysql optimize table targets production database",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "OPTIMIZE TABLE prod_app.users",
|
|
"active": true,
|
|
"isMutation": true,
|
|
"databases": ["prod_app"]
|
|
},
|
|
{
|
|
"name": "mysql analyze table targets production database",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "ANALYZE TABLE prod_app.users",
|
|
"active": true,
|
|
"isMutation": true,
|
|
"databases": ["prod_app"]
|
|
},
|
|
{
|
|
"name": "mysql repair table targets production database",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "REPAIR TABLE prod_app.users",
|
|
"active": true,
|
|
"isMutation": true,
|
|
"databases": ["prod_app"]
|
|
},
|
|
{
|
|
"name": "mysql check table resolves to selected non-production database",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "CHECK TABLE users",
|
|
"active": false,
|
|
"isMutation": true,
|
|
"databases": []
|
|
},
|
|
{
|
|
"name": "mysql read-only production reference before staging write stays non-production",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "SELECT * FROM prod_app.orders; DELETE FROM staging.users WHERE id = 1",
|
|
"active": false,
|
|
"isMutation": true,
|
|
"databases": []
|
|
},
|
|
{
|
|
"name": "mysql quoted unicode database target is preserved",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["生产库"],
|
|
"activeDatabase": "staging",
|
|
"sql": "DELETE FROM `生产库`.users WHERE id = 1",
|
|
"active": true,
|
|
"isMutation": true,
|
|
"databases": ["生产库"]
|
|
},
|
|
{
|
|
"name": "mysql quoted database containing spaces is preserved in privilege target",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "GRANT ALL ON `prod app`.* TO 'u'@'%'",
|
|
"active": true,
|
|
"isMutation": true,
|
|
"databases": ["prod app"]
|
|
},
|
|
{
|
|
"name": "mysql quoted routine target with unicode database is preserved",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["生产库"],
|
|
"activeDatabase": "staging",
|
|
"sql": "CALL `生产库`.`purge users`()",
|
|
"active": true,
|
|
"isMutation": true,
|
|
"databases": ["生产库"]
|
|
},
|
|
{
|
|
"name": "mysql quoted database containing dot is not split as a qualifier",
|
|
"dialect": "mysql",
|
|
"productionDatabases": ["prod.app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "DROP DATABASE IF EXISTS `prod.app`",
|
|
"active": true,
|
|
"isMutation": true,
|
|
"databases": ["prod.app"]
|
|
},
|
|
{
|
|
"name": "sqlserver three-part table name resolves production database",
|
|
"dialect": "sqlserver",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "DELETE FROM prod_app.dbo.users WHERE id = 1",
|
|
"active": true,
|
|
"isMutation": true,
|
|
"databases": ["prod_app"]
|
|
},
|
|
{
|
|
"name": "sqlserver two-part table name is schema-qualified, not database-qualified",
|
|
"dialect": "sqlserver",
|
|
"productionDatabases": ["prod_app"],
|
|
"activeDatabase": "staging",
|
|
"sql": "DELETE FROM prod_app.users WHERE id = 1",
|
|
"active": false,
|
|
"isMutation": true,
|
|
"databases": []
|
|
}
|
|
]
|