summaryrefslogtreecommitdiff
path: root/framework/Data/Common/Mysql
diff options
context:
space:
mode:
Diffstat (limited to 'framework/Data/Common/Mysql')
-rw-r--r--framework/Data/Common/Mysql/TMysqlMetaData.php17
-rw-r--r--framework/Data/Common/Mysql/TMysqlTableColumn.php42
2 files changed, 29 insertions, 30 deletions
diff --git a/framework/Data/Common/Mysql/TMysqlMetaData.php b/framework/Data/Common/Mysql/TMysqlMetaData.php
index ee3bd2e0..2a6d80bd 100644
--- a/framework/Data/Common/Mysql/TMysqlMetaData.php
+++ b/framework/Data/Common/Mysql/TMysqlMetaData.php
@@ -49,8 +49,6 @@ class TMysqlMetaData extends TDbMetaData
$info['IsPrimaryKey'] = true;
if($this->isForeignKeyColumn($columnId, $tableInfo))
$info['IsForeignKey'] = true;
- if(in_array($columnId, $tableInfo->getUniqueKeys()))
- $info['IsUnique'] = true;
$info['DbType'] = $col['Type'];
$match=array();
@@ -142,8 +140,8 @@ class TMysqlMetaData extends TDbMetaData
$info['SchemaName'] = $schemaName;
$info['TableName'] = $tableName;
$info['IsView'] = $this->getIsView($schemaName,$tableName);
- list($primary, $foreign, $unique) = $this->getConstraintKeys($schemaName, $tableName);
- return new TMysqlTableInfo($info,$primary,$foreign, $unique);
+ list($primary, $foreign) = $this->getConstraintKeys($schemaName, $tableName);
+ return new TMysqlTableInfo($info,$primary,$foreign);
}
/**
@@ -173,10 +171,10 @@ class TMysqlMetaData extends TDbMetaData
}
/**
- * Gets the primary, foreign key, and unique column details for the given table.
+ * Gets the primary and foreign key column details for the given table.
* @param string schema name
* @param string table name.
- * @return array tuple ($primary, $foreign, $unique)
+ * @return array tuple ($primary, $foreign)
*/
protected function getConstraintKeys($schemaName, $tableName)
{
@@ -185,15 +183,12 @@ class TMysqlMetaData extends TDbMetaData
$command = $this->getDbConnection()->createCommand($sql);
$primary = array();
$foreign = $this->getForeignConstraints($schemaName,$tableName);
- $unique = array();
foreach($command->query() as $row)
{
if($row['Key_name']==='PRIMARY')
$primary[] = $row['Column_name'];
- else if(intval($row['Non_unique'])===0)
- $unique[] = $row['Column_name'];
}
- return array($primary,$foreign,$unique);
+ return array($primary,$foreign);
}
/**
@@ -229,7 +224,7 @@ EOD;
$fkeys[$col['con']]['keys'][$col['col']] = $col['fkcol'];
$fkeys[$col['con']]['table'] = "`{$col['fkschema']}`.`{$col['fktable']}`";
}
- return array_values($fkeys);
+ return count($fkeys) > 0 ? array_values($fkeys) : $fkeys;
}
/**
diff --git a/framework/Data/Common/Mysql/TMysqlTableColumn.php b/framework/Data/Common/Mysql/TMysqlTableColumn.php
index 0f013acd..4f0f7da2 100644
--- a/framework/Data/Common/Mysql/TMysqlTableColumn.php
+++ b/framework/Data/Common/Mysql/TMysqlTableColumn.php
@@ -25,6 +25,29 @@ Prado::using('System.Data.Common.TDbTableColumn');
*/
class TMysqlTableColumn extends TDbTableColumn
{
+ private static $types = array(
+ 'integer' => array('bit', 'tinyint', 'smallint', 'mediumint', 'int', 'integer', 'bigint'),
+ 'boolean' => array('boolean', 'bool'),
+ 'float' => array('float', 'double', 'double precision', 'decimal', 'dec', 'numeric', 'fixed')
+ );
+
+ /**
+ * Overrides parent implementation, returns PHP type from the db type.
+ * @return boolean derived PHP primitive type from the column db type.
+ */
+ public function getPHPType()
+ {
+ $dbtype = trim(str_replace(array('unsigned', 'zerofill'),array('','',),strtolower($this->getDbType())));
+ if($dbtype==='tinyint' && $this->getColumnSize()===1)
+ return 'boolean';
+ foreach(self::$types as $type => $dbtypes)
+ {
+ if(in_array($dbtype, $dbtypes))
+ return $type;
+ }
+ return 'string';
+ }
+
/**
* @return boolean true if column will auto-increment when the column value is inserted as null.
*/
@@ -45,25 +68,6 @@ class TMysqlTableColumn extends TDbTableColumn
{
return $this->getInfo('DbTypeValues');
}
-
- /**
- * Overrides parent implementation, returns PHP type from the db type.
- * @return boolean derived PHP primitive type from the column db type.
- */
- public function getPHPType()
- {
- switch(strtolower($this->getDbType()))
- {
- case 'bit': case 'bit varying': case 'real': case 'serial': case 'int': case 'integer':
- return 'integer';
- case 'boolean':
- return 'boolean';
- case 'bigint': case 'bigserial': case 'double precision': case 'money': case 'numeric':
- return 'float';
- default:
- return 'string';
- }
- }
}
?> \ No newline at end of file