- 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;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * 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()) {
 | 
			
		||||
    // Because the other methods don't seem to work right.
 | 
			
		||||
    $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.
 | 
			
		||||
   *
 | 
			
		||||
| 
						 | 
				
			
			@ -567,6 +588,9 @@ abstract class DatabaseConnection extends PDO {
 | 
			
		|||
        $stmt->execute($args, $options);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      // Reset the placeholder numbering.
 | 
			
		||||
      $this->resetPlaceholder();
 | 
			
		||||
 | 
			
		||||
      // Depending on the type of query we may need to return a different value.
 | 
			
		||||
      // See DatabaseConnection::defaultOptions() for a description of each value.
 | 
			
		||||
      switch ($options['return']) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -68,6 +68,8 @@ class DatabaseConnection_pgsql extends DatabaseConnection {
 | 
			
		|||
        $stmt = $this->prepareQuery($query, !$modified);
 | 
			
		||||
        $stmt->execute($args, $options);
 | 
			
		||||
      }
 | 
			
		||||
      // Reset the placeholder numbering.
 | 
			
		||||
      $this->resetPlaceholder();
 | 
			
		||||
 | 
			
		||||
      switch ($options['return']) {
 | 
			
		||||
        case Database::RETURN_STATEMENT:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1161,13 +1161,6 @@ class DatabaseCondition implements QueryConditionInterface, Countable {
 | 
			
		|||
  }
 | 
			
		||||
 | 
			
		||||
  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) {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1220,7 +1213,7 @@ class DatabaseCondition implements QueryConditionInterface, Countable {
 | 
			
		|||
            }
 | 
			
		||||
            if ($operator['use_value']) {
 | 
			
		||||
              foreach ($condition['value'] as $value) {
 | 
			
		||||
                $placeholder = ':db_condition_placeholder_' . $next_placeholder++;
 | 
			
		||||
                $placeholder = ':db_condition_placeholder_' . $connection->getNextPlaceholder();
 | 
			
		||||
                $arguments[$placeholder] = $value;
 | 
			
		||||
                $placeholders[] = $placeholder;
 | 
			
		||||
              }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue