function submit_script_for_propagation($script_sql_code, $script_description, $database_role, $deployment_environments, $default_schema, $auth_user, $credentials) { $script_sql_code = trim($script_sql_code); if (empty($database_role)) { throw new Exception("Got empty database role"); } if (!in_array($database_role, $this->get_database_role_ids())) { throw new Exception("Unknown database role: " . $database_role); } $queries = parse_script_queries($script_sql_code); if (empty($queries)) { throw new Exception("No queries found in script"); } $script_description = trim($script_description); if (empty($script_description)) { throw new Exception("Description is mandatory"); } $propagate_script_id = $this->get_database()->insert("propagate_script", array("submitted_by" => $auth_user, "database_role_id" => $database_role, "default_schema" => $default_schema, "sql_code" => $script_sql_code, "description" => trim($script_description))); $this->get_database()->query("\n update\n propagate_script\n set\n checksum = " . $this->get_database()->quote(checksum_query($script_sql_code)) . "\n where\n propagate_script_id = " . $this->get_database()->quote($propagate_script_id) . "\n "); foreach ($queries as $query) { $this->get_database()->insert("propagate_script_query", array("propagate_script_id" => $propagate_script_id, "sql_code" => $query)); } $this->submit_script_for_propagation_on_environments($propagate_script_id, $this->get_database_role($database_role), $deployment_environments, $default_schema, $auth_user, $credentials, false); return $propagate_script_id; }
public function testParseScriptQueriesWithQuotedDelimiterAndEscapedQuotes() { $script = "select 1; select 2; select '', 'it''s', 'another \\'escaped;\\' text', 'try;this'; select 4"; $queries = parse_script_queries($script); $this->assertEquals(4, count($queries)); $this->assertEquals("select '', 'it''s', 'another \\'escaped;\\' text', 'try;this'", $queries[2]); }