20 private $resourceConnection;
45 private function addSql($sql, $bind)
47 preg_match(
'~(?:INSERT|REPLACE)\s+(?:IGNORE)?\s*INTO `(.*)` \((.*)\) VALUES (\(.*\))+~', $sql, $queryMatches);
50 $fields = preg_replace(
'~[\s+`]+~',
'', $queryMatches[2]);
52 $sqlBindGroupAmount = count(explode(
'), (', $queryMatches[3]));
53 preg_match(
' ~\((.*?)\)~', $queryMatches[3], $sqlBind);
54 $sqlBind = preg_replace([
'~,\s*~',
'~\'~'], [
',',
''], $sqlBind[1]);
55 $sqlBind = $sqlBind ? explode(
',', $sqlBind) : [];
59 if ($sqlBindGroupAmount > 1) {
60 $valuesCount = count($bind)/$sqlBindGroupAmount;
61 for (
$i = 0;
$i < $sqlBindGroupAmount;
$i++) {
62 $binds[] = array_combine(
64 $this->handleBindValues($sqlBind, $bind,
$i * $valuesCount)
68 $sqlBind = $this->handleBindValues($sqlBind, $bind);
69 $binds[] = array_combine(
$fields, $sqlBind);
71 $this->sql[] = [$binds,
$table];
81 private function handleBindValues(array $sqlBind, array $bind, $bindPosition = 0)
83 $bind = array_values($bind);
84 foreach ($sqlBind as
$i => $fieldValue) {
85 if ($fieldValue ===
'?') {
86 $sqlBind[
$i] = $bind[$bindPosition];
110 $this->getProfiler()->clear();
111 $this->getProfiler()->setEnabled(
true);
121 $this->getProfiler()->setEnabled(
false);
122 $queries = $this->getProfiler()->getQueryProfiles() ?: [];
123 foreach ($queries as
$query) {
127 $this->addSql(
$query->getQuery(),
$query->getQueryParams());
138 private function isReplaceQuery(
$query)
146 private function getProfiler()
148 if ($this->profiler ===
null) {
149 $this->profiler = $this->resourceConnection->getConnection()->getProfiler();
152 return $this->profiler;
__construct(ResourceConnection $resourceConnection)