Completed
Push — develop ( 4f051c...c7250c )
by Bartko
07:21 queued 05:04
created

TestUtil::getZend2DbAdapter()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 13
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 13
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 9
nc 2
nop 0
1
<?php
2
namespace StefanoTreeTest;
3
4
use Doctrine\DBAL;
5
use PDO;
6
use StefanoDb\Adapter\Adapter as StefanoDbAdapter;
7
use Zend\Db\Adapter\Adapter as Zend2DbAdapter;
8
9
class TestUtil
10
{
11
    private static $dbConnection;
12
    private static $zend2DbAdapter;
13
    private static $zend1DbAdapter;
14
    private static $stefanoDbAdapter;
15
    private static $doctrine2Connection;
16
17
    public static function createDbScheme()
18
    {
19
        $connection = self::getPDOConnection();
20
21
        $queries = array();
22
23
        if ('mysql' == TEST_STEFANO_DB_ADAPTER) {
24
            $queries[] = 'DROP TABLE IF EXISTS `tree_traversal`';
25
            $queries[] = 'DROP TABLE IF EXISTS `tree_traversal_with_scope`';
26
27
            $queries[] =  'CREATE TABLE `tree_traversal` (
28
                `tree_traversal_id` int(11) NOT NULL AUTO_INCREMENT,
29
                `name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
30
                `lft` int(11) NOT NULL,
31
                `rgt` int(11) NOT NULL,
32
                `parent_id` int(11) DEFAULT NULL,
33
                `level` int(11) DEFAULT NULL,
34
                PRIMARY KEY (`tree_traversal_id`),
35
                KEY `parent_id` (`parent_id`),
36
                KEY `level` (`level`),
37
                KEY `lft` (`lft`),
38
                KEY `rgt` (`rgt`)
39
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin';
40
41
            $queries[] = 'ALTER TABLE `tree_traversal`
42
                ADD FOREIGN KEY (`parent_id`) 
43
                REFERENCES `tree_traversal` (`tree_traversal_id`) 
44
                ON DELETE CASCADE ON UPDATE CASCADE';
45
46
            $queries[] =  'CREATE TABLE `tree_traversal_with_scope` (
47
                `tree_traversal_id` int(11) NOT NULL AUTO_INCREMENT,
48
                `name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
49
                `lft` int(11) NOT NULL,
50
                `rgt` int(11) NOT NULL,
51
                `parent_id` int(11) DEFAULT NULL,
52
                `level` int(11) DEFAULT NULL,
53
                `scope` int(11) NOT NULL,
54
                PRIMARY KEY (`tree_traversal_id`),
55
                KEY `parent_id` (`parent_id`),
56
                KEY `level` (`level`),
57
                KEY `lft` (`lft`),
58
                KEY `rgt` (`rgt`),
59
                KEY `scope` (`scope`)
60
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin';
61
62
            $queries[] = 'ALTER TABLE `tree_traversal_with_scope`
63
                ADD FOREIGN KEY (`parent_id`) 
64
                REFERENCES `tree_traversal_with_scope` (`tree_traversal_id`) 
65
                ON DELETE CASCADE ON UPDATE CASCADE';
66
        } elseif ('pgsql' == TEST_STEFANO_DB_ADAPTER) {
67
            $queries[] = 'DROP TABLE IF EXISTS tree_traversal';
68
            $queries[] = 'DROP TABLE IF EXISTS tree_traversal_with_scope';
69
70
            $queries[] = 'CREATE TABLE tree_traversal (
71
                  tree_traversal_id serial NOT NULL,
72
                  name character varying(255),
73
                  lft integer NOT NULL,
74
                  rgt integer NOT NULL,
75
                  parent_id integer,
76
                  level integer,
77
                  CONSTRAINT tree_traversal_pkey PRIMARY KEY (tree_traversal_id),
78
                  CONSTRAINT tree_traversal_parent_id_fkey FOREIGN KEY (parent_id)
79
                    REFERENCES public.tree_traversal (tree_traversal_id) MATCH SIMPLE
80
                    ON UPDATE CASCADE ON DELETE CASCADE
81
                )';
82
83
            $queries[] = 'CREATE INDEX tree_traversal_level
84
                ON public.tree_traversal
85
                USING btree (level)';
86
87
            $queries[] = 'CREATE INDEX tree_traversal_lft
88
                ON public.tree_traversal
89
                USING btree (lft)';
90
91
            $queries[] = 'CREATE INDEX tree_traversal_parent_id
92
                ON public.tree_traversal
93
                USING btree (parent_id)';
94
95
            $queries[] = 'CREATE INDEX tree_traversal_rgt
96
                  ON public.tree_traversal
97
                  USING btree (rgt)';
98
99
            $queries[] = 'CREATE TABLE tree_traversal_with_scope (
100
                  tree_traversal_id serial NOT NULL,
101
                  name character varying(255),
102
                  lft integer NOT NULL,
103
                  rgt integer NOT NULL,
104
                  parent_id integer,
105
                  level integer,
106
                  scope integer NOT NULL,
107
                  CONSTRAINT tree_traversal_with_scope_pkey PRIMARY KEY (tree_traversal_id),
108
                  CONSTRAINT tree_traversal_with_scope_parent_id_fkey FOREIGN KEY (parent_id)
109
                    REFERENCES public.tree_traversal_with_scope (tree_traversal_id) MATCH SIMPLE
110
                    ON UPDATE CASCADE ON DELETE CASCADE
111
                )';
112
113
            $queries[] = 'CREATE INDEX tree_traversal_with_scope_level
114
                  ON public.tree_traversal_with_scope
115
                  USING btree (level)';
116
117
            $queries[] = 'CREATE INDEX tree_traversal_with_scope_lft
118
                  ON public.tree_traversal_with_scope
119
                  USING btree (lft)';
120
121
            $queries[] = 'CREATE INDEX tree_traversal_with_scope_parent_id
122
                  ON public.tree_traversal_with_scope
123
                  USING btree (parent_id)';
124
125
            $queries[] = 'CREATE INDEX tree_traversal_with_scope_rgt
126
                  ON public.tree_traversal_with_scope
127
                  USING btree (rgt)';
128
129
            $queries[] = 'CREATE INDEX tree_traversal_with_scope_scope
130
                  ON public.tree_traversal_with_scope
131
                  USING btree (scope)';
132
        } else {
133
            throw new \Exception(sprintf('Unsupported vendor %s', TEST_STEFANO_DB_ADAPTER));
134
        }
