From 67cc9eaef3373da2b5ad8514116bb359540e59cb Mon Sep 17 00:00:00 2001 From: River Tarnell Date: Sun, 11 Mar 2007 15:49:27 +0000 Subject: [PATCH] limitResult() changes need fiddling to put options in right order --- includes/Database.php | 19 ++++++++++--------- includes/DatabaseOracle.php | 12 ++++++------ includes/DatabasePostgres.php | 12 ++++++------ 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/includes/Database.php b/includes/Database.php index 5d56064a81..9d659fd054 100644 --- a/includes/Database.php +++ b/includes/Database.php @@ -984,7 +984,7 @@ class Database { * @return array */ function makeSelectOptions( $options ) { - $tailOpts = ''; + $preLimitTail = $postLimitTail = ''; $startOpts = ''; $noKeyOptions = array(); @@ -994,8 +994,8 @@ class Database { } } - if ( isset( $options['GROUP BY'] ) ) $tailOpts .= " GROUP BY {$options['GROUP BY']}"; - if ( isset( $options['ORDER BY'] ) ) $tailOpts .= " ORDER BY {$options['ORDER BY']}"; + if ( isset( $options['GROUP BY'] ) ) $preLimitTail .= " GROUP BY {$options['GROUP BY']}"; + if ( isset( $options['ORDER BY'] ) ) $preLimitTail .= " ORDER BY {$options['ORDER BY']}"; //if (isset($options['LIMIT'])) { // $tailOpts .= $this->limitResult('', $options['LIMIT'], @@ -1003,8 +1003,8 @@ class Database { // : false); //} - if ( isset( $noKeyOptions['FOR UPDATE'] ) ) $tailOpts .= ' FOR UPDATE'; - if ( isset( $noKeyOptions['LOCK IN SHARE MODE'] ) ) $tailOpts .= ' LOCK IN SHARE MODE'; + if ( isset( $noKeyOptions['FOR UPDATE'] ) ) $postLimitTail .= ' FOR UPDATE'; + if ( isset( $noKeyOptions['LOCK IN SHARE MODE'] ) ) $postLimitTail .= ' LOCK IN SHARE MODE'; if ( isset( $noKeyOptions['DISTINCT'] ) && isset( $noKeyOptions['DISTINCTROW'] ) ) $startOpts .= 'DISTINCT'; # Various MySQL extensions @@ -1023,7 +1023,7 @@ class Database { $useIndex = ''; } - return array( $startOpts, $useIndex, $tailOpts ); + return array( $startOpts, $useIndex, $preLimitTail, $postLimitTail ); } /** @@ -1060,20 +1060,21 @@ class Database { $from = ''; } - list( $startOpts, $useIndex, $tailOpts ) = $this->makeSelectOptions( $options ); + list( $startOpts, $useIndex, $preLimitTail, $postLimitTail ) = $this->makeSelectOptions( $options ); if( !empty( $conds ) ) { if ( is_array( $conds ) ) { $conds = $this->makeList( $conds, LIST_AND ); } - $sql = "SELECT $startOpts $vars $from $useIndex WHERE $conds $tailOpts"; + $sql = "SELECT $startOpts $vars $from $useIndex WHERE $conds $preLimitTail"; } else { - $sql = "SELECT $startOpts $vars $from $useIndex $tailOpts"; + $sql = "SELECT $startOpts $vars $from $useIndex $preLimitTail"; } if (isset($options['LIMIT'])) $sql = $this->limitResult($sql, $options['LIMIT'], isset($options['OFFSET']) ? $options['OFFSET'] : false); + $sql = "$sql $postLimitTail"; return $this->query( $sql, $fname ); } diff --git a/includes/DatabaseOracle.php b/includes/DatabaseOracle.php index 5bcf3ed0e4..ddda0ef264 100644 --- a/includes/DatabaseOracle.php +++ b/includes/DatabaseOracle.php @@ -597,7 +597,7 @@ class DatabaseOracle extends Database { * @return array */ function makeSelectOptions( $options ) { - $tailOpts = ''; + $preLimitTail = $postLimitTail = ''; $startOpts = ''; $noKeyOptions = array(); @@ -607,8 +607,8 @@ class DatabaseOracle extends Database { } } - if ( isset( $options['GROUP BY'] ) ) $tailOpts .= " GROUP BY {$options['GROUP BY']}"; - if ( isset( $options['ORDER BY'] ) ) $tailOpts .= " ORDER BY {$options['ORDER BY']}"; + if ( isset( $options['GROUP BY'] ) ) $preLimitTail .= " GROUP BY {$options['GROUP BY']}"; + if ( isset( $options['ORDER BY'] ) ) $preLimitTail .= " ORDER BY {$options['ORDER BY']}"; if (isset($options['LIMIT'])) { // $tailOpts .= $this->limitResult('', $options['LIMIT'], @@ -616,8 +616,8 @@ class DatabaseOracle extends Database { // : false); } - if ( isset( $noKeyOptions['FOR UPDATE'] ) ) $tailOpts .= ' FOR UPDATE'; - if ( isset( $noKeyOptions['LOCK IN SHARE MODE'] ) ) $tailOpts .= ' LOCK IN SHARE MODE'; + #if ( isset( $noKeyOptions['FOR UPDATE'] ) ) $tailOpts .= ' FOR UPDATE'; + #if ( isset( $noKeyOptions['LOCK IN SHARE MODE'] ) ) $tailOpts .= ' LOCK IN SHARE MODE'; if ( isset( $noKeyOptions['DISTINCT'] ) && isset( $noKeyOptions['DISTINCTROW'] ) ) $startOpts .= 'DISTINCT'; if ( isset( $options['USE INDEX'] ) && ! is_array( $options['USE INDEX'] ) ) { @@ -626,7 +626,7 @@ class DatabaseOracle extends Database { $useIndex = ''; } - return array( $startOpts, $useIndex, $tailOpts ); + return array( $startOpts, $useIndex, $preLimitTail, $postLimitTail ); } public function setTimeout( $timeout ) { diff --git a/includes/DatabasePostgres.php b/includes/DatabasePostgres.php index bc85a7b885..d945e1d814 100644 --- a/includes/DatabasePostgres.php +++ b/includes/DatabasePostgres.php @@ -906,7 +906,7 @@ class DatabasePostgres extends Database { * @return array */ function makeSelectOptions( $options ) { - $tailOpts = ''; + $preLimitTail = $postLimitTail = ''; $startOpts = ''; $noKeyOptions = array(); @@ -916,8 +916,8 @@ class DatabasePostgres extends Database { } } - if ( isset( $options['GROUP BY'] ) ) $tailOpts .= " GROUP BY {$options['GROUP BY']}"; - if ( isset( $options['ORDER BY'] ) ) $tailOpts .= " ORDER BY {$options['ORDER BY']}"; + if ( isset( $options['GROUP BY'] ) ) $preLimitTail .= " GROUP BY {$options['GROUP BY']}"; + if ( isset( $options['ORDER BY'] ) ) $preLimitTail .= " ORDER BY {$options['ORDER BY']}"; //if (isset($options['LIMIT'])) { // $tailOpts .= $this->limitResult('', $options['LIMIT'], @@ -925,8 +925,8 @@ class DatabasePostgres extends Database { // : false); //} - if ( isset( $noKeyOptions['FOR UPDATE'] ) ) $tailOpts .= ' FOR UPDATE'; - if ( isset( $noKeyOptions['LOCK IN SHARE MODE'] ) ) $tailOpts .= ' LOCK IN SHARE MODE'; + if ( isset( $noKeyOptions['FOR UPDATE'] ) ) $postLimitTail .= ' FOR UPDATE'; + if ( isset( $noKeyOptions['LOCK IN SHARE MODE'] ) ) $postLimitTail .= ' LOCK IN SHARE MODE'; if ( isset( $noKeyOptions['DISTINCT'] ) && isset( $noKeyOptions['DISTINCTROW'] ) ) $startOpts .= 'DISTINCT'; if ( isset( $options['USE INDEX'] ) && ! is_array( $options['USE INDEX'] ) ) { @@ -935,7 +935,7 @@ class DatabasePostgres extends Database { $useIndex = ''; } - return array( $startOpts, $useIndex, $tailOpts ); + return array( $startOpts, $useIndex, $preLimitTail, $postLimitTail ); } public function setTimeout( $timeout ) { -- 2.20.1