Merge pull request #101 from PostgreSQL-For-Wordpress/returning-replaces-seq
Replace calls to seq by adding a RETURNING * to all insert and replace statements
This commit is contained in:
+50
-17
@@ -16,6 +16,7 @@ $GLOBALS['pg4wp_result'] = 0;
|
||||
$GLOBALS['pg4wp_numrows_query'] = '';
|
||||
$GLOBALS['pg4wp_ins_table'] = '';
|
||||
$GLOBALS['pg4wp_ins_field'] = '';
|
||||
$GLOBALS['pg4wp_ins_id'] = '';
|
||||
$GLOBALS['pg4wp_last_insert'] = '';
|
||||
$GLOBALS['pg4wp_connstr'] = '';
|
||||
$GLOBALS['pg4wp_conn'] = false;
|
||||
@@ -465,6 +466,35 @@ function wpsqli_rollback(&$connection, $flags = 0, $name = null)
|
||||
pg_query($connection, "ROLLBACK");
|
||||
}
|
||||
|
||||
function get_primary_key_for_table(&$connection, $table)
|
||||
{
|
||||
$query = <<<SQL
|
||||
SELECT a.attname, i.indisprimary
|
||||
FROM pg_index i
|
||||
JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey)
|
||||
WHERE i.indrelid = '$table'::regclass
|
||||
SQL;
|
||||
|
||||
$result = pg_query($connection, $query);
|
||||
if (!$result) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$firstRow = null;
|
||||
while ($row = pg_fetch_row($result)) {
|
||||
if ($firstRow === null) {
|
||||
$firstRow = $row; // Save the first row in case no match is found
|
||||
}
|
||||
|
||||
if ($row[1] == true) {
|
||||
return $row[0]; // Return the first row where $row[1] == true
|
||||
}
|
||||
}
|
||||
|
||||
// If no row where $row[1] == true was found, return the first row encountered
|
||||
return $firstRow ? $firstRow[0] : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs a query against the database.
|
||||
*
|
||||
@@ -515,6 +545,19 @@ function wpsqli_query(&$connection, $query, $result_mode = 0)
|
||||
$GLOBALS['pg4wp_conn'] = $connection;
|
||||
$GLOBALS['pg4wp_result'] = $result;
|
||||
|
||||
if (false !== strpos($sql, "INSERT INTO")) {
|
||||
$matches = array();
|
||||
preg_match("/^INSERT INTO\s+`?([a-z0-9_]+)`?/i", $query, $matches);
|
||||
$tableName = $matches[1];
|
||||
|
||||
if (false !== strpos($sql, "RETURNING")) {
|
||||
$primaryKey = get_primary_key_for_table($connection, $tableName);
|
||||
$row = pg_fetch_assoc($result);
|
||||
|
||||
$GLOBALS['pg4wp_ins_id'] = $row[$primaryKey];
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
@@ -1077,9 +1120,8 @@ function wpsqli_get_primary_sequence_for_table(&$connection, $table)
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback to default if we don't find a sequence
|
||||
// Note: this will probably fail
|
||||
return $table . '_seq';
|
||||
// we didn't find a sequence for this table.
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1099,24 +1141,15 @@ function wpsqli_insert_id(&$connection = null)
|
||||
$data = null;
|
||||
$ins_field = $GLOBALS['pg4wp_ins_field'];
|
||||
$table = $GLOBALS['pg4wp_ins_table'];
|
||||
$lastq = $GLOBALS['pg4wp_last_insert'];
|
||||
$seq = wpsqli_get_primary_sequence_for_table($connection, $table);
|
||||
|
||||
// Special case when using WP_Import plugin where ID is defined in the query itself.
|
||||
if($table == $wpdb->term_relationships) {
|
||||
if($GLOBALS['pg4wp_ins_id']) {
|
||||
return $GLOBALS['pg4wp_ins_id'];
|
||||
} elseif(empty($sql)) {
|
||||
$sql = 'NO QUERY';
|
||||
$data = 0;
|
||||
} elseif ('post_author' == $ins_field && false !== strpos($lastq, 'ID')) {
|
||||
// No PostgreSQL specific operation here.
|
||||
$sql = 'ID was in query ';
|
||||
$pattern = '/.+\'(\d+).+$/';
|
||||
preg_match($pattern, $lastq, $matches);
|
||||
$data = $matches[1];
|
||||
|
||||
// PostgreSQL: Setting the value of the sequence based on the latest inserted ID.
|
||||
$GLOBALS['pg4wp_queued_query'] = "SELECT SETVAL('$seq',(SELECT MAX(\"ID\") FROM $table)+1);";
|
||||
} else {
|
||||
// PostgreSQL: Using CURRVAL() to get the current value of the sequence.
|
||||
$seq = wpsqli_get_primary_sequence_for_table($connection, $table);
|
||||
$lastq = $GLOBALS['pg4wp_last_insert'];
|
||||
// Double quoting is needed to prevent seq from being lowercased automatically
|
||||
$sql = "SELECT CURRVAL('\"$seq\"')";
|
||||
$res = pg_query($connection, $sql);
|
||||
|
||||
@@ -36,7 +36,6 @@ class AlterTableSQLRewriter extends AbstractSQLRewriter
|
||||
$sql = $this->rewriteAddIndex($sql);
|
||||
return $sql;
|
||||
}
|
||||
|
||||
if (str_contains($sql, 'CHANGE COLUMN')) {
|
||||
$sql = $this->rewriteChangeColumn($sql);
|
||||
return $sql;
|
||||
@@ -65,7 +64,7 @@ class AlterTableSQLRewriter extends AbstractSQLRewriter
|
||||
return $sql;
|
||||
}
|
||||
|
||||
private function rewriteAddIndex(string $sql): string
|
||||
private function rewriteAddIndex(string $sql): string
|
||||
{
|
||||
$pattern = '/ALTER TABLE\s+(\w+)\s+ADD (UNIQUE |)INDEX\s+([^\s]+)\s+\(((?:[^\(\)]+|\([^\(\)]+\))+)\)/';
|
||||
|
||||
@@ -74,18 +73,18 @@ class AlterTableSQLRewriter extends AbstractSQLRewriter
|
||||
$unique = $matches[2];
|
||||
$index = $matches[3];
|
||||
$columns = $matches[4];
|
||||
|
||||
|
||||
// Remove prefix indexing
|
||||
// Rarely used and apparently unnecessary for current uses
|
||||
$columns = preg_replace('/\([^\)]*\)/', '', $columns);
|
||||
|
||||
|
||||
// Workaround for index name duplicate
|
||||
$index = $table . '_' . $index;
|
||||
|
||||
|
||||
// Add backticks around index name and column name, and include IF NOT EXISTS clause
|
||||
$sql = "CREATE {$unique}INDEX IF NOT EXISTS `{$index}` ON `{$table}` (`{$columns}`)";
|
||||
}
|
||||
|
||||
|
||||
return $sql;
|
||||
}
|
||||
|
||||
@@ -218,15 +217,16 @@ class AlterTableSQLRewriter extends AbstractSQLRewriter
|
||||
return $sql;
|
||||
}
|
||||
|
||||
private function rewrite_numeric_type($sql){
|
||||
private function rewrite_numeric_type($sql)
|
||||
{
|
||||
// Numeric types in MySQL which need to be rewritten
|
||||
$numeric_types = ["bigint", "int", "integer", "smallint", "mediumint", "tinyint", "double", "decimal"];
|
||||
$numeric_types_imploded = implode('|', $numeric_types);
|
||||
|
||||
|
||||
// Prepare regex pattern to match 'type(x)'
|
||||
$pattern = "/(" . $numeric_types_imploded . ")\(\d+\)/";
|
||||
|
||||
// Execute type find & replace
|
||||
|
||||
// Execute type find & replace
|
||||
$sql = preg_replace_callback($pattern, function ($matches) {
|
||||
return $matches[1];
|
||||
}, $sql);
|
||||
@@ -260,7 +260,7 @@ class AlterTableSQLRewriter extends AbstractSQLRewriter
|
||||
$sql = preg_replace($pattern, 'serial', $sql);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $sql;
|
||||
}
|
||||
|
||||
|
||||
@@ -89,15 +89,16 @@ class CreateTableSQLRewriter extends AbstractSQLRewriter
|
||||
return $sql;
|
||||
}
|
||||
|
||||
private function rewrite_numeric_type($sql){
|
||||
private function rewrite_numeric_type($sql)
|
||||
{
|
||||
// Numeric types in MySQL which need to be rewritten
|
||||
$numeric_types = ["bigint", "int", "integer", "smallint", "mediumint", "tinyint", "double", "decimal"];
|
||||
$numeric_types_imploded = implode('|', $numeric_types);
|
||||
|
||||
|
||||
// Prepare regex pattern to match 'type(x)'
|
||||
$pattern = "/(" . $numeric_types_imploded . ")\(\d+\)/";
|
||||
|
||||
// Execute type find & replace
|
||||
|
||||
// Execute type find & replace
|
||||
$sql = preg_replace_callback($pattern, function ($matches) {
|
||||
return $matches[1];
|
||||
}, $sql);
|
||||
@@ -131,7 +132,7 @@ class CreateTableSQLRewriter extends AbstractSQLRewriter
|
||||
$sql = preg_replace($pattern, 'serial', $sql);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $sql;
|
||||
}
|
||||
|
||||
|
||||
@@ -110,6 +110,42 @@ class InsertSQLRewriter extends AbstractSQLRewriter
|
||||
$sql = utf8_encode($sql);
|
||||
}
|
||||
|
||||
if(false === strpos($sql, 'RETURNING')) {
|
||||
$end_of_statement = $this->findSemicolon($sql);
|
||||
if ($end_of_statement !== false) {
|
||||
// Create the substrings up to and after the semicolon
|
||||
$sql_before_semicolon = substr($sql, 0, $end_of_statement);
|
||||
$sql_after_semicolon = substr($sql, $end_of_statement, strlen($sql));
|
||||
|
||||
// Splice the SQL string together with 'RETURNING *'
|
||||
$sql = $sql_before_semicolon . ' RETURNING *' . $sql_after_semicolon;
|
||||
|
||||
} else {
|
||||
$sql = $sql .= " RETURNING *";
|
||||
}
|
||||
}
|
||||
|
||||
return $sql;
|
||||
}
|
||||
|
||||
// finds semicolons that aren't in variables
|
||||
private function findSemicolon($sql)
|
||||
{
|
||||
$quoteOpened = false;
|
||||
$parenthesisDepth = 0;
|
||||
|
||||
$sqlAsArray = str_split($sql);
|
||||
for($i = 0; $i < count($sqlAsArray); $i++) {
|
||||
if(($sqlAsArray[$i] == '"' || $sqlAsArray[$i] == "'") && ($i == 0 || $sqlAsArray[$i - 1] != '\\')) {
|
||||
$quoteOpened = !$quoteOpened;
|
||||
} elseif($sqlAsArray[$i] == '(' && !$quoteOpened) {
|
||||
$parenthesisDepth++;
|
||||
} elseif($sqlAsArray[$i] == ')' && !$quoteOpened) {
|
||||
$parenthesisDepth--;
|
||||
} elseif($sqlAsArray[$i] == ';' && !$quoteOpened && $parenthesisDepth == 0) {
|
||||
return $i;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,12 +61,12 @@ class ReplaceIntoSQLRewriter extends AbstractSQLRewriter
|
||||
// Extract SQL components
|
||||
$tableSection = trim(substr($statement, $insertIndex, $columnsStartIndex - $insertIndex));
|
||||
$valuesSection = trim(substr($statement, $valuesIndex, strlen($statement) - $valuesIndex));
|
||||
$columnsSection = trim(substr($statement, $columnsStartIndex, $columnsEndIndex - $columnsStartIndex + 1));
|
||||
$columnsSection = trim(substr($statement, $columnsStartIndex, $columnsEndIndex - $columnsStartIndex + 1));
|
||||
|
||||
// Extract and clean up column names from the update section
|
||||
$updateCols = explode(',', substr($columnsSection, 1, strlen($columnsSection) - 2));
|
||||
$updateCols = array_map(function ($col) {
|
||||
return trim($col);
|
||||
return trim($col);
|
||||
}, $updateCols);
|
||||
|
||||
// Choose a primary key for ON CONFLICT
|
||||
@@ -91,11 +91,26 @@ class ReplaceIntoSQLRewriter extends AbstractSQLRewriter
|
||||
}
|
||||
|
||||
// trim any preceding commas
|
||||
$updateSection = ltrim($updateSection,", ");
|
||||
$updateSection = ltrim($updateSection, ", ");
|
||||
|
||||
// Construct the PostgreSQL query
|
||||
$postgresSQL = sprintf('%s %s %s ON CONFLICT (%s) DO UPDATE SET %s', $tableSection, $columnsSection, $valuesSection, $primaryKey, $updateSection);
|
||||
|
||||
if(false === strpos($postgresSQL, 'RETURNING')) {
|
||||
$end_of_statement = $this->findSemicolon($postgresSQL);
|
||||
if ($end_of_statement !== false) {
|
||||
// Create the substrings up to and after the semicolon
|
||||
$sql_before_semicolon = substr($postgresSQL, 0, $end_of_statement);
|
||||
$sql_after_semicolon = substr($postgresSQL, $end_of_statement, strlen($postgresSQL));
|
||||
|
||||
// Splice the SQL string together with 'RETURNING *'
|
||||
$postgresSQL = $sql_before_semicolon . ' RETURNING *' . $sql_after_semicolon;
|
||||
|
||||
} else {
|
||||
$postgresSQL = $postgresSQL .= " RETURNING *";
|
||||
}
|
||||
}
|
||||
|
||||
// Append to the converted statements list
|
||||
$convertedStatements[] = $postgresSQL;
|
||||
}
|
||||
@@ -104,4 +119,25 @@ class ReplaceIntoSQLRewriter extends AbstractSQLRewriter
|
||||
|
||||
return $sql;
|
||||
}
|
||||
|
||||
// finds semicolons that aren't in variables
|
||||
private function findSemicolon($sql)
|
||||
{
|
||||
$quoteOpened = false;
|
||||
$parenthesisDepth = 0;
|
||||
|
||||
$sqlAsArray = str_split($sql);
|
||||
for($i = 0; $i < count($sqlAsArray); $i++) {
|
||||
if(($sqlAsArray[$i] == '"' || $sqlAsArray[$i] == "'") && ($i == 0 || $sqlAsArray[$i - 1] != '\\')) {
|
||||
$quoteOpened = !$quoteOpened;
|
||||
} elseif($sqlAsArray[$i] == '(' && !$quoteOpened) {
|
||||
$parenthesisDepth++;
|
||||
} elseif($sqlAsArray[$i] == ')' && !$quoteOpened) {
|
||||
$parenthesisDepth--;
|
||||
} elseif($sqlAsArray[$i] == ';' && !$quoteOpened && $parenthesisDepth == 0) {
|
||||
return $i;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ class SelectSQLRewriter extends AbstractSQLRewriter
|
||||
if(false !== strpos($sql, 'information_schema')) {
|
||||
// WP Site Health rewrites
|
||||
if (false !== strpos($sql, "SELECT TABLE_NAME AS 'table', TABLE_ROWS AS 'rows', SUM(data_length + index_length)")) {
|
||||
$sql = $this->postgresTableSizeRewrite();
|
||||
$sql = $this->postgresTableSizeRewrite();
|
||||
return $sql;
|
||||
}
|
||||
|
||||
@@ -360,7 +360,7 @@ class SelectSQLRewriter extends AbstractSQLRewriter
|
||||
}
|
||||
|
||||
// This method is specifically to handle should_suggest_persistent_object_cache in wp site health
|
||||
protected function postgresTableSizeRewrite($schema = 'public')
|
||||
protected function postgresTableSizeRewrite($schema = 'public')
|
||||
{
|
||||
|
||||
$sql = <<<SQL
|
||||
|
||||
@@ -5,7 +5,7 @@ class ShowTableStatusSQLRewriter extends AbstractSQLRewriter
|
||||
public function rewrite(): string
|
||||
{
|
||||
$sql = $this->original();
|
||||
return $this->generatePostgresShowTableStatus();
|
||||
return $this->generatePostgresShowTableStatus();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ class ShowVariablesSQLRewriter extends AbstractSQLRewriter
|
||||
}
|
||||
|
||||
if ($variableName == "max_allowed_packet") {
|
||||
// Act like 1GB packet size, in practice this limit doesn't actually exist for postgres, we just want to fool WP
|
||||
// Act like 1GB packet size, in practice this limit doesn't actually exist for postgres, we just want to fool WP
|
||||
return "SELECT '$variableName' AS \"Variable_name\", '1073741824' AS \"Value\";";
|
||||
}
|
||||
|
||||
|
||||
+76
-52
@@ -415,65 +415,36 @@ final class rewriteTest extends TestCase
|
||||
$this->assertSame(trim($expected), trim($postgresql));
|
||||
}
|
||||
|
||||
|
||||
public function test_it_can_handle_replacement_sql()
|
||||
public function test_it_will_append_returning_id_to_insert_statements()
|
||||
{
|
||||
$sql = "REPLACE INTO test2 (column1, column2, column3) VALUES (1, 'Old', '2014-08-20 18:47:00')";
|
||||
$expected = "INSERT INTO test2 (column1, column2, column3) VALUES (1, 'Old', '2014-08-20 18:47:00') ON CONFLICT (column1) DO UPDATE SET column2 = EXCLUDED.column2, column3 = EXCLUDED.column3";
|
||||
$sql = <<<SQL
|
||||
INSERT INTO wp_translations_term_relations (
|
||||
object_id,
|
||||
object_lang,
|
||||
source_id)
|
||||
VALUES (%d, %s, %d)
|
||||
ON DUPLICATE KEY
|
||||
UPDATE object_id=VALUES(object_id), object_lang=VALUES(object_lang), source_id=VALUES(source_id);
|
||||
SQL;
|
||||
|
||||
$expected = <<<SQL
|
||||
INSERT INTO wp_translations_term_relations (
|
||||
object_id,
|
||||
object_lang,
|
||||
source_id)
|
||||
VALUES (%d, %s, %d)
|
||||
ON DUPLICATE KEY
|
||||
UPDATE object_id=VALUES(object_id), object_lang=VALUES(object_lang), source_id=VALUES(source_id) RETURNING *;
|
||||
SQL;
|
||||
|
||||
$postgresql = pg4wp_rewrite($sql);
|
||||
$this->assertSame(trim($expected), trim($postgresql));
|
||||
}
|
||||
|
||||
|
||||
public function test_it_can_handle_insert_sql_containing_nested_parathesis_with_numbers()
|
||||
public function test_it_can_handle_replacement_sql()
|
||||
{
|
||||
$sql = <<<SQL
|
||||
REPLACE INTO `wp_options` (`option_name`, `option_value`, `autoload`) VALUES ('_site_transient_wp_remote_block_patterns_b815a6cec4e03bb064328ac11645ce66', 'a:43:{i:0;O:8:"stdClass":7:{s:2:"id";i:309935;s:5:"title";O:8:"stdClass":1:{s:8:"rendered";s:45:"Centered image with two-tone background color";}s:7:"content";O:8:"stdClass":2:{s:8:"rendered";s
|
||||
|
||||
<div class="wp-block-cover alignfull is-light" style="margin-top:0;padding-top:5vw;padding-right:5vw;padding-bottom:5vw;padding-left:5vw;min-height:66vh;aspect-ratio:unset;aspect-ratio:unset;"><span aria-hidden="true" class="wp-block-cover__background has-background-dim-100 has-background-dim has-background-gradient" style="background:linear-grad
|
||||
<div class="wp-block-group wp-container-content-2 is-layout-constrained wp-container-core-group-is-layout-1 wp-block-group-is-layout-constrained">
|
||||
!-- /wp:image -->
|
||||
|
||||
<!-- wp:paragraph {"align":"right","style":{"typography":{"fontSize":"148px","textTransform":"uppercase","fontStyle":"normal","fontWeight":"700","lineHeight":"0.8","letterSpacing":"-4px"}},"textColor":"white"} -->
|
||||
<p class="has-text-align-right has-white-color has-text-color" style="font-size:148px;font-style:normal;font-weight:700;letter-spacing:-4px;line-height:0.8;text-transform:uppercase">Big<br>John<br>Patton</p>
|
||||
<!-- /wp:paragraph --></div>
|
||||
<!-- /wp:group --></div>
|
||||
<!-- /wp:group --></div></div>
|
||||
<!-- /wp:cover -->";}i:4;O:8:"stdClass":7:{s:2:"id";i:309236;s:5:"title";O:8:"stdClass":1:{s:8:"rendered";s:60:"Fullwidth headline with links and gradient offset background";}s:7:"content";O:8:"stdClass":2:{s:8:"rendered";s:1972:"
|
||||
<div class="wp-block-cover alignfull is-light" style="margin-top:0;padding-top:48px;padding-right:5vw;padding-bottom:48px;padding-left:5vw"><span aria-hidden="true" class="wp-block-cover__background has-background-dim-100 has-background-dim has-background-gradient" style="background:linear-gradient(180deg,rgb(0,0,0) 39%,rgb(83,80,123) 39%)"></spa
|
||||
<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
|
||||
|
||||
|
||||
|
||||
<!-- wp:image {"sizeSlug":"large","linkDestination":"none"} -->
|
||||
<figure class="wp-block-image size-large"><img src="https://s.w.org/images/core/5.8/nature-above-02.jpg" alt="An aerial view of a field. A road runs through the upper right corner." /></figure>
|
||||
<!-- /wp:image --></figure>
|
||||
<!-- /wp:gallery -->";}}', 'no')
|
||||
SQL;
|
||||
$expected = <<<SQL
|
||||
INSERT INTO "wp_options" ("option_name", "option_value", "autoload") VALUES ('_site_transient_wp_remote_block_patterns_b815a6cec4e03bb064328ac11645ce66', 'a:43:{i:0;O:8:"stdClass":7:{s:2:"id";i:309935;s:5:"title";O:8:"stdClass":1:{s:8:"rendered";s:45:"Centered image with two-tone background color";}s:7:"content";O:8:"stdClass":2:{s:8:"rendered";s
|
||||
|
||||
<div class="wp-block-cover alignfull is-light" style="margin-top:0;padding-top:5vw;padding-right:5vw;padding-bottom:5vw;padding-left:5vw;min-height:66vh;aspect-ratio:unset;aspect-ratio:unset;"><span aria-hidden="true" class="wp-block-cover__background has-background-dim-100 has-background-dim has-background-gradient" style="background:linear-grad
|
||||
<div class="wp-block-group wp-container-content-2 is-layout-constrained wp-container-core-group-is-layout-1 wp-block-group-is-layout-constrained">
|
||||
!-- /wp:image -->
|
||||
|
||||
<!-- wp:paragraph {"align":"right","style":{"typography":{"fontSize":"148px","textTransform":"uppercase","fontStyle":"normal","fontWeight":"700","lineHeight":"0.8","letterSpacing":"-4px"}},"textColor":"white"} -->
|
||||
<p class="has-text-align-right has-white-color has-text-color" style="font-size:148px;font-style:normal;font-weight:700;letter-spacing:-4px;line-height:0.8;text-transform:uppercase">Big<br>John<br>Patton</p>
|
||||
<!-- /wp:paragraph --></div>
|
||||
<!-- /wp:group --></div>
|
||||
<!-- /wp:group --></div></div>
|
||||
<!-- /wp:cover -->";}i:4;O:8:"stdClass":7:{s:2:"id";i:309236;s:5:"title";O:8:"stdClass":1:{s:8:"rendered";s:60:"Fullwidth headline with links and gradient offset background";}s:7:"content";O:8:"stdClass":2:{s:8:"rendered";s:1972:"
|
||||
<div class="wp-block-cover alignfull is-light" style="margin-top:0;padding-top:48px;padding-right:5vw;padding-bottom:48px;padding-left:5vw"><span aria-hidden="true" class="wp-block-cover__background has-background-dim-100 has-background-dim has-background-gradient" style="background:linear-gradient(180deg,rgb(0,0,0) 39%,rgb(83,80,123) 39%)"></spa
|
||||
<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
|
||||
|
||||
|
||||
|
||||
<!-- wp:image {"sizeSlug":"large","linkDestination":"none"} -->
|
||||
<figure class="wp-block-image size-large"><img src="https://s.w.org/images/core/5.8/nature-above-02.jpg" alt="An aerial view of a field. A road runs through the upper right corner." /></figure>
|
||||
<!-- /wp:image --></figure>
|
||||
<!-- /wp:gallery -->";}}', 'no') ON CONFLICT ("option_name") DO UPDATE SET "option_value" = EXCLUDED."option_value", "autoload" = EXCLUDED."autoload"
|
||||
SQL;
|
||||
$sql = "REPLACE INTO test2 (column1, column2, column3) VALUES (1, 'Old', '2014-08-20 18:47:00')";
|
||||
$expected = "INSERT INTO test2 (column1, column2, column3) VALUES (1, 'Old', '2014-08-20 18:47:00') ON CONFLICT (column1) DO UPDATE SET column2 = EXCLUDED.column2, column3 = EXCLUDED.column3 RETURNING *";
|
||||
|
||||
$postgresql = pg4wp_rewrite($sql);
|
||||
$this->assertSame(trim($expected), trim($postgresql));
|
||||
@@ -607,6 +578,59 @@ final class rewriteTest extends TestCase
|
||||
$this->assertSame(trim($expected), trim($postgresql));
|
||||
}
|
||||
|
||||
public function test_it_can_handle_insert_sql_containing_nested_parathesis_with_numbers()
|
||||
{
|
||||
$sql = <<<SQL
|
||||
REPLACE INTO `wp_options` (`option_name`, `option_value`, `autoload`) VALUES ('_site_transient_wp_remote_block_patterns_b815a6cec4e03bb064328ac11645ce66', 'a:43:{i:0;O:8:"stdClass":7:{s:2:"id";i:309935;s:5:"title";O:8:"stdClass":1:{s:8:"rendered";s:45:"Centered image with two-tone background color";}s:7:"content";O:8:"stdClass":2:{s:8:"rendered";s
|
||||
|
||||
<div class="wp-block-cover alignfull is-light" style="margin-top:0;padding-top:5vw;padding-right:5vw;padding-bottom:5vw;padding-left:5vw;min-height:66vh;aspect-ratio:unset;aspect-ratio:unset;"><span aria-hidden="true" class="wp-block-cover__background has-background-dim-100 has-background-dim has-background-gradient" style="background:linear-grad
|
||||
<div class="wp-block-group wp-container-content-2 is-layout-constrained wp-container-core-group-is-layout-1 wp-block-group-is-layout-constrained">
|
||||
!-- /wp:image -->
|
||||
|
||||
<!-- wp:paragraph {"align":"right","style":{"typography":{"fontSize":"148px","textTransform":"uppercase","fontStyle":"normal","fontWeight":"700","lineHeight":"0.8","letterSpacing":"-4px"}},"textColor":"white"} -->
|
||||
<p class="has-text-align-right has-white-color has-text-color" style="font-size:148px;font-style:normal;font-weight:700;letter-spacing:-4px;line-height:0.8;text-transform:uppercase">Big<br>John<br>Patton</p>
|
||||
<!-- /wp:paragraph --></div>
|
||||
<!-- /wp:group --></div>
|
||||
<!-- /wp:group --></div></div>
|
||||
<!-- /wp:cover -->";}i:4;O:8:"stdClass":7:{s:2:"id";i:309236;s:5:"title";O:8:"stdClass":1:{s:8:"rendered";s:60:"Fullwidth headline with links and gradient offset background";}s:7:"content";O:8:"stdClass":2:{s:8:"rendered";s:1972:"
|
||||
<div class="wp-block-cover alignfull is-light" style="margin-top:0;padding-top:48px;padding-right:5vw;padding-bottom:48px;padding-left:5vw"><span aria-hidden="true" class="wp-block-cover__background has-background-dim-100 has-background-dim has-background-gradient" style="background:linear-gradient(180deg,rgb(0,0,0) 39%,rgb(83,80,123) 39%)"></spa
|
||||
<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
|
||||
|
||||
|
||||
|
||||
<!-- wp:image {"sizeSlug":"large","linkDestination":"none"} -->
|
||||
<figure class="wp-block-image size-large"><img src="https://s.w.org/images/core/5.8/nature-above-02.jpg" alt="An aerial view of a field. A road runs through the upper right corner." /></figure>
|
||||
<!-- /wp:image --></figure>
|
||||
<!-- /wp:gallery -->";}}', 'no')
|
||||
SQL;
|
||||
$expected = <<<SQL
|
||||
INSERT INTO "wp_options" ("option_name", "option_value", "autoload") VALUES ('_site_transient_wp_remote_block_patterns_b815a6cec4e03bb064328ac11645ce66', 'a:43:{i:0;O:8:"stdClass":7:{s:2:"id";i:309935;s:5:"title";O:8:"stdClass":1:{s:8:"rendered";s:45:"Centered image with two-tone background color";}s:7:"content";O:8:"stdClass":2:{s:8:"rendered";s
|
||||
|
||||
<div class="wp-block-cover alignfull is-light" style="margin-top:0;padding-top:5vw;padding-right:5vw;padding-bottom:5vw;padding-left:5vw;min-height:66vh;aspect-ratio:unset;aspect-ratio:unset;"><span aria-hidden="true" class="wp-block-cover__background has-background-dim-100 has-background-dim has-background-gradient" style="background:linear-grad
|
||||
<div class="wp-block-group wp-container-content-2 is-layout-constrained wp-container-core-group-is-layout-1 wp-block-group-is-layout-constrained">
|
||||
!-- /wp:image -->
|
||||
|
||||
<!-- wp:paragraph {"align":"right","style":{"typography":{"fontSize":"148px","textTransform":"uppercase","fontStyle":"normal","fontWeight":"700","lineHeight":"0.8","letterSpacing":"-4px"}},"textColor":"white"} -->
|
||||
<p class="has-text-align-right has-white-color has-text-color" style="font-size:148px;font-style:normal;font-weight:700;letter-spacing:-4px;line-height:0.8;text-transform:uppercase">Big<br>John<br>Patton</p>
|
||||
<!-- /wp:paragraph --></div>
|
||||
<!-- /wp:group --></div>
|
||||
<!-- /wp:group --></div></div>
|
||||
<!-- /wp:cover -->";}i:4;O:8:"stdClass":7:{s:2:"id";i:309236;s:5:"title";O:8:"stdClass":1:{s:8:"rendered";s:60:"Fullwidth headline with links and gradient offset background";}s:7:"content";O:8:"stdClass":2:{s:8:"rendered";s:1972:"
|
||||
<div class="wp-block-cover alignfull is-light" style="margin-top:0;padding-top:48px;padding-right:5vw;padding-bottom:48px;padding-left:5vw"><span aria-hidden="true" class="wp-block-cover__background has-background-dim-100 has-background-dim has-background-gradient" style="background:linear-gradient(180deg,rgb(0,0,0) 39%,rgb(83,80,123) 39%)"></spa
|
||||
<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
|
||||
|
||||
|
||||
|
||||
<!-- wp:image {"sizeSlug":"large","linkDestination":"none"} -->
|
||||
<figure class="wp-block-image size-large"><img src="https://s.w.org/images/core/5.8/nature-above-02.jpg" alt="An aerial view of a field. A road runs through the upper right corner." /></figure>
|
||||
<!-- /wp:image --></figure>
|
||||
<!-- /wp:gallery -->";}}', 'no') ON CONFLICT ("option_name") DO UPDATE SET "option_value" = EXCLUDED."option_value", "autoload" = EXCLUDED."autoload" RETURNING *
|
||||
SQL;
|
||||
|
||||
$postgresql = pg4wp_rewrite($sql);
|
||||
$this->assertSame(trim($expected), trim($postgresql));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"mysql":"INSERT INTO `wp_postmeta` (`post_id`, `meta_key`, `meta_value`) VALUES (55, '_edit_lock', '1698679874:1')","postgresql":"INSERT INTO wp_postmeta (post_id, meta_key, meta_value) VALUES (55, '_edit_lock', '1698679874:1')"}
|
||||
{"mysql":"INSERT INTO `wp_postmeta` (`post_id`, `meta_key`, `meta_value`) VALUES (55, '_edit_lock', '1698679874:1')","postgresql":"INSERT INTO wp_postmeta (post_id, meta_key, meta_value) VALUES (55, '_edit_lock', '1698679874:1') RETURNING *"}
|
||||
@@ -1 +1 @@
|
||||
{"mysql":"INSERT INTO `wp_sitemeta` (`site_id`, `meta_key`, `meta_value`) VALUES (1, '_site_transient_wp_remote_block_patterns_03fe7d7ccb043466cdff46c6061da4a5', 'O:8:\"WP_Error\":3:{s:6:\"errors\";a:1:{s:19:\"http_request_failed\";a:1:{i:0;s:95:\"cURL error 35: OpenSSL\/3.1.4: error:0A000152:SSL routines::unsafe legacy renegotiation disabled\";}}s:10:\"error_data\";a:0:{}s:18:\"')","postgresql":"INSERT INTO wp_sitemeta (site_id, meta_key, meta_value) VALUES (1, '_site_transient_wp_remote_block_patterns_03fe7d7ccb043466cdff46c6061da4a5', 'O:8:\"WP_Error\":3:{s:6:\"errors\";a:1:{s:19:\"http_request_failed\";a:1:{i:0;s:95:\"cURL error 35: OpenSSL\/3.1.4: error:0A000152:SSL routines::unsafe legacy renegotiation disabled\";}}s:10:\"error_data\";a:0:{}s:18:\"')"}
|
||||
{"mysql":"INSERT INTO `wp_sitemeta` (`site_id`, `meta_key`, `meta_value`) VALUES (1, '_site_transient_wp_remote_block_patterns_03fe7d7ccb043466cdff46c6061da4a5', 'O:8:\"WP_Error\":3:{s:6:\"errors\";a:1:{s:19:\"http_request_failed\";a:1:{i:0;s:95:\"cURL error 35: OpenSSL\/3.1.4: error:0A000152:SSL routines::unsafe legacy renegotiation disabled\";}}s:10:\"error_data\";a:0:{}s:18:\"')","postgresql":"INSERT INTO wp_sitemeta (site_id, meta_key, meta_value) VALUES (1, '_site_transient_wp_remote_block_patterns_03fe7d7ccb043466cdff46c6061da4a5', 'O:8:\"WP_Error\":3:{s:6:\"errors\";a:1:{s:19:\"http_request_failed\";a:1:{i:0;s:95:\"cURL error 35: OpenSSL\/3.1.4: error:0A000152:SSL routines::unsafe legacy renegotiation disabled\";}}s:10:\"error_data\";a:0:{}s:18:\"') RETURNING *"}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"mysql":"INSERT INTO `wp_sitemeta` (`site_id`, `meta_key`, `meta_value`) VALUES (1, '_site_transient_wp_remote_block_patterns_0dc4db57500f00dee60778de7fb84b69', 'O:8:\"WP_Error\":3:{s:6:\"errors\";a:1:{s:19:\"http_request_failed\";a:1:{i:0;s:95:\"cURL error 35: OpenSSL\/3.1.4: error:0A000152:SSL routines::unsafe legacy renegotiation disabled\";}}s:10:\"error_data\";a:0:{}s:18:\"')","postgresql":"INSERT INTO wp_sitemeta (site_id, meta_key, meta_value) VALUES (1, '_site_transient_wp_remote_block_patterns_0dc4db57500f00dee60778de7fb84b69', 'O:8:\"WP_Error\":3:{s:6:\"errors\";a:1:{s:19:\"http_request_failed\";a:1:{i:0;s:95:\"cURL error 35: OpenSSL\/3.1.4: error:0A000152:SSL routines::unsafe legacy renegotiation disabled\";}}s:10:\"error_data\";a:0:{}s:18:\"')"}
|
||||
{"mysql":"INSERT INTO `wp_sitemeta` (`site_id`, `meta_key`, `meta_value`) VALUES (1, '_site_transient_wp_remote_block_patterns_0dc4db57500f00dee60778de7fb84b69', 'O:8:\"WP_Error\":3:{s:6:\"errors\";a:1:{s:19:\"http_request_failed\";a:1:{i:0;s:95:\"cURL error 35: OpenSSL\/3.1.4: error:0A000152:SSL routines::unsafe legacy renegotiation disabled\";}}s:10:\"error_data\";a:0:{}s:18:\"')","postgresql":"INSERT INTO wp_sitemeta (site_id, meta_key, meta_value) VALUES (1, '_site_transient_wp_remote_block_patterns_0dc4db57500f00dee60778de7fb84b69', 'O:8:\"WP_Error\":3:{s:6:\"errors\";a:1:{s:19:\"http_request_failed\";a:1:{i:0;s:95:\"cURL error 35: OpenSSL\/3.1.4: error:0A000152:SSL routines::unsafe legacy renegotiation disabled\";}}s:10:\"error_data\";a:0:{}s:18:\"') RETURNING *"}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"mysql":"INSERT INTO `wp_posts` (`post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_content_filtered`, `post_title`, `post_excerpt`, `post_status`, `post_type`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_parent`, `menu_order`, `post_mime_type`, `guid`) VALUES (1, '2023-10-30 15:31:24', '2023-10-30 15:31:24', '', '', 'New Post 123', '', 'inherit', 'revision', 'closed', 'closed', '', '55-revision-v1', '', '', '2023-10-30 15:31:24', '2023-10-30 15:31:24', 55, 0, '', '')","postgresql":"INSERT INTO wp_posts (post_author, post_date, post_date_gmt, post_content, post_content_filtered, post_title, post_excerpt, post_status, post_type, comment_status, ping_status, post_password, post_name, to_ping, pinged, post_modified, post_modified_gmt, post_parent, menu_order, post_mime_type, guid) VALUES (1, '2023-10-30 15:31:24', '2023-10-30 15:31:24', '', '', 'New Post 123', '', 'inherit', 'revision', 'closed', 'closed', '', '55-revision-v1', '', '', '2023-10-30 15:31:24', '2023-10-30 15:31:24', 55, 0, '', '')"}
|
||||
{"mysql":"INSERT INTO `wp_posts` (`post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_content_filtered`, `post_title`, `post_excerpt`, `post_status`, `post_type`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_parent`, `menu_order`, `post_mime_type`, `guid`) VALUES (1, '2023-10-30 15:31:24', '2023-10-30 15:31:24', '', '', 'New Post 123', '', 'inherit', 'revision', 'closed', 'closed', '', '55-revision-v1', '', '', '2023-10-30 15:31:24', '2023-10-30 15:31:24', 55, 0, '', '')","postgresql":"INSERT INTO wp_posts (post_author, post_date, post_date_gmt, post_content, post_content_filtered, post_title, post_excerpt, post_status, post_type, comment_status, ping_status, post_password, post_name, to_ping, pinged, post_modified, post_modified_gmt, post_parent, menu_order, post_mime_type, guid) VALUES (1, '2023-10-30 15:31:24', '2023-10-30 15:31:24', '', '', 'New Post 123', '', 'inherit', 'revision', 'closed', 'closed', '', '55-revision-v1', '', '', '2023-10-30 15:31:24', '2023-10-30 15:31:24', 55, 0, '', '') RETURNING *"}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"mysql":"INSERT INTO `wp_options` (`option_name`, `option_value`, `autoload`) VALUES ('category_children', 'a:0:{}', 'yes') ON DUPLICATE KEY UPDATE `option_name` = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload` = VALUES(`autoload`)","postgresql":"INSERT INTO \"wp_options\" (\"option_name\", \"option_value\", \"autoload\") VALUES ('category_children', 'a:0:{}', 'yes') ON CONFLICT (\"option_name\") DO UPDATE SET \"option_name\" = EXCLUDED.\"option_name\", \"option_value\" = EXCLUDED.\"option_value\", \"autoload\" = EXCLUDED.\"autoload\""}
|
||||
{"mysql":"INSERT INTO `wp_options` (`option_name`, `option_value`, `autoload`) VALUES ('category_children', 'a:0:{}', 'yes') ON DUPLICATE KEY UPDATE `option_name` = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload` = VALUES(`autoload`)","postgresql":"INSERT INTO \"wp_options\" (\"option_name\", \"option_value\", \"autoload\") VALUES ('category_children', 'a:0:{}', 'yes') ON CONFLICT (\"option_name\") DO UPDATE SET \"option_name\" = EXCLUDED.\"option_name\", \"option_value\" = EXCLUDED.\"option_value\", \"autoload\" = EXCLUDED.\"autoload\" RETURNING *"}
|
||||
@@ -1 +1 @@
|
||||
{"mysql":"INSERT INTO `wp_term_taxonomy` (`term_id`, `taxonomy`, `description`, `parent`, `count`) VALUES (3, 'post_tag', 'tag', 0, 0)","postgresql":"INSERT INTO wp_term_taxonomy (term_id, taxonomy, description, parent, count) VALUES (3, 'post_tag', 'tag', 0, 0)"}
|
||||
{"mysql":"INSERT INTO `wp_term_taxonomy` (`term_id`, `taxonomy`, `description`, `parent`, `count`) VALUES (3, 'post_tag', 'tag', 0, 0)","postgresql":"INSERT INTO wp_term_taxonomy (term_id, taxonomy, description, parent, count) VALUES (3, 'post_tag', 'tag', 0, 0) RETURNING *"}
|
||||
@@ -1 +1 @@
|
||||
{"mysql":"INSERT INTO `wp_postmeta` (`post_id`, `meta_key`, `meta_value`) VALUES (57, '_edit_lock', '1698679917:1')","postgresql":"INSERT INTO wp_postmeta (post_id, meta_key, meta_value) VALUES (57, '_edit_lock', '1698679917:1')"}
|
||||
{"mysql":"INSERT INTO `wp_postmeta` (`post_id`, `meta_key`, `meta_value`) VALUES (57, '_edit_lock', '1698679917:1')","postgresql":"INSERT INTO wp_postmeta (post_id, meta_key, meta_value) VALUES (57, '_edit_lock', '1698679917:1') RETURNING *"}
|
||||
@@ -1 +1 @@
|
||||
{"mysql":"INSERT INTO `wp_sitemeta` (`site_id`, `meta_key`, `meta_value`) VALUES (1, '_site_transient_wp_remote_block_patterns_0dc4db57500f00dee60778de7fb84b69', 'O:8:\"WP_Error\":3:{s:6:\"errors\";a:1:{s:19:\"http_request_failed\";a:1:{i:0;s:95:\"cURL error 35: OpenSSL\/3.1.4: error:0A000152:SSL routines::unsafe legacy renegotiation disabled\";}}s:10:\"error_data\";a:0:{}s:18:\"')","postgresql":"INSERT INTO wp_sitemeta (site_id, meta_key, meta_value) VALUES (1, '_site_transient_wp_remote_block_patterns_0dc4db57500f00dee60778de7fb84b69', 'O:8:\"WP_Error\":3:{s:6:\"errors\";a:1:{s:19:\"http_request_failed\";a:1:{i:0;s:95:\"cURL error 35: OpenSSL\/3.1.4: error:0A000152:SSL routines::unsafe legacy renegotiation disabled\";}}s:10:\"error_data\";a:0:{}s:18:\"')"}
|
||||
{"mysql":"INSERT INTO `wp_sitemeta` (`site_id`, `meta_key`, `meta_value`) VALUES (1, '_site_transient_wp_remote_block_patterns_0dc4db57500f00dee60778de7fb84b69', 'O:8:\"WP_Error\":3:{s:6:\"errors\";a:1:{s:19:\"http_request_failed\";a:1:{i:0;s:95:\"cURL error 35: OpenSSL\/3.1.4: error:0A000152:SSL routines::unsafe legacy renegotiation disabled\";}}s:10:\"error_data\";a:0:{}s:18:\"')","postgresql":"INSERT INTO wp_sitemeta (site_id, meta_key, meta_value) VALUES (1, '_site_transient_wp_remote_block_patterns_0dc4db57500f00dee60778de7fb84b69', 'O:8:\"WP_Error\":3:{s:6:\"errors\";a:1:{s:19:\"http_request_failed\";a:1:{i:0;s:95:\"cURL error 35: OpenSSL\/3.1.4: error:0A000152:SSL routines::unsafe legacy renegotiation disabled\";}}s:10:\"error_data\";a:0:{}s:18:\"') RETURNING *"}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"mysql":"INSERT INTO `wp_posts` (`post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_content_filtered`, `post_title`, `post_excerpt`, `post_status`, `post_type`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_parent`, `menu_order`, `post_mime_type`, `guid`) VALUES (1, '2023-10-30 15:32:03', '2023-10-30 15:32:03', '', '', 'Test Page', '', 'inherit', 'revision', 'closed', 'closed', '', '57-revision-v1', '', '', '2023-10-30 15:32:03', '2023-10-30 15:32:03', 57, 0, '', '')","postgresql":"INSERT INTO wp_posts (post_author, post_date, post_date_gmt, post_content, post_content_filtered, post_title, post_excerpt, post_status, post_type, comment_status, ping_status, post_password, post_name, to_ping, pinged, post_modified, post_modified_gmt, post_parent, menu_order, post_mime_type, guid) VALUES (1, '2023-10-30 15:32:03', '2023-10-30 15:32:03', '', '', 'Test Page', '', 'inherit', 'revision', 'closed', 'closed', '', '57-revision-v1', '', '', '2023-10-30 15:32:03', '2023-10-30 15:32:03', 57, 0, '', '')"}
|
||||
{"mysql":"INSERT INTO `wp_posts` (`post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_content_filtered`, `post_title`, `post_excerpt`, `post_status`, `post_type`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_parent`, `menu_order`, `post_mime_type`, `guid`) VALUES (1, '2023-10-30 15:32:03', '2023-10-30 15:32:03', '', '', 'Test Page', '', 'inherit', 'revision', 'closed', 'closed', '', '57-revision-v1', '', '', '2023-10-30 15:32:03', '2023-10-30 15:32:03', 57, 0, '', '')","postgresql":"INSERT INTO wp_posts (post_author, post_date, post_date_gmt, post_content, post_content_filtered, post_title, post_excerpt, post_status, post_type, comment_status, ping_status, post_password, post_name, to_ping, pinged, post_modified, post_modified_gmt, post_parent, menu_order, post_mime_type, guid) VALUES (1, '2023-10-30 15:32:03', '2023-10-30 15:32:03', '', '', 'Test Page', '', 'inherit', 'revision', 'closed', 'closed', '', '57-revision-v1', '', '', '2023-10-30 15:32:03', '2023-10-30 15:32:03', 57, 0, '', '') RETURNING *"}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"mysql":"INSERT INTO `wp_comments` (`comment_post_ID`, `comment_author_IP`, `comment_author`, `comment_author_email`, `comment_author_url`, `comment_date`, `comment_date_gmt`, `comment_content`, `comment_karma`, `comment_approved`, `comment_agent`, `comment_type`, `comment_parent`, `user_id`) VALUES (55, '10.42.0.8', 'root', 'root@example.localhost', 'http:\/\/example.com\/site', '2023-10-30 15:32:16', '2023-10-30 15:32:16', 'This is a comment', 0, '1', 'Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/118.0.0.0 Safari\/537.36', 'comment', 0, 1)","postgresql":"INSERT INTO wp_comments (\"comment_post_ID\" , comment_author_IP, comment_author, comment_author_email, comment_author_url, comment_date, comment_date_gmt, comment_content, comment_karma, comment_approved, comment_agent, comment_type, comment_parent, user_id) VALUES (55, '10.42.0.8', 'root', 'root@example.localhost', 'http:\/\/example.com\/site', '2023-10-30 15:32:16', '2023-10-30 15:32:16', 'This is a comment', 0, '1', 'Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/118.0.0.0 Safari\/537.36', 'comment', 0, 1)"}
|
||||
{"mysql":"INSERT INTO `wp_comments` (`comment_post_ID`, `comment_author_IP`, `comment_author`, `comment_author_email`, `comment_author_url`, `comment_date`, `comment_date_gmt`, `comment_content`, `comment_karma`, `comment_approved`, `comment_agent`, `comment_type`, `comment_parent`, `user_id`) VALUES (55, '10.42.0.8', 'root', 'root@example.localhost', 'http:\/\/example.com\/site', '2023-10-30 15:32:16', '2023-10-30 15:32:16', 'This is a comment', 0, '1', 'Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/118.0.0.0 Safari\/537.36', 'comment', 0, 1)","postgresql":"INSERT INTO wp_comments (\"comment_post_ID\" , comment_author_IP, comment_author, comment_author_email, comment_author_url, comment_date, comment_date_gmt, comment_content, comment_karma, comment_approved, comment_agent, comment_type, comment_parent, user_id) VALUES (55, '10.42.0.8', 'root', 'root@example.localhost', 'http:\/\/example.com\/site', '2023-10-30 15:32:16', '2023-10-30 15:32:16', 'This is a comment', 0, '1', 'Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/118.0.0.0 Safari\/537.36', 'comment', 0, 1) RETURNING *"}
|
||||
@@ -1 +1 @@
|
||||
{"mysql":"INSERT INTO `wp_sitemeta` (`site_id`, `meta_key`, `meta_value`) VALUES (1, '_site_transient_wp_remote_block_patterns_03fe7d7ccb043466cdff46c6061da4a5', 'O:8:\"WP_Error\":3:{s:6:\"errors\";a:1:{s:19:\"http_request_failed\";a:1:{i:0;s:95:\"cURL error 35: OpenSSL\/3.1.4: error:0A000152:SSL routines::unsafe legacy renegotiation disabled\";}}s:10:\"error_data\";a:0:{}s:18:\"')","postgresql":"INSERT INTO wp_sitemeta (site_id, meta_key, meta_value) VALUES (1, '_site_transient_wp_remote_block_patterns_03fe7d7ccb043466cdff46c6061da4a5', 'O:8:\"WP_Error\":3:{s:6:\"errors\";a:1:{s:19:\"http_request_failed\";a:1:{i:0;s:95:\"cURL error 35: OpenSSL\/3.1.4: error:0A000152:SSL routines::unsafe legacy renegotiation disabled\";}}s:10:\"error_data\";a:0:{}s:18:\"')"}
|
||||
{"mysql":"INSERT INTO `wp_sitemeta` (`site_id`, `meta_key`, `meta_value`) VALUES (1, '_site_transient_wp_remote_block_patterns_03fe7d7ccb043466cdff46c6061da4a5', 'O:8:\"WP_Error\":3:{s:6:\"errors\";a:1:{s:19:\"http_request_failed\";a:1:{i:0;s:95:\"cURL error 35: OpenSSL\/3.1.4: error:0A000152:SSL routines::unsafe legacy renegotiation disabled\";}}s:10:\"error_data\";a:0:{}s:18:\"')","postgresql":"INSERT INTO wp_sitemeta (site_id, meta_key, meta_value) VALUES (1, '_site_transient_wp_remote_block_patterns_03fe7d7ccb043466cdff46c6061da4a5', 'O:8:\"WP_Error\":3:{s:6:\"errors\";a:1:{s:19:\"http_request_failed\";a:1:{i:0;s:95:\"cURL error 35: OpenSSL\/3.1.4: error:0A000152:SSL routines::unsafe legacy renegotiation disabled\";}}s:10:\"error_data\";a:0:{}s:18:\"') RETURNING *"}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"mysql":"INSERT INTO `wp_sitemeta` (`site_id`, `meta_key`, `meta_value`) VALUES (1, '_site_transient_wp_remote_block_patterns_0dc4db57500f00dee60778de7fb84b69', 'O:8:\"WP_Error\":3:{s:6:\"errors\";a:1:{s:19:\"http_request_failed\";a:1:{i:0;s:95:\"cURL error 35: OpenSSL\/3.1.4: error:0A000152:SSL routines::unsafe legacy renegotiation disabled\";}}s:10:\"error_data\";a:0:{}s:18:\"')","postgresql":"INSERT INTO wp_sitemeta (site_id, meta_key, meta_value) VALUES (1, '_site_transient_wp_remote_block_patterns_0dc4db57500f00dee60778de7fb84b69', 'O:8:\"WP_Error\":3:{s:6:\"errors\";a:1:{s:19:\"http_request_failed\";a:1:{i:0;s:95:\"cURL error 35: OpenSSL\/3.1.4: error:0A000152:SSL routines::unsafe legacy renegotiation disabled\";}}s:10:\"error_data\";a:0:{}s:18:\"')"}
|
||||
{"mysql":"INSERT INTO `wp_sitemeta` (`site_id`, `meta_key`, `meta_value`) VALUES (1, '_site_transient_wp_remote_block_patterns_0dc4db57500f00dee60778de7fb84b69', 'O:8:\"WP_Error\":3:{s:6:\"errors\";a:1:{s:19:\"http_request_failed\";a:1:{i:0;s:95:\"cURL error 35: OpenSSL\/3.1.4: error:0A000152:SSL routines::unsafe legacy renegotiation disabled\";}}s:10:\"error_data\";a:0:{}s:18:\"')","postgresql":"INSERT INTO wp_sitemeta (site_id, meta_key, meta_value) VALUES (1, '_site_transient_wp_remote_block_patterns_0dc4db57500f00dee60778de7fb84b69', 'O:8:\"WP_Error\":3:{s:6:\"errors\";a:1:{s:19:\"http_request_failed\";a:1:{i:0;s:95:\"cURL error 35: OpenSSL\/3.1.4: error:0A000152:SSL routines::unsafe legacy renegotiation disabled\";}}s:10:\"error_data\";a:0:{}s:18:\"') RETURNING *"}
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Reference in New Issue
Block a user