135
136
        foreach ($queries as $query) {
137
            $connection->query($query);
138
        }
139
    }
140
141
    /**
142
     * Singleton
143
     * @return PDO
144
     */
145
    public static function getPDOConnection()
146
    {
147
        if (null == self::$dbConnection) {
148
            $adapter    = strtolower(TEST_STEFANO_DB_ADAPTER);
149
            $hostname   = TEST_STEFANO_DB_HOSTNAME;
150
            $dbName     = TEST_STEFANO_DB_DB_NAME;
151
            $user       = TEST_STEFANO_DB_USER;
152
            $password   = TEST_STEFANO_DB_PASSWORD;
153
154
            self::$dbConnection = new PDO(
155
                $adapter . ':host=' . $hostname . ';dbname='
156
                . $dbName, $user, $password
157
            );
158
        }
159
        return self::$dbConnection;
160
    }
161
162
    /**
163
     * Singleton
164
     * @return Zend2DbAdapter
165
     */
166
    public static function getZend2DbAdapter()
167
    {
168
        if (null == self::$zend2DbAdapter) {
169
            self::$zend2DbAdapter = new Zend2DbAdapter(array(
170
                'driver' => 'Pdo_' . ucfirst(TEST_STEFANO_DB_ADAPTER),
171
                'hostname' => TEST_STEFANO_DB_HOSTNAME,
172
                'database' => TEST_STEFANO_DB_DB_NAME,
173
                'username' => TEST_STEFANO_DB_USER,
174
                'password' => TEST_STEFANO_DB_PASSWORD
175
            ));
176
        }
177
        return self::$zend2DbAdapter;
178
    }
179
180
    /**
181
     * Singleton
182
     * @return \Zend_Db_Adapter_Abstract
183
     */
184
    public static function getZend1DbAdapter()
185
    {
186
        if (null == self::$zend1DbAdapter) {
187
            self::$zend1DbAdapter = \Zend_Db::factory('Pdo_' . ucfirst(TEST_STEFANO_DB_ADAPTER), array(
188
                'host' => TEST_STEFANO_DB_HOSTNAME,
189
                'dbname' => TEST_STEFANO_DB_DB_NAME,
190
                'username' => TEST_STEFANO_DB_USER,
191
                'password' => TEST_STEFANO_DB_PASSWORD
192
            ));
193
        }
194
        return self::$zend1DbAdapter;
195
    }
196
197
    /**
198
     * Singleton
199
     * @return StefanoDbAdapter
200
     */
201
    public static function getStefanoDbAdapter()
202
    {
203
        if (null == self::$stefanoDbAdapter) {
204
            self::$stefanoDbAdapter = new StefanoDbAdapter(array(
205
                'driver' => 'Pdo_' . ucfirst(TEST_STEFANO_DB_ADAPTER),
206
                'hostname' => TEST_STEFANO_DB_HOSTNAME,
207
                'database' => TEST_STEFANO_DB_DB_NAME,
208
                'username' => TEST_STEFANO_DB_USER,
209
                'password' => TEST_STEFANO_DB_PASSWORD
210
            ));
211
        }
212
        return self::$stefanoDbAdapter;
213
    }
214
215
    /**
216
     * Singleton
217
     * @return DBAL\Connection
218
     */
219
    public static function getDoctrine2Connection()
220
    {
221
        if (null == self::$doctrine2Connection) {
222
            $config = new DBAL\Configuration();
223
            $connectionParams = array(
224
                'dbname' => TEST_STEFANO_DB_DB_NAME,
225
                'user' => TEST_STEFANO_DB_USER,
226
                'password' => TEST_STEFANO_DB_PASSWORD,
227
                'host' => TEST_STEFANO_DB_HOSTNAME,
228
                'driver' => 'pdo_' . strtolower(TEST_STEFANO_DB_ADAPTER),
229
            );
230
231
            self::$doctrine2Connection = DBAL\DriverManager::getConnection($connectionParams, $config);
232
        }
233
        return self::$doctrine2Connection;
234
    }
235
}
236