mirror of
https://github.com/PostgreSQL-For-Wordpress/postgresql-for-wordpress.git
synced 2025-07-29 09:17:14 +02:00
Rewrite MySQL FIELD function to CASE statement
PostgreSQL does not provide an equivalent to the MySQL FIELD function. It is possible to create such a function, although the syntax is version-dependent (and creates a persistent database object, which so far has not been done by this plugin). So use a generic CASE statement. Fixes: #12 Signed-off-by: Kevin Locke <kevin@kevinlocke.name>
This commit is contained in:
@ -281,6 +281,22 @@
|
||||
$pattern = '/DATE_ADD[ ]*\(([^,]+),([^\)]+)\)/';
|
||||
$sql = preg_replace( $pattern, '($1 + $2)', $sql);
|
||||
|
||||
// Convert MySQL FIELD function to CASE statement
|
||||
// https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_field
|
||||
// Other implementations: https://stackoverflow.com/q/1309624
|
||||
function pg4wp_rewrite_field($matches)
|
||||
{
|
||||
$case = 'CASE ' . trim($matches[1]);
|
||||
$comparands = explode(',', $matches[2]);
|
||||
foreach($comparands as $i => $comparand) {
|
||||
$case .= ' WHEN ' . trim($comparand) . ' THEN ' . ($i + 1);
|
||||
}
|
||||
$case .= ' ELSE 0 END';
|
||||
return $case;
|
||||
}
|
||||
$pattern = '/FIELD[ ]*\(([^\),]+),([^\)]+)\)/';
|
||||
$sql = preg_replace_callback( $pattern, 'pg4wp_rewrite_field', $sql);
|
||||
|
||||
$pattern = '/GROUP_CONCAT\(([^()]*(\(((?>[^()]+)|(?-2))*\))?[^()]*)\)/x';
|
||||
$sql = preg_replace( $pattern, "string_agg($1, ',')", $sql);
|
||||
|
||||
|
Reference in New Issue
Block a user