Skip to content

Commit b641e84

Browse files
committed
Merge pull request #1 from intersvyaz/semicolon
Добавил обработку ведущего двоеточия для имён параметров
2 parents 313f0dc + 87310ea commit b641e84

File tree

6 files changed

+1467
-15
lines changed

6 files changed

+1467
-15
lines changed

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
.idea
22
/vendor
3-
composer.lock
43
/tests/output

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
language: php
22

33
php:
4-
- 5.4
54
- 5.5
5+
- 5.6
66

77
install:
88
- composer self-update

Parser.php

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,11 @@ class Parser
2323
*/
2424
public function __construct($sql, $params = [])
2525
{
26-
if (substr($sql, -4) === '.sql')
26+
if (substr($sql, -4) === '.sql') {
2727
$this->sql = file_get_contents($sql);
28-
else
28+
} else {
2929
$this->sql = $sql;
30+
}
3031

3132
$this->params = $params;
3233
$this->parseSql();
@@ -76,13 +77,15 @@ private function simplifyParams($params)
7677
$key = ':' . ltrim($key, ':');
7778
if (is_array($value)) {
7879
if (isset($value[0]) && is_array($value[0])) {
79-
foreach ($value[0] as $valKey => $valVal)
80+
foreach ($value[0] as $valKey => $valVal) {
8081
$newParams[$key . '_' . $valKey] = $valVal;
82+
}
8183
} elseif (!isset($value['bind']) || $value['bind'] === true) {
82-
if (isset($value[0]) && isset($value[1]))
84+
if (isset($value[0]) && isset($value[1])) {
8385
$newParams[$key] = [$value[0], $value[1]];
84-
elseif (isset($value[0]))
86+
} elseif (isset($value[0])) {
8587
$newParams[$key] = $value[0];
88+
}
8689
}
8790
} else {
8891
$newParams[$key] = $value;
@@ -92,7 +95,6 @@ private function simplifyParams($params)
9295
return $newParams;
9396
}
9497

95-
9698
/**
9799
* Функция разбора и подготовки текста sql запроса.
98100
*/
@@ -129,9 +131,10 @@ private function parseSql()
129131
*/
130132
private function replaceComment($comment, $queryInComment, $paramName)
131133
{
132-
$paramName = ltrim($paramName, ':');
133-
if (array_key_exists($paramName, $this->params)) {
134-
$paramValue = $this->params[$paramName];
134+
$param = $this->getParam($paramName);
135+
if ($param) {
136+
$paramName = $param[0];
137+
$paramValue = $param[1];
135138
if (is_array($paramValue)) {
136139
$value = isset($paramValue[0]) ? $paramValue[0] : null;
137140
$bind = isset($paramValue['bind']) ? $paramValue['bind'] : true;
@@ -156,4 +159,22 @@ private function replaceComment($comment, $queryInComment, $paramName)
156159

157160
$this->sql = str_replace($comment, $queryInComment, $this->sql);
158161
}
162+
163+
/**
164+
* Ищет параметр в массиве $this->params
165+
* @param string $name имя параметра
166+
* @return array|bool массив ['имя_параметра_без_ведущего_двоеточия', 'значение_параметра'] или ложь если параметра нет
167+
*/
168+
private function getParam($name)
169+
{
170+
$name = ltrim($name, ':');
171+
172+
if (array_key_exists($name, $this->params)) {
173+
return [$name, $this->params[$name]];
174+
} elseif (array_key_exists(':' . $name, $this->params)) {
175+
return [$name, $this->params[':' . $name]];
176+
}
177+
178+
return false;
179+
}
159180
}

composer.json

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,29 @@
11
{
22
"name": "intersvyaz/yii2-sqlparser",
33
"description": "Parsing sql-query",
4-
"keywords": ["yii2", "extension", "database"],
4+
"keywords": [
5+
"yii2",
6+
"extension",
7+
"database"
8+
],
59
"homepage": "https://github.com/intersvyaz/yii2-sqlparser.git",
610
"license": "MIT",
7-
"minimum-stability": "dev",
11+
"minimum-stability": "stable",
812
"require": {
913
"php": ">=5.4.0",
10-
"yiisoft/yii2": "~2.0"
14+
"fxp/composer-asset-plugin": " ~1.0.0",
15+
"yiisoft/yii2": "~2.0.0"
1116
},
1217
"require-dev": {
13-
"phpunit/phpunit": "*"
18+
"phpunit/phpunit": "~4.5.0"
1419
},
1520
"autoload": {
1621
"psr-4": {"Intersvyaz\\SqlParser\\": ""}
22+
},
23+
"extra": {
24+
"asset-installer-paths": {
25+
"npm-asset-library": "vendor/npm",
26+
"bower-asset-library": "vendor/bower"
27+
}
1728
}
1829
}

0 commit comments

Comments
 (0)