Dotclear

Changeset 3742:00f9590175cb


Ignore:
Timestamp:
03/29/18 13:40:04 (7 years ago)
Author:
franck <carnet.franck.paul@…>
Branch:
default
Message:

Bugfix (ORDER BY clause needs to be after GROUP BY clause)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • inc/core/class.dc.selectstatement.php

    r3741 r3742  
    351351     * @return dcSelectStatement self instance, enabling to chain calls 
    352352     */ 
    353     public function distinct($distinct) 
     353    public function distinct($distinct = true) 
    354354    { 
    355355        $this->distinct = $distinct; 
     
    445445        } 
    446446 
     447        // Group by clause (columns or aliases) 
     448        if (count($this->group)) { 
     449            $query .= 'GROUP BY ' . join(', ', $this->group) . ' '; 
     450        } 
     451 
     452        // Having clause(s) 
     453        if (count($this->having)) { 
     454            $query .= 'HAVING ' . join(' AND ', $this->having) . ' '; 
     455        } 
     456 
    447457        // Order by clause (columns or aliases and optionnaly order ASC/DESC) 
    448458        if (count($this->order)) { 
     
    450460        } 
    451461 
    452         // Group by clause (columns or aliases) 
    453         if (count($this->group)) { 
    454             $query .= 'GROUP BY ' . join(', ', $this->group) . ' '; 
    455         } 
    456  
    457         // Having clause(s) 
    458         if (count($this->having)) { 
    459             $query .= 'HAVING ' . join(' AND ', $this->having) . ' '; 
    460         } 
    461  
    462462        // Limit clause 
    463463        if ($this->limit !== null) { 
     
    472472        return $query; 
    473473    } 
     474 
     475    /** 
     476     * Compare two SQL queries 
     477     * 
     478     * May be used for debugging purpose as: 
     479     * if (!$sql->isSame($sql->statement(), $oldRequest)) { 
     480     *    trigger_error('SQL statement error', E_USER_ERROR); 
     481     * } 
     482     * 
     483     * @param      string   $local     The local 
     484     * @param      string   $external  The external 
     485     * 
     486     * @return     boolean  True if same, False otherwise. 
     487     */ 
     488    public function isSame($local, $external) 
     489    { 
     490        $filter = function ($s) { 
     491            $s = strtoupper($s); 
     492            $patterns = array( 
     493                '\s+' => ' ', // Multiple spaces/tabs -> one space 
     494                ' \)' => ')', // <space>) -> ) 
     495                ' ,'  => ',', // <space>, -> , 
     496                '\( ' => '(' // (<space> -> ( 
     497            ); 
     498            foreach ($patterns as $from => $to) { 
     499                $s = preg_replace('!' . $from . '!', $to, $s); 
     500            } 
     501            return $s; 
     502        }; 
     503        return ($filter($local) !== $filter($external)); 
     504    } 
    474505} 
Note: See TracChangeset for help on using the changeset viewer.

Sites map