Completed
Pull Request — master (#1)
by Joao
03:38
created

SqlBind   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 57
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 1

Importance

Changes 0
Metric Value
wmc 8
lcom 0
cbo 1
dl 0
loc 57
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getParamModel() 0 10 3
A parseSQL() 0 21 4
A keyAdj() 0 4 1
1
<?php
2
3
namespace ByJG\AnyDataset\Database;
4
5
use ByJG\AnyDataset\ConnectionManagement;
6
7
/**
8
 * Class to create and manipulate Several Data Types
9
 *
10
 */
11
class SqlBind
12
{
13
14
    /**
15
     * Each provider have your own model for pass parameter.
16
     * This method define how each provider name define the parameters
17
     *
18
     * @param ConnectionManagement $connData
19
     * @return string
20
     */
21
    public static function getParamModel(ConnectionManagement $connData)
22
    {
23
        if ($connData->getExtraParam("parammodel") != "") {
24
            return $connData->getExtraParam("parammodel");
25
        } elseif ($connData->getDriver() == "sqlrelay") {
26
            return "?";
27
        } else {
28
            return ":_";
29
        }
30
    }
31
32
    /**
33
     * Transform generic parameters [[PARAM]] in a parameter recognized by the provider
34
     * name based on current DbParameter array.
35
     *
36
     * @param ConnectionManagement $connData
37
     * @param string $sql
38
     * @param array $params
39
     * @return array An array with the adjusted SQL and PARAMs
40
     */
41
    public static function parseSQL(ConnectionManagement $connData, $sql, $params = null)
42
    {
43
        if (is_null($params)) {
44
            return [$sql, null];
45
        }
46
47
        $paramSubstName = SqlBind::getParamModel($connData);
48
        foreach ($params as $key => $value) {
49
            $arg = str_replace("_", SqlBind::keyAdj($key), $paramSubstName);
50
51
            $count = 0;
52
            $sql = preg_replace("/(\[\[$key\]\]|:" . $key . "[\s\W]|:$key\$)/", $arg . ' ', $sql, -1, $count);
53
            if ($count === 0) {
54
                unset($params[$key]);
55
            }
56
        }
57
58
        $sql = preg_replace("/\[\[(.*?)\]\]/", "null", $sql);
59
60
        return [$sql, $params];
61
    }
62
63
    public static function keyAdj($key)
64
    {
65
        return str_replace(".", "_", $key);
66
    }
67
}
68