Fix #18495 - Exporting procedures and triggers
Ref:38a4328184Reverts:5a2baf607fSigned-off-by: William Desportes <williamdes@wdes.fr>
This commit is contained in:
parent
38a4328184
commit
fc98aff6d3
@ -555,6 +555,7 @@ class ExportSql extends ExportPlugin
|
||||
}
|
||||
|
||||
$createQuery = $this->replaceWithAliases(
|
||||
$delimiter,
|
||||
$dbi->getDefinition($db, $type, $routine),
|
||||
$aliases,
|
||||
$db,
|
||||
@ -1602,7 +1603,7 @@ class ExportSql extends ExportPlugin
|
||||
}
|
||||
|
||||
// Substitute aliases in `CREATE` query.
|
||||
$createQuery = $this->replaceWithAliases($createQuery, $aliases, $db, $table, $flag);
|
||||
$createQuery = $this->replaceWithAliases(null, $createQuery, $aliases, $db, $table, $flag);
|
||||
|
||||
// One warning per view.
|
||||
if ($flag && $view) {
|
||||
@ -2112,7 +2113,14 @@ class ExportSql extends ExportPlugin
|
||||
}
|
||||
|
||||
$triggerQuery .= 'DELIMITER ' . $delimiter . $crlf;
|
||||
$triggerQuery .= $this->replaceWithAliases($trigger['create'], $aliases, $db, $table, $flag);
|
||||
$triggerQuery .= $this->replaceWithAliases(
|
||||
$delimiter,
|
||||
$trigger['create'],
|
||||
$aliases,
|
||||
$db,
|
||||
$table,
|
||||
$flag
|
||||
);
|
||||
if ($flag) {
|
||||
$usedAlias = true;
|
||||
}
|
||||
@ -2616,6 +2624,7 @@ class ExportSql extends ExportPlugin
|
||||
* @return string query replaced with aliases
|
||||
*/
|
||||
public function replaceWithAliases(
|
||||
string|null $delimiter,
|
||||
$sqlQuery,
|
||||
array $aliases,
|
||||
$db,
|
||||
@ -2627,7 +2636,7 @@ class ExportSql extends ExportPlugin
|
||||
/**
|
||||
* The parser of this query.
|
||||
*/
|
||||
$parser = new Parser($sqlQuery);
|
||||
$parser = new Parser(empty($delimiter) ? $sqlQuery : 'DELIMITER ' . $delimiter . "\n" . $sqlQuery);
|
||||
|
||||
if (empty($parser->statements[0])) {
|
||||
return $sqlQuery;
|
||||
|
||||
@ -1586,7 +1586,7 @@ class ExportSqlTest extends AbstractTestCase
|
||||
. "REFERENCES dept_master (baz)\n"
|
||||
. ') ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE='
|
||||
. "latin1_general_ci COMMENT='List' AUTO_INCREMENT=5";
|
||||
$result = $this->object->replaceWithAliases($sql_query, $aliases, $db, $table);
|
||||
$result = $this->object->replaceWithAliases(null, $sql_query, $aliases, $db, $table);
|
||||
|
||||
$this->assertEquals(
|
||||
"CREATE TABLE IF NOT EXISTS `bartest` (\n" .
|
||||
@ -1598,7 +1598,7 @@ class ExportSqlTest extends AbstractTestCase
|
||||
$result
|
||||
);
|
||||
|
||||
$result = $this->object->replaceWithAliases($sql_query, [], '', '');
|
||||
$result = $this->object->replaceWithAliases(null, $sql_query, [], '', '');
|
||||
|
||||
$this->assertEquals(
|
||||
"CREATE TABLE IF NOT EXISTS foo (\n" .
|
||||
@ -1611,8 +1611,7 @@ class ExportSqlTest extends AbstractTestCase
|
||||
);
|
||||
|
||||
$table = 'bar';
|
||||
$sql_query = 'DELIMITER $$' . "\n"
|
||||
. 'CREATE TRIGGER `BEFORE_bar_INSERT` '
|
||||
$sql_query = 'CREATE TRIGGER `BEFORE_bar_INSERT` '
|
||||
. 'BEFORE INSERT ON `bar` '
|
||||
. 'FOR EACH ROW BEGIN '
|
||||
. 'SET @cnt=(SELECT count(*) FROM bar WHERE '
|
||||
@ -1621,7 +1620,7 @@ class ExportSqlTest extends AbstractTestCase
|
||||
. 'IF @cnt<>0 THEN '
|
||||
. 'SET NEW.xy=1; '
|
||||
. 'END IF; END';
|
||||
$result = $this->object->replaceWithAliases($sql_query, $aliases, $db, $table);
|
||||
$result = $this->object->replaceWithAliases('$$', $sql_query, $aliases, $db, $table);
|
||||
|
||||
$this->assertEquals(
|
||||
'CREATE TRIGGER `BEFORE_bar_INSERT` BEFORE INSERT ON `f` FOR EACH ROW BEGIN ' .
|
||||
@ -1632,5 +1631,55 @@ class ExportSqlTest extends AbstractTestCase
|
||||
'END',
|
||||
$result
|
||||
);
|
||||
|
||||
$table = 'bar';
|
||||
$sql_query = <<<'SQL'
|
||||
CREATE FUNCTION `HTML_UnEncode`(`x` TEXT CHARSET utf8) RETURNS text CHARSET utf8
|
||||
BEGIN
|
||||
|
||||
DECLARE TextString TEXT ;
|
||||
SET TextString = x ;
|
||||
|
||||
#quotation mark
|
||||
IF INSTR( x , '"' )
|
||||
THEN SET TextString = REPLACE(TextString, '"','"') ;
|
||||
END IF ;
|
||||
|
||||
#apostrophe
|
||||
IF INSTR( x , ''' )
|
||||
THEN SET TextString = REPLACE(TextString, ''','"') ;
|
||||
END IF ;
|
||||
|
||||
RETURN TextString ;
|
||||
|
||||
END
|
||||
SQL;
|
||||
$result = $this->object->replaceWithAliases('$$', $sql_query, $aliases, $db, $table);
|
||||
|
||||
$expectedQuery = <<<'SQL'
|
||||
CREATE FUNCTION `HTML_UnEncode` (`x` TEXT CHARSET utf8) RETURNS TEXT CHARSET utf8 BEGIN
|
||||
|
||||
DECLARE TextString TEXT ;
|
||||
SET TextString = x ;
|
||||
|
||||
#quotation mark
|
||||
IF INSTR( x , '"' )
|
||||
THEN SET TextString = REPLACE(TextString, '"','"') ;
|
||||
END IF ;
|
||||
|
||||
#apostrophe
|
||||
IF INSTR( x , ''' )
|
||||
THEN SET TextString = REPLACE(TextString, ''','"') ;
|
||||
END IF ;
|
||||
|
||||
RETURN TextString ;
|
||||
|
||||
END
|
||||
SQL;
|
||||
|
||||
$this->assertEquals(
|
||||
$expectedQuery,
|
||||
$result
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user