-
Notifications
You must be signed in to change notification settings - Fork 159
Expand file tree
/
Copy pathInsertDataSQL.php
More file actions
37 lines (30 loc) · 1.31 KB
/
InsertDataSQL.php
File metadata and controls
37 lines (30 loc) · 1.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php namespace DBDiff\SQLGen\DiffToSQL;
use DBDiff\SQLGen\SQLGenInterface;
use DBDiff\SQLGen\Dialect\DialectRegistry;
use DBDiff\SQLGen\Dialect\SQLDialectInterface;
use DBDiff\DB\Data\BinaryValue;
class InsertDataSQL implements SQLGenInterface {
protected $obj;
protected SQLDialectInterface $dialect;
public function __construct($obj, SQLDialectInterface $dialect = null) {
$this->obj = $obj;
$this->dialect = $dialect ?? DialectRegistry::get();
}
public function getUp(): string {
$t = $this->dialect->quote($this->obj->table);
$d = $this->dialect;
$row = $this->obj->diff['diff']->getNewValue();
$cols = implode(',', array_map(fn($c) => $d->quote($c), array_keys($row)));
$values = array_map(fn($el) => BinaryValue::formatSQL($el), $row);
return "INSERT INTO $t ($cols) VALUES(" . implode(',', $values) . ");";
}
public function getDown(): string {
$t = $this->dialect->quote($this->obj->table);
$d = $this->dialect;
$keys = $this->obj->diff['keys'];
array_walk($keys, function (&$value, $column) use ($d) {
$value = BinaryValue::formatCondition($d->quote($column), $value);
});
return "DELETE FROM $t WHERE " . implode(' AND ', $keys) . ';';
}
}