Commit cd5bdd90 by Carsten Brandt

fixed postgres tests

parent c6f711cc
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
* and create an account 'postgres/postgres' which owns this test database. * and create an account 'postgres/postgres' which owns this test database.
*/ */
DROP TABLE IF EXISTS "composite_fk" CASCADE;
DROP TABLE IF EXISTS "order_item" CASCADE; DROP TABLE IF EXISTS "order_item" CASCADE;
DROP TABLE IF EXISTS "item" CASCADE; DROP TABLE IF EXISTS "item" CASCADE;
DROP TABLE IF EXISTS "order_item_with_null_fk" CASCADE; DROP TABLE IF EXISTS "order_item_with_null_fk" CASCADE;
...@@ -78,6 +79,14 @@ CREATE TABLE "order_item_with_null_fk" ( ...@@ -78,6 +79,14 @@ CREATE TABLE "order_item_with_null_fk" (
subtotal decimal(10,0) NOT NULL subtotal decimal(10,0) NOT NULL
); );
CREATE TABLE "composite_fk" (
id integer NOT NULL,
order_id integer NOT NULL,
item_id integer NOT NULL,
PRIMARY KEY (id),
CONSTRAINT FK_composite_fk_order_item FOREIGN KEY (order_id, item_id) REFERENCES "order_item" (order_id, item_id) ON DELETE CASCADE
);
CREATE TABLE "null_values" ( CREATE TABLE "null_values" (
id INT NOT NULL, id INT NOT NULL,
var1 INT NULL, var1 INT NULL,
...@@ -101,7 +110,7 @@ CREATE TABLE "type" ( ...@@ -101,7 +110,7 @@ CREATE TABLE "type" (
bool_col smallint NOT NULL, bool_col smallint NOT NULL,
bool_col2 smallint DEFAULT '1', bool_col2 smallint DEFAULT '1',
ts_default TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, ts_default TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
bit_col BIT NOT NULL DEFAULT B'10000010' bit_col BIT(8) NOT NULL DEFAULT B'10000010'
); );
INSERT INTO "profile" (description) VALUES ('profile customer 1'); INSERT INTO "profile" (description) VALUES ('profile customer 1');
......
...@@ -14,8 +14,8 @@ use yii\db\BatchQueryResult; ...@@ -14,8 +14,8 @@ use yii\db\BatchQueryResult;
use yiiunit\data\ar\Customer; use yiiunit\data\ar\Customer;
/** /**
* @author Qiang Xue <qiang.xue@gmail.com> * @group db
* @since 2.0 * @group mysql
*/ */
class BatchQueryResultTest extends DatabaseTestCase class BatchQueryResultTest extends DatabaseTestCase
{ {
......
...@@ -159,7 +159,7 @@ class CommandTest extends DatabaseTestCase ...@@ -159,7 +159,7 @@ class CommandTest extends DatabaseTestCase
$sql = 'INSERT INTO type (int_col, char_col, float_col, blob_col, numeric_col, bool_col) VALUES (:int_col, :char_col, :float_col, :blob_col, :numeric_col, :bool_col)'; $sql = 'INSERT INTO type (int_col, char_col, float_col, blob_col, numeric_col, bool_col) VALUES (:int_col, :char_col, :float_col, :blob_col, :numeric_col, :bool_col)';
$command = $db->createCommand($sql); $command = $db->createCommand($sql);
$intCol = 123; $intCol = 123;
$charCol = 'abc'; $charCol = str_repeat('abc', 33) . 'x'; // a 100 char string
$floatCol = 1.23; $floatCol = 1.23;
$blobCol = "\x10\x11\x12"; $blobCol = "\x10\x11\x12";
$numericCol = '1.23'; $numericCol = '1.23';
...@@ -172,13 +172,21 @@ class CommandTest extends DatabaseTestCase ...@@ -172,13 +172,21 @@ class CommandTest extends DatabaseTestCase
$command->bindParam(':bool_col', $boolCol); $command->bindParam(':bool_col', $boolCol);
$this->assertEquals(1, $command->execute()); $this->assertEquals(1, $command->execute());
$sql = 'SELECT * FROM type'; $command = $db->createCommand('SELECT int_col, char_col, float_col, blob_col, numeric_col, bool_col FROM type');
$row = $db->createCommand($sql)->queryOne(); // $command->prepare();
// $command->pdoStatement->bindColumn('blob_col', $bc, \PDO::PARAM_LOB);
$row = $command->queryOne();
$this->assertEquals($intCol, $row['int_col']); $this->assertEquals($intCol, $row['int_col']);
$this->assertEquals($charCol, $row['char_col']); $this->assertEquals($charCol, $row['char_col']);
$this->assertEquals($floatCol, $row['float_col']); $this->assertEquals($floatCol, $row['float_col']);
$this->assertEquals($blobCol, $row['blob_col']); if ($this->driverName === 'mysql' || $this->driverName === 'sqlite') {
$this->assertEquals($blobCol, $row['blob_col']);
} else {
$this->assertTrue(is_resource($row['blob_col']));
$this->assertEquals($blobCol, stream_get_contents($row['blob_col']));
}
$this->assertEquals($numericCol, $row['numeric_col']); $this->assertEquals($numericCol, $row['numeric_col']);
$this->assertEquals($boolCol, $row['bool_col']);
// bindValue // bindValue
$sql = 'INSERT INTO customer(email, name, address) VALUES (:email, \'user5\', \'address5\')'; $sql = 'INSERT INTO customer(email, name, address) VALUES (:email, \'user5\', \'address5\')';
......
...@@ -87,7 +87,7 @@ class SchemaTest extends DatabaseTestCase ...@@ -87,7 +87,7 @@ class SchemaTest extends DatabaseTestCase
$schema = $this->getConnection()->schema; $schema = $this->getConnection()->schema;
foreach ($values as $value) { foreach ($values as $value) {
$this->assertEquals($value[1], $schema->getPdoType($value[0])); $this->assertEquals($value[1], $schema->getPdoType($value[0]), 'type for value ' . print_r($value[0], true) . ' does not match.');
} }
fclose($fp); fclose($fp);
} }
......
...@@ -3,6 +3,10 @@ namespace yii\tests\unit\framework\db\pgsql; ...@@ -3,6 +3,10 @@ namespace yii\tests\unit\framework\db\pgsql;
use yiiunit\framework\db\CommandTest; use yiiunit\framework\db\CommandTest;
/**
* @group db
* @group pgsql
*/
class PostgreSQLCommandTest extends CommandTest class PostgreSQLCommandTest extends CommandTest
{ {
public $driverName = 'pgsql'; public $driverName = 'pgsql';
...@@ -15,9 +19,4 @@ class PostgreSQLCommandTest extends CommandTest ...@@ -15,9 +19,4 @@ class PostgreSQLCommandTest extends CommandTest
$command = $db->createCommand($sql); $command = $db->createCommand($sql);
$this->assertEquals('SELECT "id", "t"."name" FROM "customer" t', $command->sql); $this->assertEquals('SELECT "id", "t"."name" FROM "customer" t', $command->sql);
} }
}
public function testBindParamValue() \ No newline at end of file
{
$this->markTestIncomplete('TODO: impement it');
}
}
\ No newline at end of file
...@@ -53,8 +53,31 @@ class PostgreSQLSchemaTest extends SchemaTest ...@@ -53,8 +53,31 @@ class PostgreSQLSchemaTest extends SchemaTest
$columns['bool_col2']['scale'] = 0; $columns['bool_col2']['scale'] = 0;
$columns['ts_default']['defaultValue'] = new Expression('now()'); $columns['ts_default']['defaultValue'] = new Expression('now()');
$columns['bit_col']['dbType'] = 'bit'; $columns['bit_col']['dbType'] = 'bit';
$columns['bit_col']['size'] = 1; // TODO should be 8??? $columns['bit_col']['size'] = 8;
$columns['bit_col']['precision'] = null; $columns['bit_col']['precision'] = null;
return $columns; return $columns;
} }
public function testGetPDOType()
{
$values = [
[null, \PDO::PARAM_NULL],
['', \PDO::PARAM_STR],
['hello', \PDO::PARAM_STR],
[0, \PDO::PARAM_INT],
[1, \PDO::PARAM_INT],
[1337, \PDO::PARAM_INT],
[true, \PDO::PARAM_INT],
[false, \PDO::PARAM_INT],
[$fp = fopen(__FILE__, 'rb'), \PDO::PARAM_LOB],
];
/* @var $schema Schema */
$schema = $this->getConnection()->schema;
foreach ($values as $value) {
$this->assertEquals($value[1], $schema->getPdoType($value[0]));
}
fclose($fp);
}
} }
...@@ -84,6 +84,9 @@ class SqliteQueryBuilderTest extends QueryBuilderTest ...@@ -84,6 +84,9 @@ class SqliteQueryBuilderTest extends QueryBuilderTest
public function testBatchInsert() public function testBatchInsert()
{ {
if (version_compare(\SQLite3::version()['versionString'], '3.7.11', '>=')) {
$this->markTestSkipped('This test is only relevant for SQLite < 3.7.11');
}
$sql = $this->getQueryBuilder()->batchInsert('{{customer}} t', ['t.id', 't.name'], [[1, 'a'], [2, 'b']]); $sql = $this->getQueryBuilder()->batchInsert('{{customer}} t', ['t.id', 't.name'], [[1, 'a'], [2, 'b']]);
$this->assertEquals("INSERT INTO {{customer}} t (`t`.`id`, `t`.`name`) SELECT 1, 'a' UNION SELECT 2, 'b'", $sql); $this->assertEquals("INSERT INTO {{customer}} t (`t`.`id`, `t`.`name`) SELECT 1, 'a' UNION SELECT 2, 'b'", $sql);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment