Skip to content

Commit a11b45b

Browse files
committed
Eliminate SqlFragment, inline string concatenation in buildSqlString
Replace SqlFragment fluent chain with direct string concatenation in Select, Update, and Delete. Removes 1 object allocation, ~13 method calls, and 1 implode per render. SqlFragment class deleted — no remaining callers. Signed-off-by: Simon Mundy <simon.mundy@peptolab.com>
1 parent f321894 commit a11b45b

File tree

4 files changed

+65
-63
lines changed

4 files changed

+65
-63
lines changed

src/Sql/Delete.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
use PhpDb\Adapter\Driver\DriverInterface;
99
use PhpDb\Adapter\ParameterContainer;
1010
use PhpDb\Adapter\Platform\PlatformInterface;
11-
use PhpDb\Sql\Part\SqlFragment;
1211
use PhpDb\Sql\Part\SqlProcessor;
1312
use PhpDb\Sql\Part\From;
1413
use PhpDb\Sql\Part\Where as WherePart;
@@ -90,9 +89,13 @@ public function buildSqlString(
9089
$processor->setParamPrefix($this->processInfo['paramPrefix']);
9190
$sqlPlatform?->getTypeDecorator($this)?->prepare($this, $processor);
9291

93-
return (string) SqlFragment::of($this->getStatementKeyword())
94-
->part($this->table->toSql($processor))
95-
->part($this->where?->toSql($processor));
92+
$sql = $this->getStatementKeyword() . ' ' . $this->table->toSql($processor);
93+
94+
if (null !== $part = $this->where?->toSql($processor)) {
95+
$sql .= ' ' . $part;
96+
}
97+
98+
return $sql;
9699
}
97100

98101
/**

src/Sql/Part/SqlFragment.php

Lines changed: 0 additions & 40 deletions
This file was deleted.

src/Sql/Select.php

Lines changed: 45 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
use PhpDb\Sql\Part\Offset;
1616
use PhpDb\Sql\Part\OrderBy;
1717
use PhpDb\Sql\Part\Quantifier;
18-
use PhpDb\Sql\Part\SqlFragment;
1918
use PhpDb\Sql\Part\SqlProcessor;
2019
use PhpDb\Sql\Part\Table;
2120
use PhpDb\Sql\Part\Where as WherePart;
@@ -387,18 +386,51 @@ public function buildSqlString(
387386
$sqlPlatform?->getTypeDecorator($this)?->prepare($this, $processor);
388387
$this->table->prepare($processor);
389388

390-
return (string) SqlFragment::of('SELECT')
391-
->part($this->quantifier?->toSql($processor))
392-
->part($this->table->columns()->toSql($processor))
393-
->part($this->table->from()->toSql($processor))
394-
->part($this->table->joins()?->toSql($processor))
395-
->part($this->where?->toSql($processor))
396-
->part($this->groupBy?->toSql($processor))
397-
->part($this->having?->toSql($processor))
398-
->part($this->orderBy?->toSql($processor))
399-
->part($this->limit?->toSql($processor))
400-
->part($this->offset?->toSql($processor))
401-
->wrap($this->combine?->toSql($processor));
389+
$sql = 'SELECT';
390+
391+
if (null !== $part = $this->quantifier?->toSql($processor)) {
392+
$sql .= ' ' . $part;
393+
}
394+
395+
$sql .= ' ' . $this->table->columns()->toSql($processor);
396+
397+
if (null !== $part = $this->table->from()->toSql($processor)) {
398+
$sql .= ' ' . $part;
399+
}
400+
401+
if (null !== $part = $this->table->joins()?->toSql($processor)) {
402+
$sql .= ' ' . $part;
403+
}
404+
405+
if (null !== $part = $this->where?->toSql($processor)) {
406+
$sql .= ' ' . $part;
407+
}
408+
409+
if (null !== $part = $this->groupBy?->toSql($processor)) {
410+
$sql .= ' ' . $part;
411+
}
412+
413+
if (null !== $part = $this->having?->toSql($processor)) {
414+
$sql .= ' ' . $part;
415+
}
416+
417+
if (null !== $part = $this->orderBy?->toSql($processor)) {
418+
$sql .= ' ' . $part;
419+
}
420+
421+
if (null !== $part = $this->limit?->toSql($processor)) {
422+
$sql .= ' ' . $part;
423+
}
424+
425+
if (null !== $part = $this->offset?->toSql($processor)) {
426+
$sql .= ' ' . $part;
427+
}
428+
429+
if (null !== $part = $this->combine?->toSql($processor)) {
430+
$sql = '( ' . $sql . ' ) ' . $part;
431+
}
432+
433+
return $sql;
402434
}
403435

404436
/**

src/Sql/Update.php

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
use PhpDb\Adapter\Platform\PlatformInterface;
1111
use PhpDb\Sql\Part\Joins as JoinsPart;
1212
use PhpDb\Sql\Part\Set as SetPart;
13-
use PhpDb\Sql\Part\SqlFragment;
1413
use PhpDb\Sql\Part\SqlProcessor;
1514
use PhpDb\Sql\Part\From;
1615
use PhpDb\Sql\Part\Where as WherePart;
@@ -136,11 +135,19 @@ public function buildSqlString(
136135
$processor->setParamPrefix($this->processInfo['paramPrefix']);
137136
$sqlPlatform?->getTypeDecorator($this)?->prepare($this, $processor);
138137

139-
return (string) SqlFragment::of($this->getStatementKeyword())
140-
->part($this->table->renderTable($processor))
141-
->part($this->joins?->toSql($processor))
142-
->part($this->set->toSql($processor))
143-
->part($this->where?->toSql($processor));
138+
$sql = $this->getStatementKeyword() . ' ' . $this->table->renderTable($processor);
139+
140+
if (null !== $part = $this->joins?->toSql($processor)) {
141+
$sql .= ' ' . $part;
142+
}
143+
144+
$sql .= ' ' . $this->set->toSql($processor);
145+
146+
if (null !== $part = $this->where?->toSql($processor)) {
147+
$sql .= ' ' . $part;
148+
}
149+
150+
return $sql;
144151
}
145152

146153
/**

0 commit comments

Comments
 (0)