Browse Source

Fixes #1115: fixed the issue with PDO boolean value binding with pgsql

tags/2.0.0-beta
Qiang Xue 11 years ago
parent
commit
9862ee35b2
  1. 22
      framework/yii/db/pgsql/Schema.php
  2. 10
      tests/unit/framework/db/pgsql/PostgreSQLActiveRecordTest.php

22
framework/yii/db/pgsql/Schema.php

@ -131,6 +131,28 @@ class Schema extends \yii\db\Schema
} }
/** /**
* Determines the PDO type for the given PHP data value.
* @param mixed $data the data whose PDO type is to be determined
* @return integer the PDO type
* @see http://www.php.net/manual/en/pdo.constants.php
*/
public function getPdoType($data)
{
// php type => PDO type
static $typeMap = [
// https://github.com/yiisoft/yii2/issues/1115
// Cast boolean to integer values to work around problems with PDO casting false to string '' https://bugs.php.net/bug.php?id=33876
'boolean' => \PDO::PARAM_INT,
'integer' => \PDO::PARAM_INT,
'string' => \PDO::PARAM_STR,
'resource' => \PDO::PARAM_LOB,
'NULL' => \PDO::PARAM_NULL,
];
$type = gettype($data);
return isset($typeMap[$type]) ? $typeMap[$type] : \PDO::PARAM_STR;
}
/**
* Returns all table names in the database. * Returns all table names in the database.
* @param string $schema the schema of the tables. Defaults to empty string, meaning the current or default schema. * @param string $schema the schema of the tables. Defaults to empty string, meaning the current or default schema.
* If not empty, the returned table names will be prefixed with the schema name. * If not empty, the returned table names will be prefixed with the schema name.

10
tests/unit/framework/db/pgsql/PostgreSQLActiveRecordTest.php

@ -11,14 +11,4 @@ use yiiunit\framework\db\ActiveRecordTest;
class PostgreSQLActiveRecordTest extends ActiveRecordTest class PostgreSQLActiveRecordTest extends ActiveRecordTest
{ {
protected $driverName = 'pgsql'; protected $driverName = 'pgsql';
public function testBooleanAttribute()
{
$this->markTestSkipped('Storing boolean values does not work in PostgreSQL right now. See https://github.com/yiisoft/yii2/issues/1115 for details.');
}
public function testStoreEmpty()
{
// as this test attempts to store data with invalid type it is okay for postgres to fail, skipping silently.
}
} }

Loading…
Cancel
Save