- Patch #496500 by Moshe Weitzman, Crell, Berdir: remove global placeholder counter so we can support Views caching.
parent
a9762cd3bf
commit
eac93fa430
|
|
@ -316,6 +316,13 @@ abstract class DatabaseConnection extends PDO {
|
||||||
*/
|
*/
|
||||||
protected $schema = NULL;
|
protected $schema = NULL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A unique number used for dynamic placeholders.
|
||||||
|
*
|
||||||
|
* It gets reset after every executed query.
|
||||||
|
*/
|
||||||
|
protected $nextPlaceholder = 1;
|
||||||
|
|
||||||
function __construct($dsn, $username, $password, $driver_options = array()) {
|
function __construct($dsn, $username, $password, $driver_options = array()) {
|
||||||
// Because the other methods don't seem to work right.
|
// Because the other methods don't seem to work right.
|
||||||
$driver_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
|
$driver_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
|
||||||
|
|
@ -329,6 +336,20 @@ abstract class DatabaseConnection extends PDO {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reset the next placeholder number back to 1.
|
||||||
|
*/
|
||||||
|
public function resetPlaceholder() {
|
||||||
|
$this->nextPlaceholder = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the current unique placeholder number and increment it.
|
||||||
|
*/
|
||||||
|
public function getNextPlaceholder() {
|
||||||
|
return $this->nextPlaceholder++;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the default query options for any given query.
|
* Return the default query options for any given query.
|
||||||
*
|
*
|
||||||
|
|
@ -567,6 +588,9 @@ abstract class DatabaseConnection extends PDO {
|
||||||
$stmt->execute($args, $options);
|
$stmt->execute($args, $options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reset the placeholder numbering.
|
||||||
|
$this->resetPlaceholder();
|
||||||
|
|
||||||
// Depending on the type of query we may need to return a different value.
|
// Depending on the type of query we may need to return a different value.
|
||||||
// See DatabaseConnection::defaultOptions() for a description of each value.
|
// See DatabaseConnection::defaultOptions() for a description of each value.
|
||||||
switch ($options['return']) {
|
switch ($options['return']) {
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,8 @@ class DatabaseConnection_pgsql extends DatabaseConnection {
|
||||||
$stmt = $this->prepareQuery($query, !$modified);
|
$stmt = $this->prepareQuery($query, !$modified);
|
||||||
$stmt->execute($args, $options);
|
$stmt->execute($args, $options);
|
||||||
}
|
}
|
||||||
|
// Reset the placeholder numbering.
|
||||||
|
$this->resetPlaceholder();
|
||||||
|
|
||||||
switch ($options['return']) {
|
switch ($options['return']) {
|
||||||
case Database::RETURN_STATEMENT:
|
case Database::RETURN_STATEMENT:
|
||||||
|
|
|
||||||
|
|
@ -1161,13 +1161,6 @@ class DatabaseCondition implements QueryConditionInterface, Countable {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function compile(DatabaseConnection $connection) {
|
public function compile(DatabaseConnection $connection) {
|
||||||
// This value is static, so it will increment across the entire request
|
|
||||||
// rather than just this query. That is OK, because we only need definitive
|
|
||||||
// placeholder names if we're going to use them for _alter hooks, which we
|
|
||||||
// are not. The alter hook would intervene before compilation.
|
|
||||||
// $next_placeholder does not use drupal_static as it increments and should
|
|
||||||
// never be reset during a request.
|
|
||||||
static $next_placeholder = 1;
|
|
||||||
|
|
||||||
if ($this->changed) {
|
if ($this->changed) {
|
||||||
|
|
||||||
|
|
@ -1220,7 +1213,7 @@ class DatabaseCondition implements QueryConditionInterface, Countable {
|
||||||
}
|
}
|
||||||
if ($operator['use_value']) {
|
if ($operator['use_value']) {
|
||||||
foreach ($condition['value'] as $value) {
|
foreach ($condition['value'] as $value) {
|
||||||
$placeholder = ':db_condition_placeholder_' . $next_placeholder++;
|
$placeholder = ':db_condition_placeholder_' . $connection->getNextPlaceholder();
|
||||||
$arguments[$placeholder] = $value;
|
$arguments[$placeholder] = $value;
|
||||||
$placeholders[] = $placeholder;
|
$placeholders[] = $placeholder;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue