|
11 | 11 | use Packaged\QueryBuilder\SelectExpression\FunctionSelectExpression; |
12 | 12 | use Packaged\QueryBuilder\SelectExpression\ISelectExpression; |
13 | 13 | use Packaged\QueryBuilder\SelectExpression\NowSelectExpression; |
| 14 | +use Packaged\QueryBuilder\SelectExpression\ReplaceSelectExpression; |
14 | 15 | use Packaged\QueryBuilder\SelectExpression\SubQuerySelectExpression; |
15 | 16 | use Packaged\QueryBuilder\SelectExpression\SubStringSelectExpression; |
16 | 17 | use Packaged\QueryBuilder\SelectExpression\TableSelectExpression; |
| 18 | +use Packaged\QueryBuilder\SelectExpression\TrimSelectExpression; |
17 | 19 |
|
18 | 20 | class SelectExpressionAssembler extends AbstractSegmentAssembler |
19 | 21 | { |
@@ -50,6 +52,14 @@ public function assemble() |
50 | 52 | { |
51 | 53 | return $this->assembleSubStringSelectExpression($this->_segment); |
52 | 54 | } |
| 55 | + else if($this->_segment instanceof TrimSelectExpression) |
| 56 | + { |
| 57 | + return $this->assembleTrimSelectExpression($this->_segment); |
| 58 | + } |
| 59 | + else if($this->_segment instanceof ReplaceSelectExpression) |
| 60 | + { |
| 61 | + return $this->assembleReplaceSelectExpression($this->_segment); |
| 62 | + } |
53 | 63 | else if($this->_segment instanceof FormatSelectExpression) |
54 | 64 | { |
55 | 65 | return $this->assembleFormatSelectExpression($this->_segment); |
@@ -181,11 +191,48 @@ public function assembleSubStringSelectExpression( |
181 | 191 | ) |
182 | 192 | { |
183 | 193 | return $expr->getFunctionName() |
184 | | - . '(' |
185 | | - . $this->getAssembler()->assembleSegment($expr->getField()) |
186 | | - . ',' . $expr->getStartPosition() |
187 | | - . ($expr->hasLength() ? ',' . $expr->getLength() : '') |
188 | | - . ')' |
189 | | - . ($expr->hasAlias() ? ' AS ' . $this->escapeField($expr->getAlias()) : ''); |
| 194 | + . '(' |
| 195 | + . $this->getAssembler()->assembleSegment($expr->getField()) |
| 196 | + . ',' . $expr->getStartPosition() |
| 197 | + . ($expr->hasLength() ? ',' . $expr->getLength() : '') |
| 198 | + . ')' |
| 199 | + . ($expr->hasAlias() ? ' AS ' . $this->escapeField($expr->getAlias()) : ''); |
| 200 | + } |
| 201 | + |
| 202 | + public function assembleTrimSelectExpression(TrimSelectExpression $expr) |
| 203 | + { |
| 204 | + $build = []; |
| 205 | + if($expr->hasSide()) |
| 206 | + { |
| 207 | + $build[] = $expr->getSide(); |
| 208 | + } |
| 209 | + if($expr->hasString()) |
| 210 | + { |
| 211 | + $build[] = $this->getAssembler()->assembleSegment($expr->getString()); |
| 212 | + } |
| 213 | + if($expr->hasSide() || $expr->hasString()) |
| 214 | + { |
| 215 | + $build[] = 'FROM'; |
| 216 | + } |
| 217 | + $build[] = $this->getAssembler()->assembleSegment($expr->getField()); |
| 218 | + |
| 219 | + return sprintf( |
| 220 | + '%s(%s)%s', |
| 221 | + $expr->getFunctionName(), |
| 222 | + implode(' ', $build), |
| 223 | + $expr->hasAlias() ? ' AS ' . $this->escapeField($expr->getAlias()) : '' |
| 224 | + ); |
| 225 | + } |
| 226 | + |
| 227 | + public function assembleReplaceSelectExpression(ReplaceSelectExpression $expr) |
| 228 | + { |
| 229 | + return sprintf( |
| 230 | + '%s(%s,%s,%s)%s', |
| 231 | + $expr->getFunctionName(), |
| 232 | + $this->getAssembler()->assembleSegment($expr->getField()), |
| 233 | + $this->getAssembler()->assembleSegment($expr->getSearchString()), |
| 234 | + $this->getAssembler()->assembleSegment($expr->getReplaceString()), |
| 235 | + $expr->hasAlias() ? ' AS ' . $this->escapeField($expr->getAlias()) : '' |
| 236 | + ); |
190 | 237 | } |
191 | 238 | } |
0 commit comments