Skip to content

Commit c4f4284

Browse files
authored
Merge pull request #204 from oohook/master
GroupByExpressionBuilder.php
2 parents ae463a7 + b130665 commit c4f4284

1 file changed

Lines changed: 89 additions & 0 deletions

File tree

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
<?php
2+
/**
3+
* GroupByExpressionBuilder.php
4+
*
5+
* Builds an expression within a 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 oohook <[email protected]>
36+
* @copyright 2010-2016 Justin Swanhart and André Rothe
37+
* @license http://www.debian.org/misc/bsd.license BSD License (3 Clause)
38+
* @version SVN: $Id$
39+
* @example group by id desc
40+
*
41+
*/
42+
43+
namespace PHPSQLParser\builders;
44+
use PHPSQLParser\exceptions\UnableToCreateSQLException;
45+
use PHPSQLParser\utils\ExpressionType;
46+
47+
/**
48+
* This class implements the builder for an alias within the GROUP-BY clause.
49+
* You can overwrite all functions to achieve another handling.
50+
*
51+
* @author oohook <[email protected]>
52+
* @license http://www.debian.org/misc/bsd.license BSD License (3 Clause)
53+
*
54+
*/
55+
class GroupByExpressionBuilder implements Builder {
56+
57+
protected function buildColRef($parsed) {
58+
$builder = new ColumnReferenceBuilder();
59+
return $builder->build($parsed);
60+
}
61+
62+
protected function buildReserved($parsed) {
63+
$builder = new ReservedBuilder();
64+
return $builder->build($parsed);
65+
}
66+
67+
public function build(array $parsed) {
68+
if ($parsed['expr_type'] !== ExpressionType::EXPRESSION) {
69+
return "";
70+
}
71+
72+
$sql = "";
73+
foreach ($parsed['sub_tree'] as $k => $v) {
74+
$len = strlen($sql);
75+
$sql .= $this->buildColRef($v);
76+
$sql .= $this->buildReserved($v);
77+
78+
if ($len == strlen($sql)) {
79+
throw new UnableToCreateSQLException('GROUP expression subtree', $k, $v, 'expr_type');
80+
}
81+
82+
$sql .= " ";
83+
}
84+
85+
$sql = substr($sql, 0, -1);
86+
return $sql;
87+
}
88+
}
89+
?>

0 commit comments

Comments
 (0)