diff --git a/.travis.yml b/.travis.yml index e4b8278..776ea53 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,6 +7,7 @@ php: env: - DB=mysql + - DB=sqlite before_script: - sh -c "if [ '$DB' = 'mysql' ]; then mysql -e 'create database IF NOT EXISTS yiitest;'; fi" diff --git a/framework/db/sqlite/Schema.php b/framework/db/sqlite/Schema.php index 45f8392..d4fb245 100644 --- a/framework/db/sqlite/Schema.php +++ b/framework/db/sqlite/Schema.php @@ -169,7 +169,7 @@ class Schema extends \yii\db\Schema } } } - $column->phpType = $this->getColumnPhpType($this->type); + $column->phpType = $this->getColumnPhpType($column); $value = $info['dflt_value']; if ($column->type === 'string') { diff --git a/tests/unit/DatabaseTestCase.php b/tests/unit/DatabaseTestCase.php new file mode 100644 index 0000000..d6f1223 --- /dev/null +++ b/tests/unit/DatabaseTestCase.php @@ -0,0 +1,50 @@ +getParam('databases'); + $this->database = $databases[$this->driverName]; + $pdo_database = 'pdo_'.$this->driverName; + + if (!extension_loaded('pdo') || !extension_loaded($pdo_database)) { + $this->markTestSkipped('pdo and pdo_'.$pdo_database.' extension are required.'); + } + } + + /** + * @param bool $reset whether to clean up the test database + * @param bool $open whether to open and populate test database + * @return \yii\db\Connection + */ + public function getConnection($reset = true, $open = true) + { + if (!$reset && $this->db) { + return $this->db; + } + $db = new \yii\db\Connection; + $db->dsn = $this->database['dsn']; + if (isset($this->database['username'])) { + $db->username = $this->database['username']; + $db->password = $this->database['password']; + } + if ($open) { + $db->open(); + $lines = explode(';', file_get_contents($this->database['fixture'])); + foreach ($lines as $line) { + if (trim($line) !== '') { + $db->pdo->exec($line); + } + } + } + $this->db = $db; + return $db; + } +} \ No newline at end of file diff --git a/tests/unit/data/config.php b/tests/unit/data/config.php index 238a7cc..c980c57 100644 --- a/tests/unit/data/config.php +++ b/tests/unit/data/config.php @@ -1,10 +1,16 @@ array( - 'dsn' => 'mysql:host=127.0.0.1;dbname=yiitest', - 'username' => 'travis', - 'password' => '', - 'fixture' => __DIR__ . '/mysql.sql', - ), + 'databases' => array( + 'mysql' => array( + 'dsn' => 'mysql:host=127.0.0.1;dbname=yiitest', + 'username' => 'travis', + 'password' => '', + 'fixture' => __DIR__ . '/mysql.sql', + ), + 'sqlite' => array( + 'dsn' => 'sqlite::memory:', + 'fixture' => __DIR__ . '/sqlite.sql', + ), + ) ); diff --git a/tests/unit/data/mysql.sql b/tests/unit/data/mysql.sql index 8223f59..1bb5558 100644 --- a/tests/unit/data/mysql.sql +++ b/tests/unit/data/mysql.sql @@ -1,10 +1,6 @@ /** * This is the database schema for testing MySQL support of Yii DAO and Active Record. - * The following database setup is required to perform then relevant tests: - * Database name: yiitest - * username: test - * password: test - * charset: utf8 + * The database setup in config.php is required to perform then relevant tests: */ DROP TABLE IF EXISTS tbl_order_item CASCADE; diff --git a/tests/unit/data/sqlite.sql b/tests/unit/data/sqlite.sql index affeca9..f75bfa6 100644 --- a/tests/unit/data/sqlite.sql +++ b/tests/unit/data/sqlite.sql @@ -1,262 +1,88 @@ -CREATE TABLE users -( - id INTEGER NOT NULL PRIMARY KEY, - username VARCHAR(128) NOT NULL, - password VARCHAR(128) NOT NULL, - email VARCHAR(128) NOT NULL -); - -INSERT INTO users(id,username,password,email) VALUES (1,'user1','pass1','email1'); -INSERT INTO users(id,username,password,email) VALUES (2,'user2','pass2','email2'); -INSERT INTO users(id,username,password,email) VALUES (3,'user3','pass3','email3'); -INSERT INTO users(id,username,password,email) VALUES (4,'user4','pass4','email4'); - -CREATE TABLE groups -( - id INTEGER NOT NULL PRIMARY KEY, - name VARCHAR(128) NOT NULL -); - -INSERT INTO groups(id,name) VALUES (1,'group1'); -INSERT INTO groups(id,name) VALUES (2,'group2'); -INSERT INTO groups(id,name) VALUES (3,'group3'); -INSERT INTO groups(id,name) VALUES (4,'group4'); -INSERT INTO groups(id,name) VALUES (5,'group5'); -INSERT INTO groups(id,name) VALUES (6,'group6'); - -CREATE TABLE groups_descriptions -( - group_id INTEGER NOT NULL PRIMARY KEY, - name VARCHAR(128) NOT NULL -); - -INSERT INTO groups_descriptions(group_id,name) VALUES (1,'room1'); -INSERT INTO groups_descriptions(group_id,name) VALUES (2,'room2'); -INSERT INTO groups_descriptions(group_id,name) VALUES (3,'room3'); -INSERT INTO groups_descriptions(group_id,name) VALUES (4,'room4'); - -CREATE TABLE roles -( - user_id INTEGER NOT NULL, - group_id INTEGER NOT NULL, - name VARCHAR(128) NOT NULL, - PRIMARY KEY(user_id,group_id) -); - -INSERT INTO roles(user_id,group_id,name) VALUES (1,1,'dev'); -INSERT INTO roles(user_id,group_id,name) VALUES (1,2,'user'); -INSERT INTO roles(user_id,group_id,name) VALUES (2,1,'dev'); -INSERT INTO roles(user_id,group_id,name) VALUES (2,3,'user'); - -CREATE TABLE mentorships -( - teacher_id INTEGER NOT NULL, - student_id INTEGER NOT NULL, - progress VARCHAR(128) NOT NULL, - PRIMARY KEY(teacher_id,student_id) -); - -INSERT INTO mentorships(teacher_id,student_id,progress) VALUES (1,3,'good'); -INSERT INTO mentorships(teacher_id,student_id,progress) VALUES (2,4,'average'); - -CREATE TABLE profiles -( - id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - first_name VARCHAR(128) NOT NULL, - last_name VARCHAR(128) NOT NULL, - user_id INTEGER NOT NULL, - CONSTRAINT FK_profile_user FOREIGN KEY (user_id) - REFERENCES users (id) ON DELETE CASCADE ON UPDATE RESTRICT -); - -INSERT INTO profiles (first_name, last_name, user_id) VALUES ('first 1','last 1',1); -INSERT INTO profiles (first_name, last_name, user_id) VALUES ('first 2','last 2',2); - -CREATE TABLE posts -( - id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - title VARCHAR(128) NOT NULL, - create_time TIMESTAMP NOT NULL, - author_id INTEGER NOT NULL, - content TEXT, - CONSTRAINT FK_post_author FOREIGN KEY (author_id) - REFERENCES users (id) ON DELETE CASCADE ON UPDATE RESTRICT -); - -INSERT INTO posts (title, create_time, author_id, content) VALUES ('post 1',100000,1,'content 1'); -INSERT INTO posts (title, create_time, author_id, content) VALUES ('post 2',100001,2,'content 2'); -INSERT INTO posts (title, create_time, author_id, content) VALUES ('post 3',100002,2,'content 3'); -INSERT INTO posts (title, create_time, author_id, content) VALUES ('post 4',100003,2,'content 4'); -INSERT INTO posts (title, create_time, author_id, content) VALUES ('post 5',100004,3,'content 5'); - - -CREATE TABLE posts_nofk -( - id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - title VARCHAR(128) NOT NULL, - create_time TIMESTAMP NOT NULL, - author_id INTEGER NOT NULL, - content TEXT -); - -INSERT INTO posts_nofk (title, create_time, author_id, content) VALUES ('post 1',100000,1,'content 1'); -INSERT INTO posts_nofk (title, create_time, author_id, content) VALUES ('post 2',100001,2,'content 2'); -INSERT INTO posts_nofk (title, create_time, author_id, content) VALUES ('post 3',100002,2,'content 3'); -INSERT INTO posts_nofk (title, create_time, author_id, content) VALUES ('post 4',100003,2,'content 4'); -INSERT INTO posts_nofk (title, create_time, author_id, content) VALUES ('post 5',100004,3,'content 5'); - - -CREATE TABLE comments -( - id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - content TEXT NOT NULL, - post_id INTEGER NOT NULL, - author_id INTEGER NOT NULL, - CONSTRAINT FK_post_comment FOREIGN KEY (post_id) - REFERENCES posts (id) ON DELETE CASCADE ON UPDATE RESTRICT, - CONSTRAINT FK_user_comment FOREIGN KEY (author_id) - REFERENCES users (id) ON DELETE CASCADE ON UPDATE RESTRICT -); - -INSERT INTO comments (content, post_id, author_id) VALUES ('comment 1',1, 2); -INSERT INTO comments (content, post_id, author_id) VALUES ('comment 2',1, 2); -INSERT INTO comments (content, post_id, author_id) VALUES ('comment 3',1, 2); -INSERT INTO comments (content, post_id, author_id) VALUES ('comment 4',2, 2); -INSERT INTO comments (content, post_id, author_id) VALUES ('comment 5',2, 2); -INSERT INTO comments (content, post_id, author_id) VALUES ('comment 6',3, 2); -INSERT INTO comments (content, post_id, author_id) VALUES ('comment 7',3, 2); -INSERT INTO comments (content, post_id, author_id) VALUES ('comment 8',3, 2); -INSERT INTO comments (content, post_id, author_id) VALUES ('comment 9',3, 2); -INSERT INTO comments (content, post_id, author_id) VALUES ('comment 10',5, 3); - -CREATE TABLE categories -( - id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - name VARCHAR(128) NOT NULL, - parent_id INTEGER, - CONSTRAINT FK_category_category FOREIGN KEY (parent_id) - REFERENCES categories (id) ON DELETE CASCADE ON UPDATE RESTRICT -); - -INSERT INTO categories (name, parent_id) VALUES ('cat 1',NULL); -INSERT INTO categories (name, parent_id) VALUES ('cat 2',NULL); -INSERT INTO categories (name, parent_id) VALUES ('cat 3',NULL); -INSERT INTO categories (name, parent_id) VALUES ('cat 4',1); -INSERT INTO categories (name, parent_id) VALUES ('cat 5',1); -INSERT INTO categories (name, parent_id) VALUES ('cat 6',5); -INSERT INTO categories (name, parent_id) VALUES ('cat 7',5); - -CREATE TABLE post_category -( - category_id INTEGER NOT NULL, - post_id INTEGER NOT NULL, - PRIMARY KEY (category_id, post_id), - CONSTRAINT FK_post_category_post FOREIGN KEY (post_id) - REFERENCES posts (id) ON DELETE CASCADE ON UPDATE RESTRICT, - CONSTRAINT FK_post_category_category FOREIGN KEY (category_id) - REFERENCES categories (id) ON DELETE CASCADE ON UPDATE RESTRICT -); - -INSERT INTO post_category (category_id, post_id) VALUES (1,1); -INSERT INTO post_category (category_id, post_id) VALUES (2,1); -INSERT INTO post_category (category_id, post_id) VALUES (3,1); -INSERT INTO post_category (category_id, post_id) VALUES (4,2); -INSERT INTO post_category (category_id, post_id) VALUES (1,2); -INSERT INTO post_category (category_id, post_id) VALUES (1,3); - -CREATE TABLE orders -( - key1 INTEGER NOT NULL, - key2 INTEGER NOT NULL, - name VARCHAR(128), - PRIMARY KEY (key1, key2) -); - -INSERT INTO orders (key1,key2,name) VALUES (1,2,'order 12'); -INSERT INTO orders (key1,key2,name) VALUES (1,3,'order 13'); -INSERT INTO orders (key1,key2,name) VALUES (2,1,'order 21'); -INSERT INTO orders (key1,key2,name) VALUES (2,2,'order 22'); - -CREATE TABLE items -( - id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - name VARCHAR(128), - col1 INTEGER NOT NULL, - col2 INTEGER NOT NULL, - CONSTRAINT FK_order_item FOREIGN KEY (col1,col2) - REFERENCES orders (key1,key2) ON DELETE CASCADE ON UPDATE RESTRICT -); - -INSERT INTO items (name,col1,col2) VALUES ('item 1',1,2); -INSERT INTO items (name,col1,col2) VALUES ('item 2',1,2); -INSERT INTO items (name,col1,col2) VALUES ('item 3',1,3); -INSERT INTO items (name,col1,col2) VALUES ('item 4',2,2); -INSERT INTO items (name,col1,col2) VALUES ('item 5',2,2); - -CREATE TABLE types -( - int_col INT NOT NULL, - int_col2 INTEGER DEFAULT 1, - char_col CHAR(100) NOT NULL, - char_col2 VARCHAR(100) DEFAULT 'something', - char_col3 TEXT, - float_col REAL(4,3) NOT NULL, - float_col2 DOUBLE DEFAULT 1.23, - blob_col BLOB, - numeric_col NUMERIC(5,2) DEFAULT 33.22, - time TIMESTAMP DEFAULT 123, - bool_col BOOL NOT NULL, - bool_col2 BOOLEAN DEFAULT 1, - null_col INTEGER DEFAULT NULL -); - -CREATE TABLE Content -( - id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - class VARCHAR(128), - parentID INTEGER NOT NULL, - ownerID INTEGER NOT NULL, - title VARCHAR(100), - CONSTRAINT FK_content_user FOREIGN KEY (ownerID) - REFERENCES users (id) ON DELETE CASCADE ON UPDATE RESTRICT - CONSTRAINT FK_content_parent FOREIGN KEY (parentID) - REFERENCES Content (id) ON DELETE CASCADE ON UPDATE RESTRICT -); - -INSERT INTO Content (class,parentID,ownerID,title) VALUES ('Article',-1,1,'article 1'); -INSERT INTO Content (class,parentID,ownerID,title) VALUES ('Article',-1,2,'article 2'); -INSERT INTO Content (class,parentID,ownerID,title) VALUES ('Comment',1,1,'comment 1'); -INSERT INTO Content (class,parentID,ownerID,title) VALUES ('Article',-1,2,'article 3'); -INSERT INTO Content (class,parentID,ownerID,title) VALUES ('Comment',4,2,'comment 2'); -INSERT INTO Content (class,parentID,ownerID,title) VALUES ('Comment',4,1,'comment 3'); - -CREATE TABLE Article -( - id INTEGER NOT NULL PRIMARY KEY, - authorID INTEGER NOT NULL, - body TEXT, - CONSTRAINT FK_article_content FOREIGN KEY (id) - REFERENCES Content (id) ON DELETE CASCADE ON UPDATE RESTRICT - CONSTRAINT FK_article_author FOREIGN KEY (authorID) - REFERENCES users (id) ON DELETE CASCADE ON UPDATE RESTRICT -); - -INSERT INTO Article (id,authorID,body) VALUES (1,1,'content for article 1'); -INSERT INTO Article (id,authorID,body) VALUES (2,2,'content for article 2'); -INSERT INTO Article (id,authorID,body) VALUES (4,1,'content for article 3'); - -CREATE TABLE Comment -( - id INTEGER NOT NULL PRIMARY KEY, - authorID INTEGER NOT NULL, - body TEXT, - CONSTRAINT FK_comment_content FOREIGN KEY (id) - REFERENCES Content (id) ON DELETE CASCADE ON UPDATE RESTRICT - CONSTRAINT FK_article_author FOREIGN KEY (authorID) - REFERENCES users (id) ON DELETE CASCADE ON UPDATE RESTRICT -); - -INSERT INTO Comment (id,authorID,body) VALUES (3,1,'content for comment 1'); -INSERT INTO Comment (id,authorID,body) VALUES (5,1,'content for comment 2'); -INSERT INTO Comment (id,authorID,body) VALUES (6,1,'content for comment 3'); - +/** + * This is the database schema for testing Sqlite support of Yii DAO and Active Record. + * The database setup in config.php is required to perform then relevant tests: + */ + +DROP TABLE IF EXISTS tbl_order_item; +DROP TABLE IF EXISTS tbl_item; +DROP TABLE IF EXISTS tbl_order; +DROP TABLE IF EXISTS tbl_category; +DROP TABLE IF EXISTS tbl_customer; +DROP TABLE IF EXISTS tbl_type; + +CREATE TABLE tbl_customer ( + id INTEGER NOT NULL, + email varchar(128) NOT NULL, + name varchar(128) NOT NULL, + address text, + status INTEGER DEFAULT 0, + PRIMARY KEY (id) +); + +CREATE TABLE tbl_category ( + id INTEGER NOT NULL, + name varchar(128) NOT NULL, + PRIMARY KEY (id) +); + +CREATE TABLE tbl_item ( + id INTEGER NOT NULL, + name varchar(128) NOT NULL, + category_id INTEGER NOT NULL, + PRIMARY KEY (id) +); + +CREATE TABLE tbl_order ( + id INTEGER NOT NULL, + customer_id INTEGER NOT NULL, + create_time INTEGER NOT NULL, + total decimal(10,0) NOT NULL, + PRIMARY KEY (id) +); + +CREATE TABLE tbl_order_item ( + order_id INTEGER NOT NULL, + item_id INTEGER NOT NULL, + quantity INTEGER NOT NULL, + subtotal decimal(10,0) NOT NULL, + PRIMARY KEY (order_id, item_id) +); + +CREATE TABLE tbl_type ( + int_col INTEGER NOT NULL, + int_col2 INTEGER DEFAULT '1', + char_col char(100) NOT NULL, + char_col2 varchar(100) DEFAULT 'something', + char_col3 text, + float_col double(4,3) NOT NULL, + float_col2 double DEFAULT '1.23', + blob_col blob, + numeric_col decimal(5,2) DEFAULT '33.22', + time timestamp NOT NULL DEFAULT '2002-01-01 00:00:00', + bool_col tinyint(1) NOT NULL, + bool_col2 tinyint(1) DEFAULT '1' +); + +INSERT INTO tbl_customer (email, name, address, status) VALUES ('user1@example.com', 'user1', 'address1', 1); +INSERT INTO tbl_customer (email, name, address, status) VALUES ('user2@example.com', 'user2', 'address2', 1); +INSERT INTO tbl_customer (email, name, address, status) VALUES ('user3@example.com', 'user3', 'address3', 2); + +INSERT INTO tbl_category (name) VALUES ('Books'); +INSERT INTO tbl_category (name) VALUES ('Movies'); + +INSERT INTO tbl_item (name, category_id) VALUES ('Agile Web Application Development with Yii1.1 and PHP5', 1); +INSERT INTO tbl_item (name, category_id) VALUES ('Yii 1.1 Application Development Cookbook', 1); +INSERT INTO tbl_item (name, category_id) VALUES ('Ice Age', 2); +INSERT INTO tbl_item (name, category_id) VALUES ('Toy Story', 2); +INSERT INTO tbl_item (name, category_id) VALUES ('Cars', 2); + +INSERT INTO tbl_order (customer_id, create_time, total) VALUES (1, 1325282384, 110.0); +INSERT INTO tbl_order (customer_id, create_time, total) VALUES (2, 1325334482, 33.0); +INSERT INTO tbl_order (customer_id, create_time, total) VALUES (2, 1325502201, 40.0); + +INSERT INTO tbl_order_item (order_id, item_id, quantity, subtotal) VALUES (1, 1, 1, 30.0); +INSERT INTO tbl_order_item (order_id, item_id, quantity, subtotal) VALUES (1, 2, 2, 40.0); +INSERT INTO tbl_order_item (order_id, item_id, quantity, subtotal) VALUES (2, 4, 1, 10.0); +INSERT INTO tbl_order_item (order_id, item_id, quantity, subtotal) VALUES (2, 5, 1, 15.0); +INSERT INTO tbl_order_item (order_id, item_id, quantity, subtotal) VALUES (2, 3, 1, 8.0); +INSERT INTO tbl_order_item (order_id, item_id, quantity, subtotal) VALUES (3, 2, 1, 40.0); \ No newline at end of file diff --git a/tests/unit/framework/caching/DbCacheTest.php b/tests/unit/framework/caching/DbCacheTest.php index a41667c..253240d 100644 --- a/tests/unit/framework/caching/DbCacheTest.php +++ b/tests/unit/framework/caching/DbCacheTest.php @@ -35,7 +35,8 @@ class DbCacheTest extends CacheTest function getConnection($reset = true) { if($this->_connection === null) { - $params = $this->getParam('mysql'); + $databases = $this->getParam('databases'); + $params = $databases['mysql']; $db = new \yii\db\Connection; $db->dsn = $params['dsn']; $db->username = $params['username']; diff --git a/tests/unit/framework/db/ActiveRecordTest.php b/tests/unit/framework/db/ActiveRecordTest.php index f0ea968..e337a5d 100644 --- a/tests/unit/framework/db/ActiveRecordTest.php +++ b/tests/unit/framework/db/ActiveRecordTest.php @@ -10,10 +10,11 @@ use yiiunit\data\ar\OrderItem; use yiiunit\data\ar\Order; use yiiunit\data\ar\Item; -class ActiveRecordTest extends \yiiunit\MysqlTestCase +class ActiveRecordTest extends \yiiunit\DatabaseTestCase { public function setUp() { + parent::setUp(); ActiveRecord::$db = $this->getConnection(); } diff --git a/tests/unit/framework/db/CommandTest.php b/tests/unit/framework/db/CommandTest.php index 2576e78..0d9652b 100644 --- a/tests/unit/framework/db/CommandTest.php +++ b/tests/unit/framework/db/CommandTest.php @@ -7,7 +7,7 @@ use yii\db\Command; use yii\db\Query; use yii\db\DataReader; -class CommandTest extends \yiiunit\MysqlTestCase +class CommandTest extends \yiiunit\DatabaseTestCase { function testConstruct() { diff --git a/tests/unit/framework/db/ConnectionTest.php b/tests/unit/framework/db/ConnectionTest.php index 256c5a9..c837b95 100644 --- a/tests/unit/framework/db/ConnectionTest.php +++ b/tests/unit/framework/db/ConnectionTest.php @@ -4,12 +4,12 @@ namespace yiiunit\framework\db; use yii\db\Connection; -class ConnectionTest extends \yiiunit\MysqlTestCase +class ConnectionTest extends \yiiunit\DatabaseTestCase { function testConstruct() { $connection = $this->getConnection(false); - $params = $this->getParam('mysql'); + $params = $this->database; $this->assertEquals($params['dsn'], $connection->dsn); $this->assertEquals($params['username'], $connection->username); @@ -18,7 +18,7 @@ class ConnectionTest extends \yiiunit\MysqlTestCase function testOpenClose() { - $connection = $this->getConnection(false); + $connection = $this->getConnection(false, false); $this->assertFalse($connection->isActive); $this->assertEquals(null, $connection->pdo); @@ -39,9 +39,8 @@ class ConnectionTest extends \yiiunit\MysqlTestCase function testGetDriverName() { - $connection = $this->getConnection(false); - $this->assertEquals('mysql', $connection->driverName); - $this->assertFalse($connection->isActive); + $connection = $this->getConnection(false, false); + $this->assertEquals($this->driverName, $connection->driverName); } function testQuoteValue() diff --git a/tests/unit/framework/db/QueryTest.php b/tests/unit/framework/db/QueryTest.php index 1c730cd..398d0d9 100644 --- a/tests/unit/framework/db/QueryTest.php +++ b/tests/unit/framework/db/QueryTest.php @@ -7,7 +7,7 @@ use yii\db\Command; use yii\db\Query; use yii\db\DataReader; -class QueryTest extends \yiiunit\MysqlTestCase +class QueryTest extends \yiiunit\DatabaseTestCase { function testSelect() { diff --git a/tests/unit/framework/db/sqlite/SqliteActiveRecordTest.php b/tests/unit/framework/db/sqlite/SqliteActiveRecordTest.php new file mode 100644 index 0000000..bc6387a --- /dev/null +++ b/tests/unit/framework/db/sqlite/SqliteActiveRecordTest.php @@ -0,0 +1,12 @@ +driverName = 'sqlite'; + parent::setUp(); + } +} \ No newline at end of file diff --git a/tests/unit/framework/db/sqlite/SqliteCommandTest.php b/tests/unit/framework/db/sqlite/SqliteCommandTest.php new file mode 100644 index 0000000..21e9dd9 --- /dev/null +++ b/tests/unit/framework/db/sqlite/SqliteCommandTest.php @@ -0,0 +1,21 @@ +driverName = 'sqlite'; + parent::setUp(); + } + + function testAutoQuoting() + { + $db = $this->getConnection(false); + + $sql = 'SELECT [[id]], [[t.name]] FROM {{tbl_customer}} t'; + $command = $db->createCommand($sql); + $this->assertEquals("SELECT \"id\", 't'.\"name\" FROM 'tbl_customer' t", $command->sql); + } +} \ No newline at end of file diff --git a/tests/unit/framework/db/sqlite/SqliteConnectionTest.php b/tests/unit/framework/db/sqlite/SqliteConnectionTest.php new file mode 100644 index 0000000..eeb5aae --- /dev/null +++ b/tests/unit/framework/db/sqlite/SqliteConnectionTest.php @@ -0,0 +1,47 @@ +driverName = 'sqlite'; + parent::setUp(); + } + + function testConstruct() + { + $connection = $this->getConnection(false); + $params = $this->database; + + $this->assertEquals($params['dsn'], $connection->dsn); + } + + function testQuoteValue() + { + $connection = $this->getConnection(false); + $this->assertEquals(123, $connection->quoteValue(123)); + $this->assertEquals("'string'", $connection->quoteValue('string')); + $this->assertEquals("'It''s interesting'", $connection->quoteValue("It's interesting")); + } + + function testQuoteTableName() + { + $connection = $this->getConnection(false); + $this->assertEquals("'table'", $connection->quoteTableName('table')); + $this->assertEquals("'schema'.'table'", $connection->quoteTableName('schema.table')); + $this->assertEquals('{{table}}', $connection->quoteTableName('{{table}}')); + $this->assertEquals('(table)', $connection->quoteTableName('(table)')); + } + + function testQuoteColumnName() + { + $connection = $this->getConnection(false); + $this->assertEquals('"column"', $connection->quoteColumnName('column')); + $this->assertEquals("'table'.\"column\"", $connection->quoteColumnName('table.column')); + $this->assertEquals('[[column]]', $connection->quoteColumnName('[[column]]')); + $this->assertEquals('{{column}}', $connection->quoteColumnName('{{column}}')); + $this->assertEquals('(column)', $connection->quoteColumnName('(column)')); + } +} diff --git a/tests/unit/framework/db/sqlite/SqliteQueryTest.php b/tests/unit/framework/db/sqlite/SqliteQueryTest.php new file mode 100644 index 0000000..0b5e8f7 --- /dev/null +++ b/tests/unit/framework/db/sqlite/SqliteQueryTest.php @@ -0,0 +1,20 @@ +driverName = 'sqlite'; + parent::setUp(); + } +} \ No newline at end of file