Skip to content

Commit e42ce94

Browse files
committed
Replace array+implode with string interpolation in buildSqlString
Eliminates array allocation and implode call from the hot path, using direct string concatenation with interpolation instead.
1 parent 76e20d0 commit e42ce94

File tree

3 files changed

+23
-26
lines changed

3 files changed

+23
-26
lines changed

src/Sql/Delete.php

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
use PhpDb\Sql\Predicate\PredicateInterface;
1212

1313
use function array_key_exists;
14-
use function implode;
1514
use function strtolower;
1615

1716
/**
@@ -83,16 +82,16 @@ public function buildSqlString(AbstractSqlRenderer $renderer): string
8382
{
8483
$renderer->getTypeDecorator($this)?->prepare($this, $renderer);
8584

86-
$parts = [$this->getStatementKeyword()];
85+
$sql = $this->getStatementKeyword();
8786

8887
if (($part = $this->table->toSql($renderer)) !== null) {
89-
$parts[] = $part;
88+
$sql .= " $part";
9089
}
9190
if (($part = $this->where?->toSql($renderer)) !== null) {
92-
$parts[] = $part;
91+
$sql .= " $part";
9392
}
9493

95-
return implode(' ', $parts);
94+
return $sql;
9695
}
9796

9897
/**

src/Sql/Select.php

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
use function array_key_exists;
2020
use function count;
2121
use function gettype;
22-
use function implode;
2322
use function is_array;
2423
use function is_numeric;
2524
use function is_string;
@@ -379,45 +378,45 @@ public function buildSqlString(AbstractSqlRenderer $renderer): string
379378
{
380379
$renderer->getTypeDecorator($this)?->prepare($this, $renderer);
381380

382-
$parts = ['SELECT'];
381+
$sql = 'SELECT';
383382

384383
if (($part = $this->quantifier?->toSql($renderer)) !== null) {
385-
$parts[] = $part;
384+
$sql .= " $part";
386385
}
387386

388-
$parts[] = $this->table->columns()->toSql($renderer);
387+
$sql .= ' ' . $this->table->columns()->toSql($renderer);
389388

390389
if (($part = $this->table->from()->toSql($renderer)) !== null) {
391-
$parts[] = $part;
390+
$sql .= " $part";
392391
}
393392
if (($part = $this->table->joins()?->toSql($renderer)) !== null) {
394-
$parts[] = $part;
393+
$sql .= " $part";
395394
}
396395
if (($part = $this->where?->toSql($renderer)) !== null) {
397-
$parts[] = $part;
396+
$sql .= " $part";
398397
}
399398
if (($part = $this->groupBy?->toSql($renderer)) !== null) {
400-
$parts[] = $part;
399+
$sql .= " $part";
401400
}
402401
if (($part = $this->having?->toSql($renderer)) !== null) {
403-
$parts[] = $part;
402+
$sql .= " $part";
404403
}
405404
if (($part = $this->orderBy?->toSql($renderer)) !== null) {
406-
$parts[] = $part;
405+
$sql .= " $part";
407406
}
408407
if (($part = $this->limit?->toSql($renderer)) !== null) {
409-
$parts[] = $part;
408+
$sql .= " $part";
410409
}
411410
if (($part = $this->offset?->toSql($renderer)) !== null) {
412-
$parts[] = $part;
411+
$sql .= " $part";
413412
}
414413

415414
$combine = $this->combine?->toSql($renderer);
416415
if ($combine !== null) {
417-
return '( ' . implode(' ', $parts) . ' ) ' . $combine;
416+
return "( $sql ) $combine";
418417
}
419418

420-
return implode(' ', $parts);
419+
return $sql;
421420
}
422421

423422
/**

src/Sql/Update.php

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
use PhpDb\Sql\Predicate\PredicateInterface;
1414

1515
use function array_key_exists;
16-
use function implode;
1716
use function strtolower;
1817

1918
/**
@@ -128,22 +127,22 @@ public function buildSqlString(AbstractSqlRenderer $renderer): string
128127
{
129128
$renderer->getTypeDecorator($this)?->prepare($this, $renderer);
130129

131-
$parts = [$this->getStatementKeyword()];
130+
$sql = $this->getStatementKeyword();
132131

133132
if (($part = $this->table->renderTable($renderer)) !== null) {
134-
$parts[] = $part;
133+
$sql .= " $part";
135134
}
136135
if (($part = $this->joins?->toSql($renderer)) !== null) {
137-
$parts[] = $part;
136+
$sql .= " $part";
138137
}
139138
if (($part = $this->set->toSql($renderer)) !== null) {
140-
$parts[] = $part;
139+
$sql .= " $part";
141140
}
142141
if (($part = $this->where?->toSql($renderer)) !== null) {
143-
$parts[] = $part;
142+
$sql .= " $part";
144143
}
145144

146-
return implode(' ', $parts);
145+
return $sql;
147146
}
148147

149148
/**

0 commit comments

Comments
 (0)