Skip to content

Commit 303f54d

Browse files
committed
Driver Escape Indentity Char
1 parent b4fc454 commit 303f54d

16 files changed

Lines changed: 801 additions & 32 deletions

src/Drivers/BaseDriver.php

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
/**
3+
* InitORM QueryBuilder
4+
*
5+
* This file is part of InitORM QueryBuilder.
6+
*
7+
* @author Muhammet ŞAFAK <info@muhammetsafak.com.tr>
8+
* @copyright Copyright © 2023 Muhammet ŞAFAK
9+
* @license ./LICENSE MIT
10+
* @version 1.0.1
11+
* @link https://www.muhammetsafak.com.tr
12+
*/
13+
14+
namespace InitORM\QueryBuilder\Drivers;
15+
16+
class BaseDriver implements DriverInterface
17+
{
18+
19+
protected string $name;
20+
21+
protected string $escapeChar = '';
22+
23+
/**
24+
* @inheritDoc
25+
*/
26+
public function escapeIdentify(string &$string): string
27+
{
28+
if (!empty($this->escapeChar)) {
29+
$string = preg_replace('/\b(?<!:)(?!(AND|and|OR|or|AS|as|ON|on)\b)([a-zA-Z_][a-zA-Z0-9_]*)\b/',$this->escapeChar . '$0' . $this->escapeChar, str_replace($this->escapeChar, $this->escapeChar . $this->escapeChar, trim($string, $this->escapeChar)));
30+
}
31+
32+
return $string;
33+
}
34+
35+
/**
36+
* @inheritDoc
37+
*/
38+
public function getDriver(): ?string
39+
{
40+
return $this->name ?? null;
41+
}
42+
43+
}

src/Drivers/DriverInterface.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
/**
3+
* InitORM QueryBuilder
4+
*
5+
* This file is part of InitORM QueryBuilder.
6+
*
7+
* @author Muhammet ŞAFAK <info@muhammetsafak.com.tr>
8+
* @copyright Copyright © 2023 Muhammet ŞAFAK
9+
* @license ./LICENSE MIT
10+
* @version 1.0.1
11+
* @link https://www.muhammetsafak.com.tr
12+
*/
13+
14+
declare(strict_types=1);
15+
namespace InitORM\QueryBuilder\Drivers;
16+
17+
interface DriverInterface
18+
{
19+
20+
/**
21+
* @param string $string
22+
* @return string
23+
*/
24+
public function escapeIdentify(string &$string): string;
25+
26+
/**
27+
* @return string|null
28+
*/
29+
public function getDriver(): ?string;
30+
31+
}

src/Drivers/MySQL.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
/**
3+
* InitORM QueryBuilder
4+
*
5+
* This file is part of InitORM QueryBuilder.
6+
*
7+
* @author Muhammet ŞAFAK <info@muhammetsafak.com.tr>
8+
* @copyright Copyright © 2023 Muhammet ŞAFAK
9+
* @license ./LICENSE MIT
10+
* @version 1.0.1
11+
* @link https://www.muhammetsafak.com.tr
12+
*/
13+
14+
declare(strict_types=1);
15+
namespace InitORM\QueryBuilder\Drivers;
16+
17+
class MySQL extends BaseDriver
18+
{
19+
20+
protected string $name = 'mysql';
21+
22+
protected string $escapeChar = '`';
23+
24+
}

src/Drivers/PgSQL.php

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
/**
3+
* InitORM QueryBuilder
4+
*
5+
* This file is part of InitORM QueryBuilder.
6+
*
7+
* @author Muhammet ŞAFAK <info@muhammetsafak.com.tr>
8+
* @copyright Copyright © 2023 Muhammet ŞAFAK
9+
* @license ./LICENSE MIT
10+
* @version 1.0.1
11+
* @link https://www.muhammetsafak.com.tr
12+
*/
13+
14+
declare(strict_types=1);
15+
namespace InitORM\QueryBuilder\Drivers;
16+
17+
class PgSQL extends BaseDriver
18+
{
19+
20+
protected string $escapeChar = '"';
21+
22+
protected string $name = 'pgsql';
23+
24+
/**
25+
* @inheritDoc
26+
*/
27+
public function escapeIdentify(string &$string): string
28+
{
29+
parent::escapeIdentify($string);
30+
//$string = preg_replace('/(?<!:)\b\w*[A-Z]\w*\b/', $this->escapeChar . '$1' . $this->escapeChar, $string);
31+
32+
return $string;
33+
}
34+
35+
}

src/Drivers/SQLite.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
/**
3+
* InitORM QueryBuilder
4+
*
5+
* This file is part of InitORM QueryBuilder.
6+
*
7+
* @author Muhammet ŞAFAK <info@muhammetsafak.com.tr>
8+
* @copyright Copyright © 2023 Muhammet ŞAFAK
9+
* @license ./LICENSE MIT
10+
* @version 1.0.1
11+
* @link https://www.muhammetsafak.com.tr
12+
*/
13+
14+
declare(strict_types=1);
15+
namespace InitORM\QueryBuilder\Drivers;
16+
17+
class SQLite extends BaseDriver
18+
{
19+
20+
protected string $name = 'sqlite';
21+
22+
protected string $escapeChar = '`';
23+
24+
}

src/Parameters.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @author Muhammet ŞAFAK <info@muhammetsafak.com.tr>
88
* @copyright Copyright © 2023 Muhammet ŞAFAK
99
* @license ./LICENSE MIT
10-
* @version 1.0
10+
* @version 1.0.1
1111
* @link https://www.muhammetsafak.com.tr
1212
*/
1313

@@ -31,7 +31,7 @@ public function __construct()
3131
*/
3232
public function set(string $key, mixed $value): self
3333
{
34-
$this->parameters[':' . ltrim(str_replace('.', '', $key), ':')] = $value;
34+
$this->parameters[':' . preg_replace("/[^A-Za-z0-9_]/", "", $key)] = $value;
3535

3636
return $this;
3737
}
@@ -47,6 +47,7 @@ public function add(RawQuery|string $key, mixed $value): string
4747
if ($key instanceof RawQuery) {
4848
$key = md5((string)$key);
4949
}
50+
$key = preg_replace("/[^A-Za-z0-9_]/", "", $key);
5051
$originKey = ltrim(str_replace('.', '', $key), ':');
5152
$i = 0;
5253
do {

0 commit comments

Comments
 (0)