Commit c6ef7ec9 by Carsten Brandt

moved Command::getPdoType() to Schema

this allows different implementation in different DBMS CUBRID does not supprt PDO::TYPE_BOOL, so we use STRING here which will be casted by the DBMS
parent e446a118
...@@ -181,7 +181,7 @@ class Command extends \yii\base\Component ...@@ -181,7 +181,7 @@ class Command extends \yii\base\Component
{ {
$this->prepare(); $this->prepare();
if ($dataType === null) { if ($dataType === null) {
$this->pdoStatement->bindParam($name, $value, $this->getPdoType($value)); $this->pdoStatement->bindParam($name, $value, $this->db->schema->getPdoType($value));
} elseif ($length === null) { } elseif ($length === null) {
$this->pdoStatement->bindParam($name, $value, $dataType); $this->pdoStatement->bindParam($name, $value, $dataType);
} elseif ($driverOptions === null) { } elseif ($driverOptions === null) {
...@@ -208,7 +208,7 @@ class Command extends \yii\base\Component ...@@ -208,7 +208,7 @@ class Command extends \yii\base\Component
{ {
$this->prepare(); $this->prepare();
if ($dataType === null) { if ($dataType === null) {
$this->pdoStatement->bindValue($name, $value, $this->getPdoType($value)); $this->pdoStatement->bindValue($name, $value, $this->db->schema->getPdoType($value));
} else { } else {
$this->pdoStatement->bindValue($name, $value, $dataType); $this->pdoStatement->bindValue($name, $value, $dataType);
} }
...@@ -236,7 +236,7 @@ class Command extends \yii\base\Component ...@@ -236,7 +236,7 @@ class Command extends \yii\base\Component
$type = $value[1]; $type = $value[1];
$value = $value[0]; $value = $value[0];
} else { } else {
$type = $this->getPdoType($value); $type = $this->db->schema->getPdoType($value);
} }
$this->pdoStatement->bindValue($name, $value, $type); $this->pdoStatement->bindValue($name, $value, $type);
$this->_params[$name] = $value; $this->_params[$name] = $value;
...@@ -246,25 +246,6 @@ class Command extends \yii\base\Component ...@@ -246,25 +246,6 @@ class Command extends \yii\base\Component
} }
/** /**
* Determines the PDO type for the give 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
*/
private function getPdoType($data)
{
static $typeMap = array(
'boolean' => \PDO::PARAM_BOOL,
'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;
}
/**
* Executes the SQL statement. * Executes the SQL statement.
* This method should only be used for executing non-query SQL statement, such as `INSERT`, `DELETE`, `UPDATE` SQLs. * This method should only be used for executing non-query SQL statement, such as `INSERT`, `DELETE`, `UPDATE` SQLs.
* No result set will be returned. * No result set will be returned.
......
...@@ -376,4 +376,23 @@ abstract class Schema extends Object ...@@ -376,4 +376,23 @@ abstract class Schema extends Object
return 'string'; return 'string';
} }
} }
/**
* Determines the PDO type for the give 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)
{
static $typeMap = array( // php type => PDO type
'boolean' => \PDO::PARAM_BOOL,
'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;
}
} }
...@@ -10,7 +10,7 @@ namespace yii\db\cubrid; ...@@ -10,7 +10,7 @@ namespace yii\db\cubrid;
use yii\base\InvalidParamException; use yii\base\InvalidParamException;
/** /**
* QueryBuilder is the query builder for CUBRID databases. * QueryBuilder is the query builder for CUBRID databases (version 9.1.x and higher).
* *
* @author Carsten Brandt <mail@cebe.cc> * @author Carsten Brandt <mail@cebe.cc>
* @since 2.0 * @since 2.0
......
...@@ -243,4 +243,23 @@ class Schema extends \yii\db\Schema ...@@ -243,4 +243,23 @@ class Schema extends \yii\db\Schema
} }
return $tableNames; return $tableNames;
} }
/**
* Determines the PDO type for the give 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)
{
static $typeMap = array(
'boolean' => \PDO::PARAM_STR, // CUBRID PDO does not support PARAM_BOOL
'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;
}
} }
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