Merge pull request #22819 from noec764/14_FIX_getNextValue

FIX: GetNextValue() adding regexsql() function
This commit is contained in:
Laurent Destailleur 2022-12-01 17:27:36 +01:00 committed by GitHub
commit 85e1bd722d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 42 additions and 0 deletions

View File

@ -107,6 +107,25 @@ abstract class DoliDB implements Database
return '';
}
/**
* Format a SQL REGEXP
*
* @param string $subject string tested
* @param string $pattern SQL pattern to match
* @param string $sqlstring whether or not the string being tested is an SQL expression
* @return string SQL string
*/
public function regexpsql($subject, $pattern, $sqlstring = false)
{
if ($sqlstring) {
return "(". $subject ." REGEXP '" . $pattern . "')";
}
return "('". $subject ."' REGEXP '" . $pattern . "')";
}
/**
* Convert (by PHP) a GM Timestamp date into a string date with PHP server TZ to insert into a date field.
* Function to use to build INSERT, UPDATE or WHERE predica

View File

@ -757,6 +757,24 @@ class DoliDBPgsql extends DoliDB
return '(CASE WHEN '.$test.' THEN '.$resok.' ELSE '.$resko.' END)';
}
/**
* Format a SQL REGEXP
*
* @param string $subject string tested
* @param string $pattern SQL pattern to match
* @param string $sqlstring whether or not the string being tested is an SQL expression
* @return string SQL string
*/
public function regexpsql($subject, $pattern, $sqlstring = false)
{
if ($sqlstring) {
return "(". $subject ." ~ '" . $pattern . "')";
}
return "('". $subject ."' ~ '" . $pattern . "')";
}
/**
* Renvoie le code erreur generique de l'operation precedente.
*

View File

@ -1282,6 +1282,11 @@ function get_next_value($db, $mask, $table, $field, $where = '', $objsoc = '', $
$sql .= " FROM ".MAIN_DB_PREFIX.$table;
$sql .= " WHERE ".$field." LIKE '".$db->escape($maskLike)."'";
$sql .= " AND ".$field." NOT LIKE '(PROV%)'";
// To ensure that all variables within the MAX() brackets are integers
$sql .= " AND ". $db->regexpsql($sqlstring, '^[0-9]+$', true);
if ($bentityon) { // only if entity enable
$sql .= " AND entity IN (".getEntity($sharetable).")";
} elseif (!empty($forceentity)) {