Skip to content

Commit 9652f91

Browse files
authored
Merge pull request #3 from arkanovas/todo_array_param
Возможности использования массивов без комментирования
2 parents 8d84ce4 + b0f61a9 commit 9652f91

File tree

4 files changed

+426
-214
lines changed

4 files changed

+426
-214
lines changed

Parser.php

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ private function parseSql()
135135
}
136136
}
137137

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

150+
// разбор переменных - массивов, которые находились изначально вне комментариев
151+
if (preg_match_all('#:@(\w+)#', $this->sql, $matches)) {
152+
$count = count($matches[0]);
153+
for ($i = 0; $i < $count; $i++) {
154+
$this->replaceComment($matches[0][$i], $matches[0][$i], $matches[1][$i], false);
155+
}
156+
}
157+
150158
$this->sql = preg_replace("/\n+/", "\n", trim($this->sql));
151159
}
152160

153161
/**
154-
* Заменяем коментарий в запросе на соответствующе преобразованный блок или удаляем.
162+
* Заменяем коментарий или некоторую другую подстроку в запросе на соответствующе преобразованный блок или удаляем,
163+
* если указан соответствующий параметр (делается по умолчанию - для комментариев).
164+
* Используется также для замены параметра-массива - :@<param_name> не помещенного в комментарий, но только если такой
165+
* параметр есть в массиве параметров. Отдельную функцию делать не стали, потому что функционал одинаковый.
166+
* Либо можно переименовать функцию.
155167
* @param string $comment Заменямый комментарий.
156168
* @param string $queryInComment Текст внутри комментария.
157169
* @param string $paramName Имя параметра.
170+
* @param boolean $replaceNotFoundParam заменять ли комментарий, если не нашли соответствующего параметра в списке
158171
*/
159-
private function replaceComment($comment, $queryInComment, $paramName)
172+
private function replaceComment($comment, $queryInComment, $paramName, $replaceNotFoundParam = true)
160173
{
161174
$param = $this->getParam($paramName);
162175

@@ -218,7 +231,7 @@ private function replaceComment($comment, $queryInComment, $paramName)
218231
}
219232
$queryInComment = preg_replace('/:@' . preg_quote($paramName) . '/i', $replacement, $queryInComment);
220233
}
221-
} else {
234+
} elseif ($replaceNotFoundParam) {
222235
$queryInComment = '';
223236
}
224237

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

238-
// Формируем имя параметра на выход точно такое же, какое и забиндено в парметры.
251+
// Формируем имя параметра на выход точно такое же, какое и забиндено в параметры.
239252
foreach ($this->params as $key => $value) {
240253
$key = ltrim($key, ':');
241254
if (mb_strtolower($key) == $name) {

composer.json

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,30 @@
11
{
2-
"name": "intersvyaz/yii2-sqlparser",
3-
"description": "Parsing sql-query",
4-
"keywords": [
5-
"yii2",
6-
"extension",
7-
"database"
8-
],
9-
"homepage": "https://github.com/intersvyaz/yii2-sqlparser.git",
10-
"license": "MIT",
11-
"minimum-stability": "stable",
12-
"require": {
13-
"php": ">=5.4.0",
14-
"yiisoft/yii2": "~2.0.0"
15-
},
16-
"require-dev": {
17-
"phpunit/phpunit": "~4.5.0"
18-
},
19-
"autoload": {
20-
"psr-4": {"Intersvyaz\\SqlParser\\": ""}
2+
"name": "intersvyaz/yii2-sqlparser",
3+
"description": "Parsing sql-query",
4+
"keywords": [
5+
"yii2",
6+
"extension",
7+
"database"
8+
],
9+
"homepage": "https://github.com/intersvyaz/yii2-sqlparser.git",
10+
"license": "MIT",
11+
"minimum-stability": "stable",
12+
"require": {
13+
"php": ">=5.4.0",
14+
"yiisoft/yii2": ">=2.0.15"
15+
},
16+
"require-dev": {
17+
"phpunit/phpunit": "~4.5.0"
18+
},
19+
"autoload": {
20+
"psr-4": {
21+
"Intersvyaz\\SqlParser\\": ""
2122
}
23+
},
24+
"repositories": [
25+
{
26+
"type": "composer",
27+
"url": "https://asset-packagist.org"
28+
}
29+
]
2230
}

0 commit comments

Comments
 (0)