Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 18 additions & 5 deletions Parser.php
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ private function parseSql()
}
}

// Многоитерационный разбор однострчных комментариев
// Многоитерационный разбор однострочных комментариев
while (true) {
if (preg_match_all('#--\*([\w|]+)(.+)#', $this->sql, $matches)) {
$count = count($matches[0]);
Expand All @@ -147,16 +147,29 @@ private function parseSql()
}
}

// разбор переменных - массивов, которые находились изначально вне комментариев
if (preg_match_all('#:@(\w+)#', $this->sql, $matches)) {
$count = count($matches[0]);
for ($i = 0; $i < $count; $i++) {
$this->replaceComment($matches[0][$i], $matches[0][$i], $matches[1][$i], false);
}
}

$this->sql = preg_replace("/\n+/", "\n", trim($this->sql));
}

/**
* Заменяем коментарий в запросе на соответствующе преобразованный блок или удаляем.
* Заменяем коментарий или некоторую другую подстроку в запросе на соответствующе преобразованный блок или удаляем,
* если указан соответствующий параметр (делается по умолчанию - для комментариев).
* Используется также для замены параметра-массива - :@<param_name> не помещенного в комментарий, но только если такой
* параметр есть в массиве параметров. Отдельную функцию делать не стали, потому что функционал одинаковый.
* Либо можно переименовать функцию.
* @param string $comment Заменямый комментарий.
* @param string $queryInComment Текст внутри комментария.
* @param string $paramName Имя параметра.
* @param boolean $replaceNotFoundParam заменять ли комментарий, если не нашли соответствующего параметра в списке
*/
private function replaceComment($comment, $queryInComment, $paramName)
private function replaceComment($comment, $queryInComment, $paramName, $replaceNotFoundParam = true)
{
$param = $this->getParam($paramName);

Expand Down Expand Up @@ -218,7 +231,7 @@ private function replaceComment($comment, $queryInComment, $paramName)
}
$queryInComment = preg_replace('/:@' . preg_quote($paramName) . '/i', $replacement, $queryInComment);
}
} else {
} elseif ($replaceNotFoundParam) {
$queryInComment = '';
}

Expand All @@ -235,7 +248,7 @@ private function getParam($name)
{
$name = $outName = mb_strtolower(ltrim($name, ':'));

// Формируем имя параметра на выход точно такое же, какое и забиндено в парметры.
// Формируем имя параметра на выход точно такое же, какое и забиндено в параметры.
foreach ($this->params as $key => $value) {
$key = ltrim($key, ':');
if (mb_strtolower($key) == $name) {
Expand Down
46 changes: 27 additions & 19 deletions composer.json
Original file line number Diff line number Diff line change
@@ -1,22 +1,30 @@
{
"name": "intersvyaz/yii2-sqlparser",
"description": "Parsing sql-query",
"keywords": [
"yii2",
"extension",
"database"
],
"homepage": "https://github.com/intersvyaz/yii2-sqlparser.git",
"license": "MIT",
"minimum-stability": "stable",
"require": {
"php": ">=5.4.0",
"yiisoft/yii2": "~2.0.0"
},
"require-dev": {
"phpunit/phpunit": "~4.5.0"
},
"autoload": {
"psr-4": {"Intersvyaz\\SqlParser\\": ""}
"name": "intersvyaz/yii2-sqlparser",
"description": "Parsing sql-query",
"keywords": [
"yii2",
"extension",
"database"
],
"homepage": "https://github.com/intersvyaz/yii2-sqlparser.git",
"license": "MIT",
"minimum-stability": "stable",
"require": {
"php": ">=5.4.0",
"yiisoft/yii2": ">=2.0.15"
},
"require-dev": {
"phpunit/phpunit": "~4.5.0"
},
"autoload": {
"psr-4": {
"Intersvyaz\\SqlParser\\": ""
}
},
"repositories": [
{
"type": "composer",
"url": "https://asset-packagist.org"
}
]
}
Loading