Skip to content

Commit e55dad7

Browse files
committed
Added support for mbstring.
1 parent 5b6bc62 commit e55dad7

File tree

2 files changed

+21
-20
lines changed

2 files changed

+21
-20
lines changed

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
}
1818
],
1919
"require": {
20-
"php": "^7.0"
20+
"php": "^7.0",
21+
"ext-mbstring": "*"
2122
},
2223
"require-dev": {
2324
"mindplay/testies": "^0.3.0"

src/SQLSplitter.php

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -128,17 +128,17 @@ private static function getStatements(string $query, string $dbType, string $del
128128
$stringChar = null;
129129
continue;
130130
}
131-
if (strtolower($char) == 'd' && $isInComment == false && $isInString == false) {
131+
if (mb_strtolower($char) == 'd' && $isInComment == false && $isInString == false) {
132132
$delimiterResult = self::getDelimiter($index, $query, $dbType);
133133
if ($delimiterResult != null) {
134134
// it's delimiter
135135
list($delimiterSymbol, $delimiterEndIndex) = $delimiterResult;
136-
$query = substr($query, $delimiterEndIndex);
136+
$query = mb_substr($query, $delimiterEndIndex);
137137
return self::getStatements($query, $dbType, $delimiterSymbol);
138138
}
139139
}
140140
if ($char == "$" && $isInComment == false && $isInString == false) {
141-
$queryUntilTagSymbol = substr($query, $index);
141+
$queryUntilTagSymbol = mb_substr($query, $index);
142142
if ($isInTag == false) {
143143
$tagSymbolResult = self::getTag($queryUntilTagSymbol, $dbType);
144144
if ($tagSymbolResult != null) {
@@ -156,13 +156,13 @@ private static function getStatements(string $query, string $dbType, string $del
156156
}
157157
}
158158
}
159-
if (strlen($delimiter) > 1 && array_key_exists($index + strlen($delimiter) - 1, $charArray)) {
160-
for ($i = $index + 1; $i < $index + strlen($delimiter); $i++) {
159+
if (mb_strlen($delimiter) > 1 && array_key_exists($index + mb_strlen($delimiter) - 1, $charArray)) {
160+
for ($i = $index + 1; $i < $index + mb_strlen($delimiter); $i++) {
161161
$char .= $charArray[$i];
162162
}
163163
}
164164
// it's a query, continue until you get delimiter hit
165-
if (strtolower($char) == strtolower($delimiter) && $isInString == false && $isInComment == false && $isInTag == false) {
165+
if (mb_strtolower($char) == mb_strtolower($delimiter) && $isInString == false && $isInComment == false && $isInTag == false) {
166166
if (! self::isGoDelimiter($dbType, $query, $index)) {
167167
continue;
168168
}
@@ -188,8 +188,8 @@ private static function getStatements(string $query, string $dbType, string $del
188188
*/
189189
private static function getQueryParts(string $query, int $splittingIndex, string $delimiter)
190190
{
191-
$statement = substr($query, 0, $splittingIndex);
192-
$restOfQuery = substr($query, $splittingIndex + strlen($delimiter));
191+
$statement = mb_substr($query, 0, $splittingIndex);
192+
$restOfQuery = mb_substr($query, $splittingIndex + mb_strlen($delimiter));
193193
if ($statement != null) {
194194
$statement = trim($statement);
195195
}
@@ -207,23 +207,23 @@ private static function getDelimiter(int $index, string $query, string $dbType)
207207
{
208208
if ($dbType == self::DB_MYSQL) {
209209
$delimiterKeyword = 'delimiter ';
210-
$delimiterLength = strlen($delimiterKeyword);
211-
$parsedQueryAfterIndexOriginal = substr($query, $index);
212-
$indexOfDelimiterKeyword = strpos(strtolower($parsedQueryAfterIndexOriginal), $delimiterKeyword);
210+
$delimiterLength = mb_strlen($delimiterKeyword);
211+
$parsedQueryAfterIndexOriginal = mb_substr($query, $index);
212+
$indexOfDelimiterKeyword = mb_strpos(strtolower($parsedQueryAfterIndexOriginal), $delimiterKeyword);
213213
if ($indexOfDelimiterKeyword === 0) {
214-
$parsedQueryAfterIndex = substr($query, $index);
215-
$indexOfNewLine = strpos($parsedQueryAfterIndex, "\n");
214+
$parsedQueryAfterIndex = mb_substr($query, $index);
215+
$indexOfNewLine = mb_strpos($parsedQueryAfterIndex, "\n");
216216
if ($indexOfNewLine == -1) {
217-
$indexOfNewLine = strlen($query);
217+
$indexOfNewLine = mb_strlen($query);
218218
}
219-
$parsedQueryAfterIndex = substr($parsedQueryAfterIndex, 0, $indexOfNewLine);
220-
$parsedQueryAfterIndex = substr($parsedQueryAfterIndex, $delimiterLength);
219+
$parsedQueryAfterIndex = mb_substr($parsedQueryAfterIndex, 0, $indexOfNewLine);
220+
$parsedQueryAfterIndex = mb_substr($parsedQueryAfterIndex, $delimiterLength);
221221
$delimiterSymbol = trim($parsedQueryAfterIndex);
222222
$delimiterSymbol = self::clearTextUntilComment($delimiterSymbol, $dbType);
223223
if ($delimiterSymbol != null) {
224224
$delimiterSymbol = trim($delimiterSymbol);
225-
$delimiterSymbolEndIndex = strpos($parsedQueryAfterIndexOriginal,
226-
$delimiterSymbol) + $index + strlen($delimiterSymbol);
225+
$delimiterSymbolEndIndex = mb_strpos($parsedQueryAfterIndexOriginal,
226+
$delimiterSymbol) + $index + mb_strlen($delimiterSymbol);
227227

228228
return [$delimiterSymbol, $delimiterSymbolEndIndex];
229229
}
@@ -244,7 +244,7 @@ private static function getTag(string $query, string $dbType)
244244
if ($dbType == self::DB_PGSQL) {
245245
if (preg_match('/^(\$[a-zA-Z]*\$)/i', $query, $matches) === 1) {
246246
$tagSymbol = trim($matches[0]);
247-
$indexOfCmd = strpos($query, $tagSymbol);
247+
$indexOfCmd = mb_strpos($query, $tagSymbol);
248248

249249
return [$tagSymbol, $indexOfCmd];
250250
}

0 commit comments

Comments
 (0)