Skip to content

Commit e84edba

Browse files
committed
updates, basic schema tests
1 parent 81131a6 commit e84edba

File tree

3 files changed

+164
-27
lines changed

3 files changed

+164
-27
lines changed

shared/ezFunctions.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,17 @@
186186

187187
const _DS = \DIRECTORY_SEPARATOR;
188188

189+
\define('MYSQL', 'mysqli', true);
190+
\define('MYSQLI', 'mysqli', true);
191+
\define('Pdo', 'pdo');
192+
\define('PGSQL', 'pgsql', true);
193+
\define('POSTGRESQL', 'pgsql', true);
194+
\define('SQLITE', 'sqlite3', true);
195+
\define('SQLITE3', 'sqlite3', true);
196+
\define('SQLSRV', 'sqlsrv');
197+
\define('SQLSERVER', 'sqlsrv', true);
198+
\define('MSSQL', 'sqlsrv', true);
199+
189200
// Global class instances, will be used to create and call methods directly.
190201
global $ezInstance;
191202

shared/ezSchema.php

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,64 +5,64 @@ class ezSchema
55
{
66
const STRINGS = [
77
'common' => ['CHAR', 'VARCHAR', 'TEXT'],
8-
'mysql' => ['TINYTEXT', 'MEDIUMTEXT', 'LONGTEXT', 'BINARY', 'VARBINARY'],
9-
'postgresql' => ['character', 'character varying'],
10-
'sqlserver' => ['NCHAR', 'NVARCHAR', 'NTEXT', 'BINARY', 'VARBINARY', 'IMAGE'],
8+
'mysqli' => ['TINYTEXT', 'MEDIUMTEXT', 'LONGTEXT', 'BINARY', 'VARBINARY'],
9+
'pgsql' => ['character', 'character varying'],
10+
'sqlsrv' => ['NCHAR', 'NVARCHAR', 'NTEXT', 'BINARY', 'VARBINARY', 'IMAGE'],
1111
'sqlite3' => ['TINYTEXT', 'MEDIUMTEXT', 'LONGTEXT', 'NCHAR', 'NVARCHAR', 'CLOB']
1212
];
1313

1414
const NUMBERS = [
1515
'common' => ['INT'],
16-
'mysql' => ['BIT', 'INTEGER', 'TINYINT', 'SMALLINT', 'MEDIUMINT', 'BIGINT', 'FLOAT',
16+
'mysqli' => ['BIT', 'INTEGER', 'TINYINT', 'SMALLINT', 'MEDIUMINT', 'BIGINT', 'FLOAT',
1717
'BOOL', 'BOOLEAN'],
18-
'postgresql' => ['bit', 'varbit', 'bit varying', 'smallint', 'int', 'integer',
18+
'pgsql' => ['bit', 'varbit', 'bit varying', 'smallint', 'int', 'integer',
1919
'bigint', 'smallserial', 'serial', 'bigserial', 'double precision', 'real',
2020
'money', 'bool', 'boolean'],
21-
'sqlserver' => ['BIT', 'TINYINT', 'SMALLINT', 'BIGINT', 'SMALLMONEY', 'MONEY',
21+
'sqlsrv' => ['BIT', 'TINYINT', 'SMALLINT', 'BIGINT', 'SMALLMONEY', 'MONEY',
2222
'FLOAT', 'REAL'],
2323
'sqlite3' => ['TINYINT', 'SMALLINT', 'MEDIUMINT', 'BIGINT', 'INTEGER', 'INT2',
2424
'INT4', 'INT8', 'REAL', 'DOUBLE', 'DOUBLE PRECISION', 'FLOAT', 'BOOLEAN']
2525
];
2626

2727
const NUMERICS = [
2828
'common' => ['NUMERIC', 'DECIMAL'],
29-
'mysql' => ['IDENTITY','DEC', 'FIXED', 'FLOAT', 'DOUBLE', 'DOUBLE PRECISION', 'REAL'],
30-
'sqlserver' => ['DEC'],
31-
'postgresql' => [],
29+
'mysqli' => ['IDENTITY','DEC', 'FIXED', 'FLOAT', 'DOUBLE', 'DOUBLE PRECISION', 'REAL'],
30+
'sqlsrv' => ['DEC'],
31+
'pgsql' => [],
3232
'sqlite3' => []
3333
];
3434

3535
const DATE_TIME = [
3636
'common' => ['DATE', 'TIMESTAMP', 'TIME'],
37-
'mysql' => ['DATETIME', 'YEAR'],
38-
'postgresql' => [
37+
'mysqli' => ['DATETIME', 'YEAR'],
38+
'pgsql' => [
3939
'timestamp without time zone', 'timestamp with time zone',
4040
'time without time zone', 'time with time zone'
4141
],
42-
'sqlserver' => ['DATETIME', 'DATETIME2', 'SMALLDATETIME', 'DATETIMEOFFSET'],
42+
'sqlsrv' => ['DATETIME', 'DATETIME2', 'SMALLDATETIME', 'DATETIMEOFFSET'],
4343
'sqlite3' => ['DATETIME']
4444
];
4545

4646
const OBJECTS = [
47-
'mysql' => ['TINYBLOB', 'BLOB', 'MEDIUMBLOB', 'LONGTEXT'],
47+
'mysqli' => ['TINYBLOB', 'BLOB', 'MEDIUMBLOB', 'LONGTEXT'],
4848
'sqlite3' => ['BLOB'],
49-
'postgresql' => [],
50-
'sqlserver' => []
49+
'pgsql' => [],
50+
'sqlsrv' => []
5151
];
5252

5353
const OPTIONS = ['CONSTRAINT', 'PRIMARY KEY', 'FOREIGN KEY', 'UNIQUE', 'INDEX', 'REFERENCES'];
5454
const ALTERS = ['ADD', 'DROP COLUMN', 'CHANGE COLUMN', 'RENAME TO', 'MODIFY', 'ALTER COLUMN'];
5555
const CHANGES = [
56-
'mysql' => 'MODIFY',
57-
'postgresql' => 'ALTER COLUMN',
58-
'sqlserver' => 'ALTER COLUMN',
56+
'mysqli' => 'MODIFY',
57+
'pgsql' => 'ALTER COLUMN',
58+
'sqlsrv' => 'ALTER COLUMN',
5959
'sqlite3' => ''
6060
];
6161

6262
const autoNUMBERS = [
63-
'mysql' => 'AUTO_INCREMENT',
64-
'postgresql' => 'SERIAL',
65-
'sqlserver' => 'IDENTITY(1,1)',
63+
'mysqli' => 'AUTO_INCREMENT',
64+
'pgsql' => 'SERIAL',
65+
'sqlsrv' => 'IDENTITY(1,1)',
6666
'sqlite3' => 'AUTOINCREMENT'
6767
];
6868

@@ -164,21 +164,21 @@ public static function vendor()
164164
if ($dbSqlite === $instance && !empty($dbSqlite))
165165
$type = 'sqlite3';
166166
elseif ($dbPgsql === $instance && !empty($dbPgsql))
167-
$type = 'postgresql';
167+
$type = 'pgsql';
168168
elseif ($dbMysqli === $instance && !empty($dbMysqli))
169-
$type = 'mysql';
169+
$type = 'mysqli';
170170
elseif ($dbMssql === $instance && !empty($dbMssql))
171-
$type = 'sqlserver';
171+
$type = 'sqlsrv';
172172
elseif ($dbPdo === $instance && !empty($dbPdo)) {
173173
$dbh = $dbPdo->connection();
174174
if (strpos($dbh->getAttribute(\PDO::ATTR_CLIENT_VERSION), 'mysql') !== false)
175-
$type = 'mysql';
175+
$type = 'mysqli';
176176
elseif (strpos($dbh->getAttribute(\PDO::ATTR_CLIENT_VERSION), 'pgsql') !== false)
177-
$type = 'postgresql';
177+
$type = 'pgsql';
178178
elseif (strpos($dbh->getAttribute(\PDO::ATTR_CLIENT_VERSION), 'sqlite') !== false)
179179
$type = 'sqlite3';
180180
elseif (strpos($dbh->getAttribute(\PDO::ATTR_CLIENT_VERSION), 'sqlsrv') !== false)
181-
$type = 'sqlserver';
181+
$type = 'sqlsrv';
182182
}
183183

184184
return $type;

tests/shared/ezSchemaTest.php

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
<?php
2+
3+
require 'vendor/autoload.php';
4+
5+
use ezsql\ezSchema;
6+
use PHPUnit\Framework\TestCase;
7+
8+
class ezSchemaTest extends TestCase
9+
{
10+
/**
11+
* constant string user name
12+
*/
13+
const TEST_DB_USER = 'ez_test';
14+
15+
/**
16+
* constant string password
17+
*/
18+
const TEST_DB_PASSWORD = 'ezTest';
19+
20+
/**
21+
* constant database name
22+
*/
23+
const TEST_DB_NAME = 'ez_test';
24+
25+
/**
26+
* constant database host
27+
*/
28+
const TEST_DB_HOST = 'localhost';
29+
30+
/**
31+
* constant database connection charset
32+
*/
33+
const TEST_DB_CHARSET = 'utf8';
34+
35+
/**
36+
* constant database port
37+
*/
38+
const TEST_DB_PORT = '5432';
39+
40+
/**
41+
* constant string path and file name of the SQLite test database
42+
*/
43+
const TEST_SQLITE_DB = 'ez_test.sqlite3';
44+
const TEST_SQLITE_DB_DIR = './tests/sqlite/';
45+
46+
/**
47+
* @covers ezsql\ezSchema::vendor
48+
*/
49+
public function testVendor()
50+
{
51+
setQuery();
52+
$this->assertEquals(null, ezSchema::vendor());
53+
$this->assertEquals(false, ezSchema::datatype(BLOB, NULLS));
54+
$this->assertFalse(column('id', INTR, 32, AUTO, PRIMARY));
55+
}
56+
57+
/**
58+
* @covers ezsql\ezSchema::vendor
59+
*/
60+
public function testVendor_mysqli()
61+
{
62+
if (!extension_loaded('mysqli')) {
63+
$this->markTestSkipped(
64+
'The MySQLi extension is not available.'
65+
);
66+
}
67+
68+
$object = new ezSQL_mysqli;
69+
$object->quick_connect(self::TEST_DB_USER, self::TEST_DB_PASSWORD, self::TEST_DB_NAME);
70+
71+
$this->assertEquals(MYSQLI, ezSchema::vendor());
72+
$this->assertEquals('BLOB NULL', ezSchema::datatype(BLOB, NULLS));
73+
$this->assertEquals('VARCHAR(256) NOT NULL', ezSchema::datatype(VARCHAR, 256, notNULL));
74+
$this->assertEquals('id INT(32) AUTO_INCREMENT PRIMARY KEY, ', column('id', INTR, 32, AUTO, PRIMARY));
75+
}
76+
77+
/**
78+
* @covers ezsql\ezSchema::vendor
79+
*/
80+
public function testVendor_Pgsql()
81+
{
82+
if (!extension_loaded('pgsql')) {
83+
$this->markTestSkipped(
84+
'The PostgreSQL Lib is not available.'
85+
);
86+
}
87+
88+
$object = new ezSQL_postgresql;
89+
$object->quick_connect(self::TEST_DB_USER, self::TEST_DB_PASSWORD, self::TEST_DB_NAME, self::TEST_DB_HOST, self::TEST_DB_PORT);
90+
$this->assertEquals(PGSQL, ezSchema::vendor());
91+
$this->assertEquals('TIMESTAMP NOT NULL', ezSchema::datatype(TIMESTAMP, notNULL));
92+
$this->assertEquals('price NUMERIC(6,2) NULL, ', column('price', NUMERIC, 6, 2, NULLS));
93+
$this->assertEquals('id SERIAL PRIMARY KEY, ', column('id', AUTO, PRIMARY));
94+
}
95+
96+
/**
97+
* @covers ezsql\ezSchema::vendor
98+
*/
99+
public function testVendor_Sqlite3()
100+
{
101+
if (!extension_loaded('sqlite3')) {
102+
$this->markTestSkipped(
103+
'The sqlite3 Lib is not available.'
104+
);
105+
}
106+
107+
$object = new ezSQL_sqlite3(self::TEST_SQLITE_DB_DIR, self::TEST_SQLITE_DB);
108+
$this->assertEquals(SQLITE3, ezSchema::vendor());
109+
}
110+
111+
/**
112+
* @covers ezsql\ezSchema::vendor
113+
*/
114+
public function testVendor_Sqlsrv()
115+
{
116+
if (!extension_loaded('sqlsrv')) {
117+
$this->markTestSkipped(
118+
'The sqlsrv Lib is not available.'
119+
);
120+
}
121+
122+
$object = new ezSQL_sqlsrv;
123+
$object->quick_connect(self::TEST_DB_USER, self::TEST_DB_PASSWORD, self::TEST_DB_NAME);
124+
$this->assertEquals(MSSQL, ezSchema::vendor());
125+
}
126+
}

0 commit comments

Comments
 (0)