QuickInsertRepository   A
last analyzed

Complexity

Total Complexity 25

Size/Duplication

Total Lines 127
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 61
dl 0
loc 127
rs 10
c 0
b 0
f 0
wmc 25

9 Methods

Rating   Name   Duplication   Size   Complexity  
A update() 0 18 5
A runSQL() 0 24 5
A setFK() 0 4 2
A link() 0 6 1
A findNextId() 0 6 2
A findNextIdExt() 0 6 1
A persist() 0 28 4
A get() 0 9 4
A delete() 0 6 1
1
<?php
2
3
namespace Sludio\HelperBundle\Script\Repository;
4
5
use Doctrine\Common\Persistence\Mapping\ClassMetadata;
6
use Sludio\HelperBundle\Script\Utils\Helper;
7
8
class QuickInsertRepository extends QuickInsertFunctions
9
{
10
    public static function findNextIdExt(ClassMetadata $metadata, $manager = null)
11
    {
12
        self::init($manager);
13
        $data = Filters::extractExt($metadata);
14
15
        return self::findNextId($data['table']);
16
    }
17
18
    public static function findNextId($tableName)
19
    {
20
        return self::get(['table_name' => 'information_schema.tables'], true, [
21
            'table_name' => $tableName,
22
            ['table_schema = DATABASE()'],
23
        ], ['AUTO_INCREMENT']) ?: 1;
24
    }
25
26
    public static function get($object, $one = false, array $where = [], array $fields = [], $manager = null, array $extra = [])
27
    {
28
        self::getTable($object, $tableName, $columns, $type, $manager);
29
30
        $select = sprintf('SELECT %s ', isset($extra['MODE']) ? $extra['MODE'] : '');
31
        $fields = $fields ?: ['id'];
32
        $sql = $select.implode(', ', $fields).' FROM '.$tableName.self::buildWhere($tableName, $where).self::buildExtra($extra);
33
34
        return Filters::filterGetResult((self::runSQL($sql) ?: null), $fields, $one);
35
    }
36
37
    public static function runSQL($sql, $noFkCheck = true, $manager = null, $skip = false)
38
    {
39
        $sql = trim(preg_replace('/\s+/', ' ', $sql));
40
        self::init($manager);
41
        if (!$skip) {
42
            self::setFK(0, $noFkCheck);
43
        }
44
45
        $sth = self::$connection->prepare($sql);
46
47
        try {
48
            $sth->execute();
49
        } catch (\Exception $e) {
50
            return null;
51
        }
52
53
        if (!$skip) {
54
            self::setFK(1, $noFkCheck);
55
        }
56
        if (0 === strpos($sql, 'SELECT')) {
57
            return $sth->fetchAll();
58
        }
59
60
        return true;
61
    }
62
63
    public static function setFK($fkCheck = 0, $noFkCheck = false)
64
    {
65
        if (!$noFkCheck) {
66
            self::runSQL("SET FOREIGN_KEY_CHECKS = $fkCheck", false, null, true);
67
        }
68
    }
69
70
    public static function update($id, $object, array $extraFields = [], $noFkCheck = false, $manager = null)
71
    {
72
        self::getTable($object, $tableName, $columns, $type, $manager, $extraFields);
73
74
        $result = self::get(['table_name' => $tableName], true, ['id' => $id], ['*']) ?: [];
75
        if (isset($result['id'])) {
76
            unset($result['id']);
77
        }
78
        $data = self::parseUpdateResult($object, $type, $id, $tableName, $result);
79
80
        if (!empty($data)) {
81
            $sql = sprintf('UPDATE %s SET ', $tableName);
82
            foreach ($data as $key => $value) {
83
                $sql .= ' '.$key.' = '.self::slashes($tableName, $key, $value).',';
84
            }
85
            $sql = substr($sql, 0, -1).' WHERE id = '.$id;
86
87
            self::runSQL($sql, $noFkCheck);
88
        }
89
    }
90
91
    public static function delete($object, array $where = [], $noFkCheck = false, $manager = null)
92
    {
93
        self::getTable($object, $tableName, $columns, $type, $manager);
94
95
        $sql = sprintf('DELETE FROM %s%s', $tableName, self::buildWhere($tableName, $where));
96
        self::runSQL($sql, $noFkCheck);
97
    }
98
99
    public static function link($object, $data, $noFkCheck = false, $manager = null)
100
    {
101
        self::getTable($object, $tableName, $columns, $type, $manager);
102
103
        $data['table_name'] = $tableName;
104
        self::persist($data, true, [], $noFkCheck, $manager);
105
    }
106
107
    public static function persist($object, $full = false, array $extraFields = [], $noFkCheck = false, $manager = null)
108
    {
109
        self::getTable($object, $tableName, $columns, $type, $manager, $extraFields);
110
111
        $id = self::findNextId($tableName);
112
        $data = self::parsePersistColumns($columns, $object, $type, $tableName, $idd);
113
114
        if (!$full) {
115
            $data[self::$identifier] = $id;
116
        } else {
117
            $id = $idd;
118
        }
119
120
        if ($id !== null && Helper::isEmpty($data)) {
121
            return null;
122
        }
123
124
        $sql = '
125
            INSERT INTO
126
                '.$tableName.'
127
                    ('.implode(',', array_keys($data)).')
128
            VALUES
129
                ('.self::makeValues($tableName, $data).')
130
        ';
131
132
        self::runSQL($sql, $noFkCheck);
133
134
        return $id;
135
    }
136
}
137