Skip to content

Commit 97593a7

Browse files
authored
Fix support for orderByPosition (ORDER BY 1 ASC/ORDER BY 1 DESC) (#345)
1 parent ec0ab93 commit 97593a7

3 files changed

Lines changed: 68 additions & 2 deletions

File tree

src/PHPSQLParser/builders/OrderByBuilder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ protected function buildBracketExpression($parsed) {
8484
}
8585

8686
protected function buildPosition($parsed) {
87-
$builder = new PositionBuilder();
87+
$builder = new OrderByPositionBuilder();
8888
return $builder->build($parsed);
8989
}
9090

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
<?php
2+
/**
3+
* PositionBuilder.php
4+
*
5+
* Builds positions of the GROUP BY clause.
6+
*
7+
* PHP version 5
8+
*
9+
* LICENSE:
10+
* Copyright (c) 2010-2014 Justin Swanhart and André Rothe
11+
* All rights reserved.
12+
*
13+
* Redistribution and use in source and binary forms, with or without
14+
* modification, are permitted provided that the following conditions
15+
* are met:
16+
* 1. Redistributions of source code must retain the above copyright
17+
* notice, this list of conditions and the following disclaimer.
18+
* 2. Redistributions in binary form must reproduce the above copyright
19+
* notice, this list of conditions and the following disclaimer in the
20+
* documentation and/or other materials provided with the distribution.
21+
* 3. The name of the author may not be used to endorse or promote products
22+
* derived from this software without specific prior written permission.
23+
*
24+
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
25+
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
26+
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
27+
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
28+
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
29+
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
33+
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34+
*
35+
* @author André Rothe <andre.rothe@phosco.info>
36+
* @copyright 2010-2014 Justin Swanhart and André Rothe
37+
* @license http://www.debian.org/misc/bsd.license BSD License (3 Clause)
38+
* @version SVN: $Id$
39+
*
40+
*/
41+
42+
namespace PHPSQLParser\builders;
43+
use PHPSQLParser\utils\ExpressionType;
44+
45+
/**
46+
* This class implements the builder for positions of the GROUP-BY clause.
47+
* You can overwrite all functions to achieve another handling.
48+
*
49+
* @author André Rothe <andre.rothe@phosco.info>
50+
* @license http://www.debian.org/misc/bsd.license BSD License (3 Clause)
51+
*
52+
*/
53+
class OrderByPositionBuilder implements Builder {
54+
protected function buildDirection($parsed) {
55+
$builder = new DirectionBuilder();
56+
return $builder->build($parsed);
57+
}
58+
59+
public function build(array $parsed) {
60+
if ($parsed['expr_type'] !== ExpressionType::POSITION) {
61+
return "";
62+
}
63+
return $parsed['base_expr'] . $this->buildDirection($parsed);
64+
}
65+
}
66+
?>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
SELECT c1, c2 FROM t ORDER BY 1
1+
SELECT c1, c2 FROM t ORDER BY 1 ASC

0 commit comments

Comments
 (0)