mirror of
https://github.com/PostgreSQL-For-Wordpress/postgresql-for-wordpress.git
synced 2025-07-30 01:37:13 +02:00
Moved all the rewriting code to a separate function (for easier testing)
Reworked 'ON DUPLICATE ...' handling, could fail in some cases git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@436145 b8457f37-d9ea-0310-8a92-e5e31aec5664
This commit is contained in:
@ -121,6 +121,48 @@
|
|||||||
$GLOBALS['pg4wp_pre_sql'][] = $sql;
|
$GLOBALS['pg4wp_pre_sql'][] = $sql;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$sql = pg4wp_rewrite( $sql);
|
||||||
|
|
||||||
|
$GLOBALS['pg4wp_result'] = pg_query($sql);
|
||||||
|
if( (PG4WP_DEBUG || PG4WP_LOG_ERRORS) && $GLOBALS['pg4wp_result'] === false && $err = pg_last_error())
|
||||||
|
if( false === strpos($err, 'relation "'.$wpdb->options.'"'))
|
||||||
|
error_log("Error running :\n$initial\n---- converted to ----\n$sql\n----\n$err\n---------------------\n", 3, PG4WP_LOG.'pg4wp_errors.log');
|
||||||
|
|
||||||
|
if( $catchnumrows && $GLOBALS['pg4wp_result'] !== false)
|
||||||
|
{
|
||||||
|
$GLOBALS['pg4wp_numrows_query'] = $sql;
|
||||||
|
if( PG4WP_DEBUG)
|
||||||
|
error_log( "Number of rows required for :\n$sql\n---------------------\n", 3, PG4WP_LOG.'pg4wp_NUMROWS.log');
|
||||||
|
}
|
||||||
|
return $GLOBALS['pg4wp_result'];
|
||||||
|
}
|
||||||
|
|
||||||
|
function wpsql_insert_id($table)
|
||||||
|
{
|
||||||
|
global $wpdb;
|
||||||
|
$ins_field = $GLOBALS['pg4wp_ins_field'];
|
||||||
|
|
||||||
|
$tbls = split("\n", $GLOBALS['pg4wp_ins_table']); // Workaround for bad tablename
|
||||||
|
$t = $tbls[0] . '_seq';
|
||||||
|
|
||||||
|
if( in_array( $t, array( '_seq', $wpdb->prefix.'term_relationships_seq')))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if( $ins_field == '"cat_ID"' || $ins_field == 'rel_id' || $ins_field == 'term_id')
|
||||||
|
$sql = "SELECT MAX($ins_field) FROM ".$tbls[0];
|
||||||
|
else
|
||||||
|
$sql = "SELECT CURRVAL('$t')";
|
||||||
|
|
||||||
|
$res = pg_query($sql);
|
||||||
|
$data = pg_fetch_result($res, 0, 0);
|
||||||
|
if( PG4WP_DEBUG && $sql)
|
||||||
|
error_log("Getting inserted ID for '$t' : $sql => $data\n", 3, PG4WP_LOG.'pg4wp_insertid.log');
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
function pg4wp_rewrite( $sql)
|
||||||
|
{
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
|
|
||||||
$logto = 'queries';
|
$logto = 'queries';
|
||||||
@ -264,10 +306,8 @@
|
|||||||
{
|
{
|
||||||
// Remove 'ON DUPLICATE KEY UPDATE...' and following
|
// Remove 'ON DUPLICATE KEY UPDATE...' and following
|
||||||
$sql = substr( $sql, 0, $pos);
|
$sql = substr( $sql, 0, $pos);
|
||||||
// Remove illegal characters
|
// Get the elements we need (table name, first field, corresponding value)
|
||||||
$sql = str_replace('`', '', $sql);
|
$pattern = '/INSERT INTO\s+([^\(]+)\(([^,]+)[^\(]+VALUES\s*\(([^,]+)/';
|
||||||
// Get the elements we need (table name, first field, value)
|
|
||||||
$pattern = '/INSERT INTO (\w+)\s+\(([^,]+).+VALUES\s+\(([^,]+)/';
|
|
||||||
preg_match($pattern, $sql, $matches);
|
preg_match($pattern, $sql, $matches);
|
||||||
$sql = 'DELETE FROM '.$matches[1].' WHERE '.$matches[2].' = '.$matches[3].';'.$sql;
|
$sql = 'DELETE FROM '.$matches[1].' WHERE '.$matches[2].' = '.$matches[3].';'.$sql;
|
||||||
}
|
}
|
||||||
@ -389,39 +429,5 @@
|
|||||||
else
|
else
|
||||||
error_log("$sql\n---------------------\n", 3, PG4WP_LOG.'pg4wp_unmodified.log');
|
error_log("$sql\n---------------------\n", 3, PG4WP_LOG.'pg4wp_unmodified.log');
|
||||||
}
|
}
|
||||||
$GLOBALS['pg4wp_result'] = pg_query($sql);
|
return $sql;
|
||||||
if( (PG4WP_DEBUG || PG4WP_LOG_ERRORS) && $GLOBALS['pg4wp_result'] === false && $err = pg_last_error())
|
|
||||||
if( false === strpos($err, 'relation "'.$wpdb->options.'"'))
|
|
||||||
error_log("Error running :\n$initial\n---- converted to ----\n$sql\n----\n$err\n---------------------\n", 3, PG4WP_LOG.'pg4wp_errors.log');
|
|
||||||
|
|
||||||
if( $catchnumrows && $GLOBALS['pg4wp_result'] !== false)
|
|
||||||
{
|
|
||||||
$GLOBALS['pg4wp_numrows_query'] = $sql;
|
|
||||||
if( PG4WP_DEBUG)
|
|
||||||
error_log( "Number of rows required for :\n$sql\n---------------------\n", 3, PG4WP_LOG.'pg4wp_NUMROWS.log');
|
|
||||||
}
|
|
||||||
return $GLOBALS['pg4wp_result'];
|
|
||||||
}
|
|
||||||
|
|
||||||
function wpsql_insert_id($table)
|
|
||||||
{
|
|
||||||
global $wpdb;
|
|
||||||
$ins_field = $GLOBALS['pg4wp_ins_field'];
|
|
||||||
|
|
||||||
$tbls = split("\n", $GLOBALS['pg4wp_ins_table']); // Workaround for bad tablename
|
|
||||||
$t = $tbls[0] . '_seq';
|
|
||||||
|
|
||||||
if( in_array( $t, array( '_seq', $wpdb->prefix.'term_relationships_seq')))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if( $ins_field == '"cat_ID"' || $ins_field == 'rel_id' || $ins_field == 'term_id')
|
|
||||||
$sql = "SELECT MAX($ins_field) FROM ".$tbls[0];
|
|
||||||
else
|
|
||||||
$sql = "SELECT CURRVAL('$t')";
|
|
||||||
|
|
||||||
$res = pg_query($sql);
|
|
||||||
$data = pg_fetch_result($res, 0, 0);
|
|
||||||
if( PG4WP_DEBUG && $sql)
|
|
||||||
error_log("Getting inserted ID for '$t' : $sql => $data\n", 3, PG4WP_LOG.'pg4wp_insertid.log');
|
|
||||||
return $data;
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user