mirror of
https://github.com/dg/dibi.git
synced 2025-08-11 16:44:30 +02:00
cs whitespace
This commit is contained in:
@@ -55,6 +55,7 @@ class DibiExtension22 extends Nette\DI\CompilerExtension
|
|||||||
foreach ((array) $config['flags'] as $flag) {
|
foreach ((array) $config['flags'] as $flag) {
|
||||||
$flags |= constant($flag);
|
$flags |= constant($flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
$config['flags'] = $flags;
|
$config['flags'] = $flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -68,6 +69,7 @@ class DibiExtension22 extends Nette\DI\CompilerExtension
|
|||||||
[[Dibi\Bridges\Tracy\Panel::class, 'renderException']]
|
[[Dibi\Bridges\Tracy\Panel::class, 'renderException']]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($useProfiler) {
|
if ($useProfiler) {
|
||||||
$panel = $container->addDefinition($this->prefix('panel'))
|
$panel = $container->addDefinition($this->prefix('panel'))
|
||||||
->setFactory(Dibi\Bridges\Tracy\Panel::class, [
|
->setFactory(Dibi\Bridges\Tracy\Panel::class, [
|
||||||
|
@@ -58,6 +58,7 @@ class Panel implements Tracy\IBarPanel
|
|||||||
if (($event->type & $this->filter) === 0) {
|
if (($event->type & $this->filter) === 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->events[] = $event;
|
$this->events[] = $event;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,6 +89,7 @@ class Panel implements Tracy\IBarPanel
|
|||||||
foreach ($this->events as $event) {
|
foreach ($this->events as $event) {
|
||||||
$totalTime += $event->time;
|
$totalTime += $event->time;
|
||||||
}
|
}
|
||||||
|
|
||||||
return '<span title="dibi"><svg viewBox="0 0 2048 2048" style="vertical-align: bottom; width:1.23em; height:1.55em"><path fill="' . ($count ? '#b079d6' : '#aaa') . '" d="M1024 896q237 0 443-43t325-127v170q0 69-103 128t-280 93.5-385 34.5-385-34.5-280-93.5-103-128v-170q119 84 325 127t443 43zm0 768q237 0 443-43t325-127v170q0 69-103 128t-280 93.5-385 34.5-385-34.5-280-93.5-103-128v-170q119 84 325 127t443 43zm0-384q237 0 443-43t325-127v170q0 69-103 128t-280 93.5-385 34.5-385-34.5-280-93.5-103-128v-170q119 84 325 127t443 43zm0-1152q208 0 385 34.5t280 93.5 103 128v128q0 69-103 128t-280 93.5-385 34.5-385-34.5-280-93.5-103-128v-128q0-69 103-128t280-93.5 385-34.5z"/></svg><span class="tracy-label">'
|
return '<span title="dibi"><svg viewBox="0 0 2048 2048" style="vertical-align: bottom; width:1.23em; height:1.55em"><path fill="' . ($count ? '#b079d6' : '#aaa') . '" d="M1024 896q237 0 443-43t325-127v170q0 69-103 128t-280 93.5-385 34.5-385-34.5-280-93.5-103-128v-170q119 84 325 127t443 43zm0 768q237 0 443-43t325-127v170q0 69-103 128t-280 93.5-385 34.5-385-34.5-280-93.5-103-128v-170q119 84 325 127t443 43zm0-384q237 0 443-43t325-127v170q0 69-103 128t-280 93.5-385 34.5-385-34.5-280-93.5-103-128v-170q119 84 325 127t443 43zm0-1152q208 0 385 34.5t280 93.5 103 128v128q0 69-103 128t-280 93.5-385 34.5-385-34.5-280-93.5-103-128v-128q0-69 103-128t280-93.5 385-34.5z"/></svg><span class="tracy-label">'
|
||||||
. $count . "\u{a0}queries"
|
. $count . "\u{a0}queries"
|
||||||
. ($totalTime ? ' / ' . number_format($totalTime * 1000, 1, '.', "\u{202f}") . "\u{202f}ms" : '')
|
. ($totalTime ? ' / ' . number_format($totalTime * 1000, 1, '.', "\u{202f}") . "\u{202f}ms" : '')
|
||||||
@@ -128,6 +130,7 @@ class Panel implements Tracy\IBarPanel
|
|||||||
$explain = @Helpers::dump($connection->nativeQuery("$cmd $event->sql"), true);
|
$explain = @Helpers::dump($connection->nativeQuery("$cmd $event->sql"), true);
|
||||||
} catch (Dibi\Exception $e) {
|
} catch (Dibi\Exception $e) {
|
||||||
}
|
}
|
||||||
|
|
||||||
[$connection->onEvent, \dibi::$numOfQueries, \dibi::$totalTime] = $backup;
|
[$connection->onEvent, \dibi::$numOfQueries, \dibi::$totalTime] = $backup;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,6 +145,7 @@ class Panel implements Tracy\IBarPanel
|
|||||||
if ($explain) {
|
if ($explain) {
|
||||||
$s .= "<div id='tracy-debug-DibiProfiler-row-$counter' class='tracy-collapsed'>{$explain}</div>";
|
$s .= "<div id='tracy-debug-DibiProfiler-row-$counter' class='tracy-collapsed'>{$explain}</div>";
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($event->source) {
|
if ($event->source) {
|
||||||
$s .= Tracy\Helpers::editorLink($event->source[0], $event->source[1]); //->class('tracy-DibiProfiler-source');
|
$s .= Tracy\Helpers::editorLink($event->source[0], $event->source[1]); //->class('tracy-DibiProfiler-source');
|
||||||
}
|
}
|
||||||
|
@@ -150,16 +150,17 @@ class Connection implements IConnection
|
|||||||
if ($event) {
|
if ($event) {
|
||||||
$this->onEvent($event->done());
|
$this->onEvent($event->done());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($this->config['onConnect'])) {
|
if (isset($this->config['onConnect'])) {
|
||||||
foreach ($this->config['onConnect'] as $sql) {
|
foreach ($this->config['onConnect'] as $sql) {
|
||||||
$this->query($sql);
|
$this->query($sql);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (DriverException $e) {
|
} catch (DriverException $e) {
|
||||||
if ($event) {
|
if ($event) {
|
||||||
$this->onEvent($event->done($e));
|
$this->onEvent($event->done($e));
|
||||||
}
|
}
|
||||||
|
|
||||||
throw $e;
|
throw $e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -207,6 +208,7 @@ class Connection implements IConnection
|
|||||||
if (!$this->driver) {
|
if (!$this->driver) {
|
||||||
$this->connect();
|
$this->connect();
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->driver;
|
return $this->driver;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -232,6 +234,7 @@ class Connection implements IConnection
|
|||||||
if (!$this->driver) {
|
if (!$this->driver) {
|
||||||
$this->connect();
|
$this->connect();
|
||||||
}
|
}
|
||||||
|
|
||||||
return (clone $this->translator)->translate($args);
|
return (clone $this->translator)->translate($args);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -252,6 +255,7 @@ class Connection implements IConnection
|
|||||||
} else {
|
} else {
|
||||||
echo get_class($e) . ': ' . $e->getMessage() . (PHP_SAPI === 'cli' ? "\n" : '<br>');
|
echo get_class($e) . ': ' . $e->getMessage() . (PHP_SAPI === 'cli' ? "\n" : '<br>');
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -287,6 +291,7 @@ class Connection implements IConnection
|
|||||||
if ($event) {
|
if ($event) {
|
||||||
$this->onEvent($event->done($e));
|
$this->onEvent($event->done($e));
|
||||||
}
|
}
|
||||||
|
|
||||||
throw $e;
|
throw $e;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -294,6 +299,7 @@ class Connection implements IConnection
|
|||||||
if ($event) {
|
if ($event) {
|
||||||
$this->onEvent($event->done($res));
|
$this->onEvent($event->done($res));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -307,10 +313,12 @@ class Connection implements IConnection
|
|||||||
if (!$this->driver) {
|
if (!$this->driver) {
|
||||||
$this->connect();
|
$this->connect();
|
||||||
}
|
}
|
||||||
|
|
||||||
$rows = $this->driver->getAffectedRows();
|
$rows = $this->driver->getAffectedRows();
|
||||||
if ($rows === null || $rows < 0) {
|
if ($rows === null || $rows < 0) {
|
||||||
throw new Exception('Cannot retrieve number of affected rows.');
|
throw new Exception('Cannot retrieve number of affected rows.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $rows;
|
return $rows;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -324,10 +332,12 @@ class Connection implements IConnection
|
|||||||
if (!$this->driver) {
|
if (!$this->driver) {
|
||||||
$this->connect();
|
$this->connect();
|
||||||
}
|
}
|
||||||
|
|
||||||
$id = $this->driver->getInsertId($sequence);
|
$id = $this->driver->getInsertId($sequence);
|
||||||
if ($id === null) {
|
if ($id === null) {
|
||||||
throw new Exception('Cannot retrieve last generated ID.');
|
throw new Exception('Cannot retrieve last generated ID.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $id;
|
return $id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -344,17 +354,18 @@ class Connection implements IConnection
|
|||||||
if (!$this->driver) {
|
if (!$this->driver) {
|
||||||
$this->connect();
|
$this->connect();
|
||||||
}
|
}
|
||||||
|
|
||||||
$event = $this->onEvent ? new Event($this, Event::BEGIN, $savepoint) : null;
|
$event = $this->onEvent ? new Event($this, Event::BEGIN, $savepoint) : null;
|
||||||
try {
|
try {
|
||||||
$this->driver->begin($savepoint);
|
$this->driver->begin($savepoint);
|
||||||
if ($event) {
|
if ($event) {
|
||||||
$this->onEvent($event->done());
|
$this->onEvent($event->done());
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (DriverException $e) {
|
} catch (DriverException $e) {
|
||||||
if ($event) {
|
if ($event) {
|
||||||
$this->onEvent($event->done($e));
|
$this->onEvent($event->done($e));
|
||||||
}
|
}
|
||||||
|
|
||||||
throw $e;
|
throw $e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -372,17 +383,18 @@ class Connection implements IConnection
|
|||||||
if (!$this->driver) {
|
if (!$this->driver) {
|
||||||
$this->connect();
|
$this->connect();
|
||||||
}
|
}
|
||||||
|
|
||||||
$event = $this->onEvent ? new Event($this, Event::COMMIT, $savepoint) : null;
|
$event = $this->onEvent ? new Event($this, Event::COMMIT, $savepoint) : null;
|
||||||
try {
|
try {
|
||||||
$this->driver->commit($savepoint);
|
$this->driver->commit($savepoint);
|
||||||
if ($event) {
|
if ($event) {
|
||||||
$this->onEvent($event->done());
|
$this->onEvent($event->done());
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (DriverException $e) {
|
} catch (DriverException $e) {
|
||||||
if ($event) {
|
if ($event) {
|
||||||
$this->onEvent($event->done($e));
|
$this->onEvent($event->done($e));
|
||||||
}
|
}
|
||||||
|
|
||||||
throw $e;
|
throw $e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -400,17 +412,18 @@ class Connection implements IConnection
|
|||||||
if (!$this->driver) {
|
if (!$this->driver) {
|
||||||
$this->connect();
|
$this->connect();
|
||||||
}
|
}
|
||||||
|
|
||||||
$event = $this->onEvent ? new Event($this, Event::ROLLBACK, $savepoint) : null;
|
$event = $this->onEvent ? new Event($this, Event::ROLLBACK, $savepoint) : null;
|
||||||
try {
|
try {
|
||||||
$this->driver->rollback($savepoint);
|
$this->driver->rollback($savepoint);
|
||||||
if ($event) {
|
if ($event) {
|
||||||
$this->onEvent($event->done());
|
$this->onEvent($event->done());
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (DriverException $e) {
|
} catch (DriverException $e) {
|
||||||
if ($event) {
|
if ($event) {
|
||||||
$this->onEvent($event->done($e));
|
$this->onEvent($event->done($e));
|
||||||
}
|
}
|
||||||
|
|
||||||
throw $e;
|
throw $e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -433,6 +446,7 @@ class Connection implements IConnection
|
|||||||
if ($this->transactionDepth === 0) {
|
if ($this->transactionDepth === 0) {
|
||||||
$this->rollback();
|
$this->rollback();
|
||||||
}
|
}
|
||||||
|
|
||||||
throw $e;
|
throw $e;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -484,6 +498,7 @@ class Connection implements IConnection
|
|||||||
if ($args instanceof Traversable) {
|
if ($args instanceof Traversable) {
|
||||||
$args = iterator_to_array($args);
|
$args = iterator_to_array($args);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->command()->insert()
|
return $this->command()->insert()
|
||||||
->into('%n', $table, '(%n)', array_keys($args))->values('%l', $args);
|
->into('%n', $table, '(%n)', array_keys($args))->values('%l', $args);
|
||||||
}
|
}
|
||||||
@@ -601,6 +616,7 @@ class Connection implements IConnection
|
|||||||
if (!$this->driver) {
|
if (!$this->driver) {
|
||||||
$this->connect();
|
$this->connect();
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Reflection\Database($this->driver->getReflector(), $this->config['database'] ?? null);
|
return new Reflection\Database($this->driver->getReflector(), $this->config['database'] ?? null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -72,6 +72,7 @@ class DataSource implements IDataSource
|
|||||||
} else {
|
} else {
|
||||||
$this->cols[$col] = $as;
|
$this->cols[$col] = $as;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->result = null;
|
$this->result = null;
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
@@ -101,6 +102,7 @@ class DataSource implements IDataSource
|
|||||||
} else {
|
} else {
|
||||||
$this->sorting[$row] = $direction;
|
$this->sorting[$row] = $direction;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->result = null;
|
$this->result = null;
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
@@ -135,6 +137,7 @@ class DataSource implements IDataSource
|
|||||||
if ($this->result === null) {
|
if ($this->result === null) {
|
||||||
$this->result = $this->connection->nativeQuery($this->__toString());
|
$this->result = $this->connection->nativeQuery($this->__toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->result;
|
return $this->result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -262,6 +265,7 @@ class DataSource implements IDataSource
|
|||||||
)->fetchSingle())
|
)->fetchSingle())
|
||||||
: $this->getTotalCount();
|
: $this->getTotalCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->count;
|
return $this->count;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -276,6 +280,7 @@ class DataSource implements IDataSource
|
|||||||
'SELECT COUNT(*) FROM ' . $this->sql
|
'SELECT COUNT(*) FROM ' . $this->sql
|
||||||
)->fetchSingle());
|
)->fetchSingle());
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->totalCount;
|
return $this->totalCount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -101,10 +101,10 @@ class FirebirdDriver implements Dibi\Driver
|
|||||||
} else {
|
} else {
|
||||||
throw new Dibi\DriverException(ibase_errmsg(), ibase_errcode(), $sql);
|
throw new Dibi\DriverException(ibase_errmsg(), ibase_errcode(), $sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
} elseif (is_resource($res)) {
|
} elseif (is_resource($res)) {
|
||||||
return $this->createResultDriver($res);
|
return $this->createResultDriver($res);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -136,6 +136,7 @@ class FirebirdDriver implements Dibi\Driver
|
|||||||
if ($savepoint !== null) {
|
if ($savepoint !== null) {
|
||||||
throw new Dibi\NotSupportedException('Savepoints are not supported in Firebird/Interbase.');
|
throw new Dibi\NotSupportedException('Savepoints are not supported in Firebird/Interbase.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->transaction = ibase_trans($this->getResource());
|
$this->transaction = ibase_trans($this->getResource());
|
||||||
$this->inTransaction = true;
|
$this->inTransaction = true;
|
||||||
}
|
}
|
||||||
|
@@ -47,6 +47,7 @@ class FirebirdReflector implements Dibi\Reflector
|
|||||||
'view' => $row[1] === 'TRUE',
|
'view' => $row[1] === 'TRUE',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $tables;
|
return $tables;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,6 +100,7 @@ class FirebirdReflector implements Dibi\Reflector
|
|||||||
'autoincrement' => false,
|
'autoincrement' => false,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $columns;
|
return $columns;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,6 +133,7 @@ class FirebirdReflector implements Dibi\Reflector
|
|||||||
$indexes[$key]['table'] = $table;
|
$indexes[$key]['table'] = $table;
|
||||||
$indexes[$key]['columns'][$row['FIELD_POSITION']] = $row['FIELD_NAME'];
|
$indexes[$key]['columns'][$row['FIELD_POSITION']] = $row['FIELD_NAME'];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $indexes;
|
return $indexes;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -159,6 +162,7 @@ class FirebirdReflector implements Dibi\Reflector
|
|||||||
'table' => $table,
|
'table' => $table,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $keys;
|
return $keys;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -179,6 +183,7 @@ class FirebirdReflector implements Dibi\Reflector
|
|||||||
while ($row = $res->fetch(false)) {
|
while ($row = $res->fetch(false)) {
|
||||||
$indices[] = $row[0];
|
$indices[] = $row[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $indices;
|
return $indices;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,6 +206,7 @@ class FirebirdReflector implements Dibi\Reflector
|
|||||||
while ($row = $res->fetch(false)) {
|
while ($row = $res->fetch(false)) {
|
||||||
$constraints[] = $row[0];
|
$constraints[] = $row[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $constraints;
|
return $constraints;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -248,6 +254,7 @@ class FirebirdReflector implements Dibi\Reflector
|
|||||||
'enabled' => trim($row['TRIGGER_ENABLED']) === 'TRUE',
|
'enabled' => trim($row['TRIGGER_ENABLED']) === 'TRUE',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $triggers;
|
return $triggers;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -270,6 +277,7 @@ class FirebirdReflector implements Dibi\Reflector
|
|||||||
while ($row = $res->fetch(false)) {
|
while ($row = $res->fetch(false)) {
|
||||||
$triggers[] = $row[0];
|
$triggers[] = $row[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $triggers;
|
return $triggers;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -321,6 +329,7 @@ class FirebirdReflector implements Dibi\Reflector
|
|||||||
$procedures[$key]['params'][$io][$num]['type'] = trim($row['FIELD_TYPE']);
|
$procedures[$key]['params'][$io][$num]['type'] = trim($row['FIELD_TYPE']);
|
||||||
$procedures[$key]['params'][$io][$num]['size'] = $row['FIELD_LENGTH'];
|
$procedures[$key]['params'][$io][$num]['size'] = $row['FIELD_LENGTH'];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $procedures;
|
return $procedures;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -338,6 +347,7 @@ class FirebirdReflector implements Dibi\Reflector
|
|||||||
while ($row = $res->fetch(false)) {
|
while ($row = $res->fetch(false)) {
|
||||||
$procedures[] = $row[0];
|
$procedures[] = $row[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $procedures;
|
return $procedures;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -356,6 +366,7 @@ class FirebirdReflector implements Dibi\Reflector
|
|||||||
while ($row = $res->fetch(false)) {
|
while ($row = $res->fetch(false)) {
|
||||||
$generators[] = $row[0];
|
$generators[] = $row[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $generators;
|
return $generators;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -374,6 +385,7 @@ class FirebirdReflector implements Dibi\Reflector
|
|||||||
while ($row = $res->fetch(false)) {
|
while ($row = $res->fetch(false)) {
|
||||||
$functions[] = $row[0];
|
$functions[] = $row[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $functions;
|
return $functions;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -126,6 +126,7 @@ class FirebirdResult implements Dibi\ResultDriver
|
|||||||
'nativetype' => $row['type'],
|
'nativetype' => $row['type'],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $columns;
|
return $columns;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -43,6 +43,7 @@ class MySqlReflector implements Dibi\Reflector
|
|||||||
'view' => isset($row[1]) && $row[1] === 'VIEW',
|
'view' => isset($row[1]) && $row[1] === 'VIEW',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $tables;
|
return $tables;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,6 +68,7 @@ class MySqlReflector implements Dibi\Reflector
|
|||||||
'vendor' => $row,
|
'vendor' => $row,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $columns;
|
return $columns;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,6 +86,7 @@ class MySqlReflector implements Dibi\Reflector
|
|||||||
$indexes[$row['Key_name']]['primary'] = $row['Key_name'] === 'PRIMARY';
|
$indexes[$row['Key_name']]['primary'] = $row['Key_name'] === 'PRIMARY';
|
||||||
$indexes[$row['Key_name']]['columns'][$row['Seq_in_index'] - 1] = $row['Column_name'];
|
$indexes[$row['Key_name']]['columns'][$row['Seq_in_index'] - 1] = $row['Column_name'];
|
||||||
}
|
}
|
||||||
|
|
||||||
return array_values($indexes);
|
return array_values($indexes);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,6 +126,7 @@ class MySqlReflector implements Dibi\Reflector
|
|||||||
$foreignKeys[$keyName]['onDelete'] = $row['DELETE_RULE'];
|
$foreignKeys[$keyName]['onDelete'] = $row['DELETE_RULE'];
|
||||||
$foreignKeys[$keyName]['onUpdate'] = $row['UPDATE_RULE'];
|
$foreignKeys[$keyName]['onUpdate'] = $row['UPDATE_RULE'];
|
||||||
}
|
}
|
||||||
|
|
||||||
return array_values($foreignKeys);
|
return array_values($foreignKeys);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -88,6 +88,7 @@ class MySqliDriver implements Dibi\Driver
|
|||||||
$this->connection->options($key, $value);
|
$this->connection->options($key, $value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@$this->connection->real_connect( // intentionally @
|
@$this->connection->real_connect( // intentionally @
|
||||||
(empty($config['persistent']) ? '' : 'p:') . $config['host'],
|
(empty($config['persistent']) ? '' : 'p:') . $config['host'],
|
||||||
$config['username'],
|
$config['username'],
|
||||||
@@ -153,6 +154,7 @@ class MySqliDriver implements Dibi\Driver
|
|||||||
} elseif ($res instanceof \mysqli_result) {
|
} elseif ($res instanceof \mysqli_result) {
|
||||||
return $this->createResultDriver($res);
|
return $this->createResultDriver($res);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,6 +193,7 @@ class MySqliDriver implements Dibi\Driver
|
|||||||
foreach ($matches as $m) {
|
foreach ($matches as $m) {
|
||||||
$res[$m[1]] = (int) $m[2];
|
$res[$m[1]] = (int) $m[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -319,6 +322,7 @@ class MySqliDriver implements Dibi\Driver
|
|||||||
if ($value->y || $value->m || $value->d) {
|
if ($value->y || $value->m || $value->d) {
|
||||||
throw new Dibi\NotSupportedException('Only time interval is supported.');
|
throw new Dibi\NotSupportedException('Only time interval is supported.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $value->format("'%r%H:%I:%S.%f'");
|
return $value->format("'%r%H:%I:%S.%f'");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -55,6 +55,7 @@ class MySqliResult implements Dibi\ResultDriver
|
|||||||
if (!$this->buffered) {
|
if (!$this->buffered) {
|
||||||
throw new Dibi\NotSupportedException('Row count is not available for unbuffered queries.');
|
throw new Dibi\NotSupportedException('Row count is not available for unbuffered queries.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->resultSet->num_rows;
|
return $this->resultSet->num_rows;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,6 +81,7 @@ class MySqliResult implements Dibi\ResultDriver
|
|||||||
if (!$this->buffered) {
|
if (!$this->buffered) {
|
||||||
throw new Dibi\NotSupportedException('Cannot seek an unbuffered result set.');
|
throw new Dibi\NotSupportedException('Cannot seek an unbuffered result set.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->resultSet->data_seek($row);
|
return $this->resultSet->data_seek($row);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -107,6 +109,7 @@ class MySqliResult implements Dibi\ResultDriver
|
|||||||
$types[$value] = substr($key, 12);
|
$types[$value] = substr($key, 12);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$types[MYSQLI_TYPE_TINY] = $types[MYSQLI_TYPE_SHORT] = $types[MYSQLI_TYPE_LONG] = 'INT';
|
$types[MYSQLI_TYPE_TINY] = $types[MYSQLI_TYPE_SHORT] = $types[MYSQLI_TYPE_LONG] = 'INT';
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,6 +126,7 @@ class MySqliResult implements Dibi\ResultDriver
|
|||||||
'vendor' => $row,
|
'vendor' => $row,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $columns;
|
return $columns;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -96,6 +96,7 @@ class OdbcDriver implements Dibi\Driver
|
|||||||
? $this->createResultDriver($res)
|
? $this->createResultDriver($res)
|
||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,6 +140,7 @@ class OdbcDriver implements Dibi\Driver
|
|||||||
if (!odbc_commit($this->connection)) {
|
if (!odbc_commit($this->connection)) {
|
||||||
throw new Dibi\DriverException(odbc_errormsg($this->connection) . ' ' . odbc_error($this->connection));
|
throw new Dibi\DriverException(odbc_errormsg($this->connection) . ' ' . odbc_error($this->connection));
|
||||||
}
|
}
|
||||||
|
|
||||||
odbc_autocommit($this->connection, PHP_VERSION_ID < 80000 ? 1 : true);
|
odbc_autocommit($this->connection, PHP_VERSION_ID < 80000 ? 1 : true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,6 +154,7 @@ class OdbcDriver implements Dibi\Driver
|
|||||||
if (!odbc_rollback($this->connection)) {
|
if (!odbc_rollback($this->connection)) {
|
||||||
throw new Dibi\DriverException(odbc_errormsg($this->connection) . ' ' . odbc_error($this->connection));
|
throw new Dibi\DriverException(odbc_errormsg($this->connection) . ' ' . odbc_error($this->connection));
|
||||||
}
|
}
|
||||||
|
|
||||||
odbc_autocommit($this->connection, PHP_VERSION_ID < 80000 ? 1 : true);
|
odbc_autocommit($this->connection, PHP_VERSION_ID < 80000 ? 1 : true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -44,6 +44,7 @@ class OdbcReflector implements Dibi\Reflector
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
odbc_free_result($res);
|
odbc_free_result($res);
|
||||||
return $tables;
|
return $tables;
|
||||||
}
|
}
|
||||||
@@ -68,6 +69,7 @@ class OdbcReflector implements Dibi\Reflector
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
odbc_free_result($res);
|
odbc_free_result($res);
|
||||||
return $columns;
|
return $columns;
|
||||||
}
|
}
|
||||||
|
@@ -72,11 +72,13 @@ class OdbcResult implements Dibi\ResultDriver
|
|||||||
if (!odbc_fetch_row($set, ++$this->row)) {
|
if (!odbc_fetch_row($set, ++$this->row)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$count = odbc_num_fields($set);
|
$count = odbc_num_fields($set);
|
||||||
$cols = [];
|
$cols = [];
|
||||||
for ($i = 1; $i <= $count; $i++) {
|
for ($i = 1; $i <= $count; $i++) {
|
||||||
$cols[] = odbc_result($set, $i);
|
$cols[] = odbc_result($set, $i);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $cols;
|
return $cols;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -116,6 +118,7 @@ class OdbcResult implements Dibi\ResultDriver
|
|||||||
'nativetype' => odbc_field_type($this->resultSet, $i),
|
'nativetype' => odbc_field_type($this->resultSet, $i),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $columns;
|
return $columns;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -104,6 +104,7 @@ class OracleDriver implements Dibi\Driver
|
|||||||
$err = oci_error($this->connection);
|
$err = oci_error($this->connection);
|
||||||
throw new Dibi\DriverException($err['message'], $err['code'], $sql);
|
throw new Dibi\DriverException($err['message'], $err['code'], $sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -163,6 +164,7 @@ class OracleDriver implements Dibi\Driver
|
|||||||
$err = oci_error($this->connection);
|
$err = oci_error($this->connection);
|
||||||
throw new Dibi\DriverException($err['message'], $err['code']);
|
throw new Dibi\DriverException($err['message'], $err['code']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->autocommit = true;
|
$this->autocommit = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,6 +179,7 @@ class OracleDriver implements Dibi\Driver
|
|||||||
$err = oci_error($this->connection);
|
$err = oci_error($this->connection);
|
||||||
throw new Dibi\DriverException($err['message'], $err['code']);
|
throw new Dibi\DriverException($err['message'], $err['code']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->autocommit = true;
|
$this->autocommit = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -44,6 +44,7 @@ class OracleReflector implements Dibi\Reflector
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $tables;
|
return $tables;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,6 +67,7 @@ class OracleReflector implements Dibi\Reflector
|
|||||||
'vendor' => $row,
|
'vendor' => $row,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $columns;
|
return $columns;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -100,6 +100,7 @@ class OracleResult implements Dibi\ResultDriver
|
|||||||
'nativetype' => $type === 'NUMBER' && oci_field_scale($this->resultSet, $i) === 0 ? 'INTEGER' : $type,
|
'nativetype' => $type === 'NUMBER' && oci_field_scale($this->resultSet, $i) === 0 ? 'INTEGER' : $type,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $columns;
|
return $columns;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -60,7 +60,6 @@ class PdoDriver implements Dibi\Driver
|
|||||||
if ($this->connection->getAttribute(PDO::ATTR_ERRMODE) !== PDO::ERRMODE_SILENT) {
|
if ($this->connection->getAttribute(PDO::ATTR_ERRMODE) !== PDO::ERRMODE_SILENT) {
|
||||||
throw new Dibi\DriverException('PDO connection in exception or warning error mode is not supported.');
|
throw new Dibi\DriverException('PDO connection in exception or warning error mode is not supported.');
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
$this->connection = new PDO($config['dsn'], $config['username'], $config['password'], $config['options']);
|
$this->connection = new PDO($config['dsn'], $config['username'], $config['password'], $config['options']);
|
||||||
@@ -69,6 +68,7 @@ class PdoDriver implements Dibi\Driver
|
|||||||
if ($e->getMessage() === 'could not find driver') {
|
if ($e->getMessage() === 'could not find driver') {
|
||||||
throw new Dibi\NotSupportedException('PHP extension for PDO is not loaded.');
|
throw new Dibi\NotSupportedException('PHP extension for PDO is not loaded.');
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new Dibi\DriverException($e->getMessage(), $e->getCode());
|
throw new Dibi\DriverException($e->getMessage(), $e->getCode());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -366,15 +366,18 @@ class PdoDriver implements Dibi\Driver
|
|||||||
$sql .= ' LIMIT ' . ($limit ?? '18446744073709551615')
|
$sql .= ' LIMIT ' . ($limit ?? '18446744073709551615')
|
||||||
. ($offset ? ' OFFSET ' . $offset : '');
|
. ($offset ? ' OFFSET ' . $offset : '');
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'pgsql':
|
case 'pgsql':
|
||||||
if ($limit !== null) {
|
if ($limit !== null) {
|
||||||
$sql .= ' LIMIT ' . $limit;
|
$sql .= ' LIMIT ' . $limit;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($offset) {
|
if ($offset) {
|
||||||
$sql .= ' OFFSET ' . $offset;
|
$sql .= ' OFFSET ' . $offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'sqlite':
|
case 'sqlite':
|
||||||
@@ -382,6 +385,7 @@ class PdoDriver implements Dibi\Driver
|
|||||||
$sql .= ' LIMIT ' . ($limit ?? '-1')
|
$sql .= ' LIMIT ' . ($limit ?? '-1')
|
||||||
. ($offset ? ' OFFSET ' . $offset : '');
|
. ($offset ? ' OFFSET ' . $offset : '');
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'oci':
|
case 'oci':
|
||||||
@@ -394,6 +398,7 @@ class PdoDriver implements Dibi\Driver
|
|||||||
} elseif ($limit !== null) {
|
} elseif ($limit !== null) {
|
||||||
$sql = 'SELECT * FROM (' . $sql . ') WHERE ROWNUM <= ' . $limit;
|
$sql = 'SELECT * FROM (' . $sql . ') WHERE ROWNUM <= ' . $limit;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'mssql':
|
case 'mssql':
|
||||||
@@ -406,10 +411,10 @@ class PdoDriver implements Dibi\Driver
|
|||||||
} elseif ($offset) {
|
} elseif ($offset) {
|
||||||
$sql = sprintf('%s OFFSET %d ROWS', rtrim($sql), $offset);
|
$sql = sprintf('%s OFFSET %d ROWS', rtrim($sql), $offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// break omitted
|
// break omitted
|
||||||
|
|
||||||
case 'odbc':
|
case 'odbc':
|
||||||
if ($offset) {
|
if ($offset) {
|
||||||
throw new Dibi\NotSupportedException('Offset is not supported by this database.');
|
throw new Dibi\NotSupportedException('Offset is not supported by this database.');
|
||||||
@@ -419,7 +424,6 @@ class PdoDriver implements Dibi\Driver
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// break omitted
|
// break omitted
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw new Dibi\NotSupportedException('PDO or driver does not support applying limit or offset.');
|
throw new Dibi\NotSupportedException('PDO or driver does not support applying limit or offset.');
|
||||||
}
|
}
|
||||||
|
@@ -85,6 +85,7 @@ class PdoResult implements Dibi\ResultDriver
|
|||||||
if ($row === false) {
|
if ($row === false) {
|
||||||
throw new Dibi\NotSupportedException('Driver does not support meta data.');
|
throw new Dibi\NotSupportedException('Driver does not support meta data.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$row += [
|
$row += [
|
||||||
'table' => null,
|
'table' => null,
|
||||||
'native_type' => 'VAR_STRING',
|
'native_type' => 'VAR_STRING',
|
||||||
@@ -99,6 +100,7 @@ class PdoResult implements Dibi\ResultDriver
|
|||||||
'vendor' => $row,
|
'vendor' => $row,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $columns;
|
return $columns;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -64,6 +64,7 @@ class PostgreDriver implements Dibi\Driver
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$connectType = $config['connect_type'] ?? PGSQL_CONNECT_FORCE_NEW;
|
$connectType = $config['connect_type'] ?? PGSQL_CONNECT_FORCE_NEW;
|
||||||
|
|
||||||
set_error_handler(function (int $severity, string $message) use (&$error) {
|
set_error_handler(function (int $severity, string $message) use (&$error) {
|
||||||
@@ -127,6 +128,7 @@ class PostgreDriver implements Dibi\Driver
|
|||||||
return $this->createResultDriver($res);
|
return $this->createResultDriver($res);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -264,6 +266,7 @@ class PostgreDriver implements Dibi\Driver
|
|||||||
if (!$this->getResource()) {
|
if (!$this->getResource()) {
|
||||||
throw new Dibi\Exception('Lost connection to server.');
|
throw new Dibi\Exception('Lost connection to server.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return "'" . pg_escape_string($this->connection, $value) . "'";
|
return "'" . pg_escape_string($this->connection, $value) . "'";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -273,6 +276,7 @@ class PostgreDriver implements Dibi\Driver
|
|||||||
if (!$this->getResource()) {
|
if (!$this->getResource()) {
|
||||||
throw new Dibi\Exception('Lost connection to server.');
|
throw new Dibi\Exception('Lost connection to server.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return "'" . pg_escape_bytea($this->connection, $value) . "'";
|
return "'" . pg_escape_bytea($this->connection, $value) . "'";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -328,9 +332,11 @@ class PostgreDriver implements Dibi\Driver
|
|||||||
if ($limit < 0 || $offset < 0) {
|
if ($limit < 0 || $offset < 0) {
|
||||||
throw new Dibi\NotSupportedException('Negative offset or limit.');
|
throw new Dibi\NotSupportedException('Negative offset or limit.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($limit !== null) {
|
if ($limit !== null) {
|
||||||
$sql .= ' LIMIT ' . $limit;
|
$sql .= ' LIMIT ' . $limit;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($offset) {
|
if ($offset) {
|
||||||
$sql .= ' OFFSET ' . $offset;
|
$sql .= ' OFFSET ' . $offset;
|
||||||
}
|
}
|
||||||
|
@@ -66,6 +66,7 @@ class PostgreReflector implements Dibi\Reflector
|
|||||||
while ($row = $res->fetch(true)) {
|
while ($row = $res->fetch(true)) {
|
||||||
$tables[] = $row;
|
$tables[] = $row;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $tables;
|
return $tables;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,6 +132,7 @@ class PostgreReflector implements Dibi\Reflector
|
|||||||
'vendor' => $row,
|
'vendor' => $row,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $columns;
|
return $columns;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -180,6 +182,7 @@ class PostgreReflector implements Dibi\Reflector
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return array_values($indexes);
|
return array_values($indexes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -103,6 +103,7 @@ class PostgreResult implements Dibi\ResultDriver
|
|||||||
: $row['name'];
|
: $row['name'];
|
||||||
$columns[] = $row;
|
$columns[] = $row;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $columns;
|
return $columns;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -92,6 +92,7 @@ class SqliteDriver implements Dibi\Driver
|
|||||||
} elseif ($res instanceof \SQLite3Result && $res->numColumns()) {
|
} elseif ($res instanceof \SQLite3Result && $res->numColumns()) {
|
||||||
return $this->createResultDriver($res);
|
return $this->createResultDriver($res);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -44,6 +44,7 @@ class SqliteReflector implements Dibi\Reflector
|
|||||||
while ($row = $res->fetch(true)) {
|
while ($row = $res->fetch(true)) {
|
||||||
$tables[] = $row;
|
$tables[] = $row;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $tables;
|
return $tables;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,6 +71,7 @@ class SqliteReflector implements Dibi\Reflector
|
|||||||
'vendor' => $row,
|
'vendor' => $row,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $columns;
|
return $columns;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -103,8 +105,10 @@ class SqliteReflector implements Dibi\Reflector
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$indexes[$index]['primary'] = (bool) $primary;
|
$indexes[$index]['primary'] = (bool) $primary;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$indexes) { // @see http://www.sqlite.org/lang_createtable.html#rowid
|
if (!$indexes) { // @see http://www.sqlite.org/lang_createtable.html#rowid
|
||||||
foreach ($columns as $column) {
|
foreach ($columns as $column) {
|
||||||
if ($column['vendor']['pk']) {
|
if ($column['vendor']['pk']) {
|
||||||
@@ -142,6 +146,7 @@ class SqliteReflector implements Dibi\Reflector
|
|||||||
$keys[$row['id']]['foreign'] = null;
|
$keys[$row['id']]['foreign'] = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return array_values($keys);
|
return array_values($keys);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -99,6 +99,7 @@ class SqliteResult implements Dibi\ResultDriver
|
|||||||
'nativetype' => $types[$this->resultSet->columnType($i)] ?? null, // buggy in PHP 7.4.4 & 7.3.16, bug 79414
|
'nativetype' => $types[$this->resultSet->columnType($i)] ?? null, // buggy in PHP 7.4.4 & 7.3.16, bug 79414
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $columns;
|
return $columns;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -56,7 +56,6 @@ class SqlsrvDriver implements Dibi\Driver
|
|||||||
if (!is_resource($this->connection)) {
|
if (!is_resource($this->connection)) {
|
||||||
throw new \InvalidArgumentException("Configuration option 'resource' is not resource.");
|
throw new \InvalidArgumentException("Configuration option 'resource' is not resource.");
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
$options = $config['options'];
|
$options = $config['options'];
|
||||||
|
|
||||||
@@ -72,6 +71,7 @@ class SqlsrvDriver implements Dibi\Driver
|
|||||||
$info = sqlsrv_errors(SQLSRV_ERR_ERRORS);
|
$info = sqlsrv_errors(SQLSRV_ERR_ERRORS);
|
||||||
throw new Dibi\DriverException($info[0]['message'], $info[0]['code']);
|
throw new Dibi\DriverException($info[0]['message'], $info[0]['code']);
|
||||||
}
|
}
|
||||||
|
|
||||||
sqlsrv_configure('WarningsReturnAsErrors', 1);
|
sqlsrv_configure('WarningsReturnAsErrors', 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -107,6 +107,7 @@ class SqlsrvDriver implements Dibi\Driver
|
|||||||
? $this->createResultDriver($res)
|
? $this->createResultDriver($res)
|
||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -130,6 +131,7 @@ class SqlsrvDriver implements Dibi\Driver
|
|||||||
$row = sqlsrv_fetch_array($res, SQLSRV_FETCH_NUMERIC);
|
$row = sqlsrv_fetch_array($res, SQLSRV_FETCH_NUMERIC);
|
||||||
return Dibi\Helpers::intVal($row[0]);
|
return Dibi\Helpers::intVal($row[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -267,7 +269,6 @@ class SqlsrvDriver implements Dibi\Driver
|
|||||||
} elseif ($limit !== null) {
|
} elseif ($limit !== null) {
|
||||||
$sql = sprintf('SELECT TOP (%d) * FROM (%s) t', $limit, $sql);
|
$sql = sprintf('SELECT TOP (%d) * FROM (%s) t', $limit, $sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
} elseif ($limit !== null) {
|
} elseif ($limit !== null) {
|
||||||
// requires ORDER BY, see https://technet.microsoft.com/en-us/library/gg699618(v=sql.110).aspx
|
// requires ORDER BY, see https://technet.microsoft.com/en-us/library/gg699618(v=sql.110).aspx
|
||||||
$sql = sprintf('%s OFFSET %d ROWS FETCH NEXT %d ROWS ONLY', rtrim($sql), $offset, $limit);
|
$sql = sprintf('%s OFFSET %d ROWS FETCH NEXT %d ROWS ONLY', rtrim($sql), $offset, $limit);
|
||||||
|
@@ -42,6 +42,7 @@ class SqlsrvReflector implements Dibi\Reflector
|
|||||||
'view' => isset($row[1]) && $row[1] === 'VIEW',
|
'view' => isset($row[1]) && $row[1] === 'VIEW',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $tables;
|
return $tables;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,6 +92,7 @@ class SqlsrvReflector implements Dibi\Reflector
|
|||||||
'vendor' => $row,
|
'vendor' => $row,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $columns;
|
return $columns;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,6 +116,7 @@ class SqlsrvReflector implements Dibi\Reflector
|
|||||||
$indexes[$row['name']]['primary'] = $row['is_primary_key'] === 1;
|
$indexes[$row['name']]['primary'] = $row['is_primary_key'] === 1;
|
||||||
$indexes[$row['name']]['columns'] = $keyUsages[$row['name']] ?? [];
|
$indexes[$row['name']]['columns'] = $keyUsages[$row['name']] ?? [];
|
||||||
}
|
}
|
||||||
|
|
||||||
return array_values($indexes);
|
return array_values($indexes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -96,6 +96,7 @@ class SqlsrvResult implements Dibi\ResultDriver
|
|||||||
'nativetype' => $fieldMetadata['Type'],
|
'nativetype' => $fieldMetadata['Type'],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $columns;
|
return $columns;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -136,6 +136,7 @@ class Fluent implements IDataSource
|
|||||||
if (isset(self::$masks[$clause])) {
|
if (isset(self::$masks[$clause])) {
|
||||||
$this->clauses = array_fill_keys(self::$masks[$clause], null);
|
$this->clauses = array_fill_keys(self::$masks[$clause], null);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->cursor = &$this->clauses[$clause];
|
$this->cursor = &$this->clauses[$clause];
|
||||||
$this->cursor = [];
|
$this->cursor = [];
|
||||||
$this->command = $clause;
|
$this->command = $clause;
|
||||||
@@ -165,7 +166,6 @@ class Fluent implements IDataSource
|
|||||||
$this->cursor[] = $sep;
|
$this->cursor[] = $sep;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// append to currect flow
|
// append to currect flow
|
||||||
if ($args === [self::REMOVE]) {
|
if ($args === [self::REMOVE]) {
|
||||||
@@ -203,6 +203,7 @@ class Fluent implements IDataSource
|
|||||||
if ($arg instanceof self) {
|
if ($arg instanceof self) {
|
||||||
$arg = new Literal("($arg)");
|
$arg = new Literal("($arg)");
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->cursor[] = $arg;
|
$this->cursor[] = $arg;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -245,6 +246,7 @@ class Fluent implements IDataSource
|
|||||||
} else {
|
} else {
|
||||||
unset($this->flags[$flag]);
|
unset($this->flags[$flag]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -390,6 +392,7 @@ class Fluent implements IDataSource
|
|||||||
$method = array_shift($setup);
|
$method = array_shift($setup);
|
||||||
$res->$method(...$setup);
|
$res->$method(...$setup);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -428,7 +431,6 @@ class Fluent implements IDataSource
|
|||||||
$args = array_merge(['%lmt %ofs', $data['LIMIT'][0] ?? null, $data['OFFSET'][0] ?? null], $args);
|
$args = array_merge(['%lmt %ofs', $data['LIMIT'][0] ?? null, $data['OFFSET'][0] ?? null], $args);
|
||||||
unset($data['LIMIT'], $data['OFFSET']);
|
unset($data['LIMIT'], $data['OFFSET']);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
$clause = self::$normalizer->$clause;
|
$clause = self::$normalizer->$clause;
|
||||||
if (array_key_exists($clause, $this->clauses)) {
|
if (array_key_exists($clause, $this->clauses)) {
|
||||||
@@ -444,6 +446,7 @@ class Fluent implements IDataSource
|
|||||||
if ($clause === $this->command && $this->flags) {
|
if ($clause === $this->command && $this->flags) {
|
||||||
$args[] = implode(' ', array_keys($this->flags));
|
$args[] = implode(' ', array_keys($this->flags));
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($statement as $arg) {
|
foreach ($statement as $arg) {
|
||||||
$args[] = $arg;
|
$args[] = $arg;
|
||||||
}
|
}
|
||||||
@@ -464,6 +467,7 @@ class Fluent implements IDataSource
|
|||||||
$s .= 'By';
|
$s .= 'By';
|
||||||
trigger_error("Did you mean '$s'?", E_USER_NOTICE);
|
trigger_error("Did you mean '$s'?", E_USER_NOTICE);
|
||||||
}
|
}
|
||||||
|
|
||||||
return strtoupper(preg_replace('#[a-z](?=[A-Z])#', '$0 ', $s));
|
return strtoupper(preg_replace('#[a-z](?=[A-Z])#', '$0 ', $s));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -475,6 +479,7 @@ class Fluent implements IDataSource
|
|||||||
$this->clauses[$clause] = &$val;
|
$this->clauses[$clause] = &$val;
|
||||||
unset($val);
|
unset($val);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->cursor = &$foo;
|
$this->cursor = &$foo;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -50,6 +50,7 @@ final class HashMap extends HashMapBase
|
|||||||
if ($nm === '') {
|
if ($nm === '') {
|
||||||
$nm = "\xFF";
|
$nm = "\xFF";
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->$nm = $val;
|
$this->$nm = $val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -41,6 +41,7 @@ class Helpers
|
|||||||
$spaces = $maxLen - mb_strlen($col) + 2;
|
$spaces = $maxLen - mb_strlen($col) + 2;
|
||||||
echo "$col" . str_repeat(' ', $spaces) . "$val\n";
|
echo "$col" . str_repeat(' ', $spaces) . "$val\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "\n";
|
echo "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -53,6 +54,7 @@ class Helpers
|
|||||||
foreach ($row as $col => $foo) {
|
foreach ($row as $col => $foo) {
|
||||||
echo "\t\t<th>" . htmlspecialchars((string) $col) . "</th>\n";
|
echo "\t\t<th>" . htmlspecialchars((string) $col) . "</th>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "\t</tr>\n</thead>\n<tbody>\n";
|
echo "\t</tr>\n</thead>\n<tbody>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,6 +62,7 @@ class Helpers
|
|||||||
foreach ($row as $col) {
|
foreach ($row as $col) {
|
||||||
echo "\t\t<td>", htmlspecialchars((string) $col), "</td>\n";
|
echo "\t\t<td>", htmlspecialchars((string) $col), "</td>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "\t</tr>\n";
|
echo "\t</tr>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,6 +107,7 @@ class Helpers
|
|||||||
}
|
}
|
||||||
}, $sql);
|
}, $sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
echo trim($sql) . "\n\n";
|
echo trim($sql) . "\n\n";
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@@ -150,6 +154,7 @@ class Helpers
|
|||||||
$best = $item;
|
$best = $item;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $best;
|
return $best;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -198,6 +203,7 @@ class Helpers
|
|||||||
return $val;
|
return $val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -208,6 +214,7 @@ class Helpers
|
|||||||
if (self::$types === null) {
|
if (self::$types === null) {
|
||||||
self::$types = new HashMap([self::class, 'detectType']);
|
self::$types = new HashMap([self::class, 'detectType']);
|
||||||
}
|
}
|
||||||
|
|
||||||
return self::$types;
|
return self::$types;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -260,7 +267,6 @@ class Helpers
|
|||||||
if ($onProgress) {
|
if ($onProgress) {
|
||||||
$onProgress($count, isset($stat['size']) ? $size * 100 / $stat['size'] : null);
|
$onProgress($count, isset($stat['size']) ? $size * 100 / $stat['size'] : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
$sql .= $s;
|
$sql .= $s;
|
||||||
}
|
}
|
||||||
@@ -273,6 +279,7 @@ class Helpers
|
|||||||
$onProgress($count, isset($stat['size']) ? 100 : null);
|
$onProgress($count, isset($stat['size']) ? 100 : null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose($handle);
|
fclose($handle);
|
||||||
return $count;
|
return $count;
|
||||||
}
|
}
|
||||||
@@ -294,6 +301,7 @@ class Helpers
|
|||||||
if (is_float($value * 1)) {
|
if (is_float($value * 1)) {
|
||||||
throw new Exception("Number $value is greater than integer.");
|
throw new Exception("Number $value is greater than integer.");
|
||||||
}
|
}
|
||||||
|
|
||||||
return (int) $value;
|
return (int) $value;
|
||||||
} else {
|
} else {
|
||||||
throw new Exception("Expected number, '$value' given.");
|
throw new Exception("Expected number, '$value' given.");
|
||||||
|
@@ -54,6 +54,7 @@ class FileLogger
|
|||||||
if ($code = $event->result->getCode()) {
|
if ($code = $event->result->getCode()) {
|
||||||
$message = "[$code] $message";
|
$message = "[$code] $message";
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->writeToFile(
|
$this->writeToFile(
|
||||||
$event,
|
$event,
|
||||||
"ERROR: $message"
|
"ERROR: $message"
|
||||||
|
@@ -66,6 +66,7 @@ class Column
|
|||||||
if (empty($this->info['table']) || !$this->reflector) {
|
if (empty($this->info['table']) || !$this->reflector) {
|
||||||
throw new Dibi\Exception('Table is unknown or not available.');
|
throw new Dibi\Exception('Table is unknown or not available.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Table($this->reflector, ['name' => $this->info['table']]);
|
return new Table($this->reflector, ['name' => $this->info['table']]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -62,6 +62,7 @@ class Database
|
|||||||
foreach ($this->tables as $table) {
|
foreach ($this->tables as $table) {
|
||||||
$res[] = $table->getName();
|
$res[] = $table->getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -54,6 +54,7 @@ class Result
|
|||||||
foreach ($this->columns as $column) {
|
foreach ($this->columns as $column) {
|
||||||
$res[] = $fullNames ? $column->getFullName() : $column->getName();
|
$res[] = $fullNames ? $column->getFullName() : $column->getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -85,6 +85,7 @@ class Table
|
|||||||
foreach ($this->columns as $column) {
|
foreach ($this->columns as $column) {
|
||||||
$res[] = $column->getName();
|
$res[] = $column->getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,6 +153,7 @@ class Table
|
|||||||
foreach ($info['columns'] as $key => $name) {
|
foreach ($info['columns'] as $key => $name) {
|
||||||
$info['columns'][$key] = $this->columns[strtolower($name)];
|
$info['columns'][$key] = $this->columns[strtolower($name)];
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->indexes[strtolower($info['name'])] = new Index($info);
|
$this->indexes[strtolower($info['name'])] = new Index($info);
|
||||||
if (!empty($info['primary'])) {
|
if (!empty($info['primary'])) {
|
||||||
$this->primaryKey = $this->indexes[strtolower($info['name'])];
|
$this->primaryKey = $this->indexes[strtolower($info['name'])];
|
||||||
|
@@ -170,6 +170,7 @@ class Result implements IDataSource
|
|||||||
if ($row === null) {
|
if ($row === null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->fetched = true;
|
$this->fetched = true;
|
||||||
$this->normalize($row);
|
$this->normalize($row);
|
||||||
if ($this->rowFactory) {
|
if ($this->rowFactory) {
|
||||||
@@ -177,6 +178,7 @@ class Result implements IDataSource
|
|||||||
} elseif ($this->rowClass) {
|
} elseif ($this->rowClass) {
|
||||||
return new $this->rowClass($row);
|
return new $this->rowClass($row);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $row;
|
return $row;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,6 +193,7 @@ class Result implements IDataSource
|
|||||||
if ($row === null) {
|
if ($row === null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->fetched = true;
|
$this->fetched = true;
|
||||||
$this->normalize($row);
|
$this->normalize($row);
|
||||||
return reset($row);
|
return reset($row);
|
||||||
@@ -215,6 +218,7 @@ class Result implements IDataSource
|
|||||||
if ($limit === 0) {
|
if ($limit === 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$limit--;
|
$limit--;
|
||||||
$data[] = $row;
|
$data[] = $row;
|
||||||
} while ($row = $this->fetch());
|
} while ($row = $this->fetch());
|
||||||
@@ -287,7 +291,6 @@ class Result implements IDataSource
|
|||||||
} else {
|
} else {
|
||||||
$x = &$x->{$assoc[$i + 1]};
|
$x = &$x->{$assoc[$i + 1]};
|
||||||
}
|
}
|
||||||
|
|
||||||
} elseif ($as !== '|') { // associative-array node
|
} elseif ($as !== '|') { // associative-array node
|
||||||
$x = &$x[(string) $row->$as];
|
$x = &$x[(string) $row->$as];
|
||||||
}
|
}
|
||||||
@@ -345,7 +348,6 @@ class Result implements IDataSource
|
|||||||
} else {
|
} else {
|
||||||
$x = &$x[$assoc[$i + 1]];
|
$x = &$x[$assoc[$i + 1]];
|
||||||
}
|
}
|
||||||
|
|
||||||
} elseif ($as === '@') { // "object" node
|
} elseif ($as === '@') { // "object" node
|
||||||
if ($x === null) {
|
if ($x === null) {
|
||||||
$x = clone $row;
|
$x = clone $row;
|
||||||
@@ -354,7 +356,6 @@ class Result implements IDataSource
|
|||||||
} else {
|
} else {
|
||||||
$x = &$x->{$assoc[$i + 1]};
|
$x = &$x->{$assoc[$i + 1]};
|
||||||
}
|
}
|
||||||
|
|
||||||
} else { // associative-array node
|
} else { // associative-array node
|
||||||
$x = &$x[(string) $row->$as];
|
$x = &$x[(string) $row->$as];
|
||||||
}
|
}
|
||||||
@@ -398,6 +399,7 @@ class Result implements IDataSource
|
|||||||
do {
|
do {
|
||||||
$data[] = $row[$key];
|
$data[] = $row[$key];
|
||||||
} while ($row = $this->fetch());
|
} while ($row = $this->fetch());
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -412,6 +414,7 @@ class Result implements IDataSource
|
|||||||
do {
|
do {
|
||||||
$data[] = $row[$value];
|
$data[] = $row[$value];
|
||||||
} while ($row = $this->fetch());
|
} while ($row = $this->fetch());
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -455,6 +458,7 @@ class Result implements IDataSource
|
|||||||
if (!isset($row[$key])) { // null
|
if (!isset($row[$key])) { // null
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$value = $row[$key];
|
$value = $row[$key];
|
||||||
$format = $this->formats[$type] ?? null;
|
$format = $this->formats[$type] ?? null;
|
||||||
|
|
||||||
@@ -478,9 +482,11 @@ class Result implements IDataSource
|
|||||||
} elseif ($p !== false && $e !== false) {
|
} elseif ($p !== false && $e !== false) {
|
||||||
$value = rtrim($value, '.');
|
$value = rtrim($value, '.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($value === '' || $value[0] === '.') {
|
if ($value === '' || $value[0] === '.') {
|
||||||
$value = '0' . $value;
|
$value = '0' . $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
$row[$key] = $value === str_replace(',', '.', (string) ($float = (float) $value))
|
$row[$key] = $value === str_replace(',', '.', (string) ($float = (float) $value))
|
||||||
? $float
|
? $float
|
||||||
: $value;
|
: $value;
|
||||||
@@ -495,7 +501,6 @@ class Result implements IDataSource
|
|||||||
} else {
|
} else {
|
||||||
$row[$key] = null;
|
$row[$key] = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
} elseif ($type === Type::TIME_INTERVAL) {
|
} elseif ($type === Type::TIME_INTERVAL) {
|
||||||
preg_match('#^(-?)(\d+)\D(\d+)\D(\d+)\z#', $value, $m);
|
preg_match('#^(-?)(\d+)\D(\d+)\D(\d+)\z#', $value, $m);
|
||||||
$value = new \DateInterval("PT$m[2]H$m[3]M$m[4]S");
|
$value = new \DateInterval("PT$m[2]H$m[3]M$m[4]S");
|
||||||
@@ -513,7 +518,6 @@ class Result implements IDataSource
|
|||||||
} else {
|
} else {
|
||||||
$row[$key] = json_decode($value, $format === 'array');
|
$row[$key] = json_decode($value, $format === 'array');
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
throw new \RuntimeException('Unexpected type ' . $type);
|
throw new \RuntimeException('Unexpected type ' . $type);
|
||||||
}
|
}
|
||||||
@@ -590,6 +594,7 @@ class Result implements IDataSource
|
|||||||
if ($this->meta === null) {
|
if ($this->meta === null) {
|
||||||
$this->meta = new Reflection\Result($this->getResultDriver());
|
$this->meta = new Reflection\Result($this->getResultDriver());
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->meta;
|
return $this->meta;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -40,8 +40,10 @@ class Row implements \ArrayAccess, \IteratorAggregate, \Countable
|
|||||||
if (!$time || substr((string) $time, 0, 7) === '0000-00') { // '', null, false, '0000-00-00', ...
|
if (!$time || substr((string) $time, 0, 7) === '0000-00') { // '', null, false, '0000-00-00', ...
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$time = new DateTime($time);
|
$time = new DateTime($time);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $format === null ? $time : $time->format($format);
|
return $format === null ? $time : $time->format($format);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -67,6 +67,7 @@ trait Strict
|
|||||||
$ret = $this->$m();
|
$ret = $this->$m();
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
$rc = new ReflectionClass($this);
|
$rc = new ReflectionClass($this);
|
||||||
$items = array_filter($rc->getProperties(ReflectionProperty::IS_PUBLIC), function ($p) { return !$p->isStatic(); });
|
$items = array_filter($rc->getProperties(ReflectionProperty::IS_PUBLIC), function ($p) { return !$p->isStatic(); });
|
||||||
$items = array_map(function ($item) { return $item->getName(); }, $items);
|
$items = array_map(function ($item) { return $item->getName(); }, $items);
|
||||||
|
@@ -69,6 +69,7 @@ final class Translator
|
|||||||
while (count($args) === 1 && is_array($args[0])) { // implicit array expansion
|
while (count($args) === 1 && is_array($args[0])) { // implicit array expansion
|
||||||
$args = array_values($args[0]);
|
$args = array_values($args[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->args = $args;
|
$this->args = $args;
|
||||||
$this->errors = [];
|
$this->errors = [];
|
||||||
|
|
||||||
@@ -116,6 +117,7 @@ XX
|
|||||||
throw new PcreException;
|
throw new PcreException;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,8 +140,10 @@ XX
|
|||||||
if ($lastArr === $cursor - 1) {
|
if ($lastArr === $cursor - 1) {
|
||||||
$sql[] = ',';
|
$sql[] = ',';
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql[] = $this->formatValue($arg, $commandIns ? 'l' : 'a');
|
$sql[] = $this->formatValue($arg, $commandIns ? 'l' : 'a');
|
||||||
}
|
}
|
||||||
|
|
||||||
$lastArr = $cursor;
|
$lastArr = $cursor;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -148,7 +152,6 @@ XX
|
|||||||
$sql[] = $this->formatValue($arg, null);
|
$sql[] = $this->formatValue($arg, null);
|
||||||
} // while
|
} // while
|
||||||
|
|
||||||
|
|
||||||
if ($comment) {
|
if ($comment) {
|
||||||
$sql[] = '*/';
|
$sql[] = '*/';
|
||||||
}
|
}
|
||||||
@@ -214,13 +217,14 @@ XX
|
|||||||
} else {
|
} else {
|
||||||
$op = '= ';
|
$op = '= ';
|
||||||
}
|
}
|
||||||
|
|
||||||
$vx[] = $k . $op . $v;
|
$vx[] = $k . $op . $v;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
$vx[] = $this->formatValue($v, 'ex');
|
$vx[] = $this->formatValue($v, 'ex');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return '(' . implode(') ' . strtoupper($modifier) . ' (', $vx) . ')';
|
return '(' . implode(') ' . strtoupper($modifier) . ' (', $vx) . ')';
|
||||||
|
|
||||||
case 'n': // key, key, ... identifier names
|
case 'n': // key, key, ... identifier names
|
||||||
@@ -232,6 +236,7 @@ XX
|
|||||||
$vx[] = $this->identifiers->{$pair[0]};
|
$vx[] = $this->identifiers->{$pair[0]};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return implode(', ', $vx);
|
return implode(', ', $vx);
|
||||||
|
|
||||||
|
|
||||||
@@ -241,6 +246,7 @@ XX
|
|||||||
$vx[] = $this->identifiers->{$pair[0]} . '='
|
$vx[] = $this->identifiers->{$pair[0]} . '='
|
||||||
. $this->formatValue($v, $pair[1] ?? (is_array($v) ? 'ex!' : null));
|
. $this->formatValue($v, $pair[1] ?? (is_array($v) ? 'ex!' : null));
|
||||||
}
|
}
|
||||||
|
|
||||||
return implode(', ', $vx);
|
return implode(', ', $vx);
|
||||||
|
|
||||||
|
|
||||||
@@ -250,6 +256,7 @@ XX
|
|||||||
$pair = explode('%', (string) $k, 2); // split into identifier & modifier
|
$pair = explode('%', (string) $k, 2); // split into identifier & modifier
|
||||||
$vx[] = $this->formatValue($v, $pair[1] ?? (is_array($v) ? 'ex!' : null));
|
$vx[] = $this->formatValue($v, $pair[1] ?? (is_array($v) ? 'ex!' : null));
|
||||||
}
|
}
|
||||||
|
|
||||||
return '(' . (($vx || $modifier === 'l') ? implode(', ', $vx) : 'NULL') . ')';
|
return '(' . (($vx || $modifier === 'l') ? implode(', ', $vx) : 'NULL') . ')';
|
||||||
|
|
||||||
|
|
||||||
@@ -259,6 +266,7 @@ XX
|
|||||||
$kx[] = $this->identifiers->{$pair[0]};
|
$kx[] = $this->identifiers->{$pair[0]};
|
||||||
$vx[] = $this->formatValue($v, $pair[1] ?? (is_array($v) ? 'ex!' : null));
|
$vx[] = $this->formatValue($v, $pair[1] ?? (is_array($v) ? 'ex!' : null));
|
||||||
}
|
}
|
||||||
|
|
||||||
return '(' . implode(', ', $kx) . ') VALUES (' . implode(', ', $vx) . ')';
|
return '(' . implode(', ', $kx) . ') VALUES (' . implode(', ', $vx) . ')';
|
||||||
|
|
||||||
case 'm': // (key, key, ...) VALUES (val, val, ...), (val, val, ...), ...
|
case 'm': // (key, key, ...) VALUES (val, val, ...), (val, val, ...), ...
|
||||||
@@ -281,9 +289,11 @@ XX
|
|||||||
$vx[$k2][] = $this->formatValue($v2, $pair[1] ?? (is_array($v2) ? 'ex!' : null));
|
$vx[$k2][] = $this->formatValue($v2, $pair[1] ?? (is_array($v2) ? 'ex!' : null));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($vx as $k => $v) {
|
foreach ($vx as $k => $v) {
|
||||||
$vx[$k] = '(' . implode(', ', $v) . ')';
|
$vx[$k] = '(' . implode(', ', $v) . ')';
|
||||||
}
|
}
|
||||||
|
|
||||||
return '(' . implode(', ', $kx) . ') VALUES ' . implode(', ', $vx);
|
return '(' . implode(', ', $kx) . ') VALUES ' . implode(', ', $vx);
|
||||||
|
|
||||||
case 'by': // key ASC, key DESC
|
case 'by': // key ASC, key DESC
|
||||||
@@ -297,6 +307,7 @@ XX
|
|||||||
$vx[] = $this->identifiers->$v;
|
$vx[] = $this->identifiers->$v;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return implode(', ', $vx);
|
return implode(', ', $vx);
|
||||||
|
|
||||||
case 'ex!':
|
case 'ex!':
|
||||||
@@ -310,11 +321,11 @@ XX
|
|||||||
foreach ($value as $v) {
|
foreach ($value as $v) {
|
||||||
$vx[] = $this->formatValue($v, $modifier);
|
$vx[] = $this->formatValue($v, $modifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
return implode(', ', $vx);
|
return implode(', ', $vx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// with modifier procession
|
// with modifier procession
|
||||||
if ($modifier) {
|
if ($modifier) {
|
||||||
if ($value !== null && !is_scalar($value)) { // array is already processed
|
if ($value !== null && !is_scalar($value)) { // array is already processed
|
||||||
@@ -400,6 +411,7 @@ XX
|
|||||||
} elseif (!$value instanceof \DateTimeInterface) {
|
} elseif (!$value instanceof \DateTimeInterface) {
|
||||||
$value = new DateTime($value);
|
$value = new DateTime($value);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $modifier === 'd'
|
return $modifier === 'd'
|
||||||
? $this->driver->escapeDate($value)
|
? $this->driver->escapeDate($value)
|
||||||
: $this->driver->escapeDateTime($value);
|
: $this->driver->escapeDateTime($value);
|
||||||
@@ -439,6 +451,7 @@ XX
|
|||||||
throw new PcreException;
|
throw new PcreException;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $value;
|
return $value;
|
||||||
|
|
||||||
case 'SQL': // preserve as real SQL (TODO: rename to %sql)
|
case 'SQL': // preserve as real SQL (TODO: rename to %sql)
|
||||||
@@ -469,7 +482,6 @@ XX
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// without modifier procession
|
// without modifier procession
|
||||||
if (is_string($value)) {
|
if (is_string($value)) {
|
||||||
return $this->driver->escapeText($value);
|
return $this->driver->escapeText($value);
|
||||||
@@ -551,6 +563,7 @@ XX
|
|||||||
$this->comment = true;
|
$this->comment = true;
|
||||||
return '/*';
|
return '/*';
|
||||||
}
|
}
|
||||||
|
|
||||||
return '';
|
return '';
|
||||||
|
|
||||||
} elseif ($mod === 'else') {
|
} elseif ($mod === 'else') {
|
||||||
@@ -563,7 +576,6 @@ XX
|
|||||||
$this->comment = true;
|
$this->comment = true;
|
||||||
return '/*';
|
return '/*';
|
||||||
}
|
}
|
||||||
|
|
||||||
} elseif ($mod === 'end') {
|
} elseif ($mod === 'end') {
|
||||||
$this->ifLevel--;
|
$this->ifLevel--;
|
||||||
if ($this->ifLevelStart === $this->ifLevel + 1) {
|
if ($this->ifLevelStart === $this->ifLevel + 1) {
|
||||||
@@ -572,6 +584,7 @@ XX
|
|||||||
$this->comment = false;
|
$this->comment = false;
|
||||||
return '*/';
|
return '*/';
|
||||||
}
|
}
|
||||||
|
|
||||||
return '';
|
return '';
|
||||||
|
|
||||||
} elseif ($mod === 'ex') { // array expansion
|
} elseif ($mod === 'ex') { // array expansion
|
||||||
@@ -586,6 +599,7 @@ XX
|
|||||||
} else {
|
} else {
|
||||||
$this->limit = Helpers::intVal($arg);
|
$this->limit = Helpers::intVal($arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
return '';
|
return '';
|
||||||
|
|
||||||
} elseif ($mod === 'ofs') { // apply offset
|
} elseif ($mod === 'ofs') { // apply offset
|
||||||
@@ -596,6 +610,7 @@ XX
|
|||||||
} else {
|
} else {
|
||||||
$this->offset = Helpers::intVal($arg);
|
$this->offset = Helpers::intVal($arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
return '';
|
return '';
|
||||||
|
|
||||||
} else { // default processing
|
} else { // default processing
|
||||||
@@ -649,6 +664,7 @@ XX
|
|||||||
$v = $this->driver->escapeIdentifier($v);
|
$v = $this->driver->escapeIdentifier($v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return implode('.', $parts);
|
return implode('.', $parts);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -13,6 +13,7 @@ function buildPdoDriver(?int $errorMode)
|
|||||||
if ($errorMode !== null) {
|
if ($errorMode !== null) {
|
||||||
$pdo->setAttribute(PDO::ATTR_ERRMODE, $errorMode);
|
$pdo->setAttribute(PDO::ATTR_ERRMODE, $errorMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
new Dibi\Drivers\PdoDriver(['resource' => $pdo]);
|
new Dibi\Drivers\PdoDriver(['resource' => $pdo]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user