<?php Prado::using('System.Data.*'); Prado::using('System.Data.Common.Mysql.TMysqlMetaData'); class Mysql4ColumnTest extends UnitTestCase { function create_meta_data() { $conn = new TDbConnection('mysql:host=localhost;dbname=tests;port=3306', 'test4','test4'); return new TMysqlMetaData($conn); } function test_columns() { $table = $this->create_meta_data()->getTableInfo('table1'); $this->assertEqual(count($table->getColumns()), 18); $columns['id'] = array( 'ColumnName' => '`id`', 'ColumnSize' => 10, 'ColumnIndex' => 0, 'DbType' => 'int unsigned', 'AllowNull' => false, 'DefaultValue' => TDbTableColumn::UNDEFINED_VALUE, 'NumericPrecision' => null, 'NumericScale' => null, 'IsPrimaryKey' => true, 'IsForeignKey' => false, 'SequenceName' => null, 'AutoIncrement' => true, ); $columns['name'] = array( 'ColumnName' => '`name`', 'ColumnSize' => 45, 'ColumnIndex' => 1, 'DbType' => 'varchar', 'AllowNull' => false, 'DefaultValue' => TDbTableColumn::UNDEFINED_VALUE, 'NumericPrecision' => null, 'NumericScale' => null, 'IsPrimaryKey' => true, 'IsForeignKey' => false, 'SequenceName' => null, 'AutoIncrement' => false, ); $columns['field1'] = array( 'ColumnName' => '`field1`', 'ColumnSize' => 4, 'ColumnIndex' => 2, 'DbType' => 'tinyint', 'AllowNull' => false, 'DefaultValue' => '0', 'NumericPrecision' => null, 'NumericScale' => null, 'IsPrimaryKey' => false, 'IsForeignKey' => false, 'SequenceName' => null, 'AutoIncrement' => false, ); $columns['field2_text'] = array( 'ColumnName' => '`field2_text`', 'ColumnSize' => null, 'ColumnIndex' => 3, 'DbType' => 'text', 'AllowNull' => true, 'DefaultValue' => TDbTableColumn::UNDEFINED_VALUE, 'NumericPrecision' => null, 'NumericScale' => null, 'IsPrimaryKey' => false, 'IsForeignKey' => false, 'SequenceName' => null, 'AutoIncrement' => false, ); $columns['field3_date'] = array( 'ColumnName' => '`field3_date`', 'ColumnSize' => null, 'ColumnIndex' => 4, 'DbType' => 'date', 'AllowNull' => true, 'DefaultValue' => '2007-02-25', 'NumericPrecision' => null, 'NumericScale' => null, 'IsPrimaryKey' => false, 'IsForeignKey' => false, 'SequenceName' => null, 'AutoIncrement' => false, ); $columns['field4_float'] = array( 'ColumnName' => '`field4_float`', 'ColumnSize' => null, 'ColumnIndex' => 5, 'DbType' => 'float', 'AllowNull' => false, 'DefaultValue' => 10, 'NumericPrecision' => null, 'NumericScale' => null, 'IsPrimaryKey' => false, 'IsForeignKey' => false, 'SequenceName' => null, 'AutoIncrement' => false, ); $columns['field5_float'] = array( 'ColumnName' => '`field5_float`', 'ColumnSize' => null, 'ColumnIndex' => 6, 'DbType' => 'float', 'AllowNull' => false, 'DefaultValue' => '0.0000', 'NumericPrecision' => 5, 'NumericScale' => 4, 'IsPrimaryKey' => false, 'IsForeignKey' => false, 'SequenceName' => null, 'AutoIncrement' => false, ); $columns['field6_double'] = array( 'ColumnName' => '`field6_double`', 'ColumnSize' => null, 'ColumnIndex' => 7, 'DbType' => 'double', 'AllowNull' => false, 'DefaultValue' => '0', 'NumericPrecision' => null, 'NumericScale' => null, 'IsPrimaryKey' => false, 'IsForeignKey' => false, 'SequenceName' => null, 'AutoIncrement' => false, ); $columns['field7_datetime'] = array( 'ColumnName' => '`field7_datetime`', 'ColumnSize' => null, 'ColumnIndex' => 8, 'DbType' => 'datetime', 'AllowNull' => false, 'DefaultValue' => '0000-00-00 00:00:00', 'NumericPrecision' => null, 'NumericScale' => null, 'IsPrimaryKey' => false, 'IsForeignKey' => false, 'SequenceName' => null, 'AutoIncrement' => false, ); $columns['field8_timestamp'] = array( 'ColumnName' => '`field8_timestamp`', 'ColumnSize' => null, 'ColumnIndex' => 9, 'DbType' => 'timestamp', 'AllowNull' => true, 'DefaultValue' => 'CURRENT_TIMESTAMP', 'NumericPrecision' => null, 'NumericScale' => null, 'IsPrimaryKey' => false, 'IsForeignKey' => false, 'SequenceName' => null, 'AutoIncrement' => false, ); $columns['field9_time'] = array( 'ColumnName' => '`field9_time`', 'ColumnSize' => null, 'ColumnIndex' => 10, 'DbType' => 'time', 'AllowNull' => false, 'DefaultValue' => '00:00:00', 'NumericPrecision' => null, 'NumericScale' => null, 'IsPrimaryKey' => false, 'IsForeignKey' => false, 'SequenceName' => null, 'AutoIncrement' => false, ); $columns['field10_year'] = array( 'ColumnName' => '`field10_year`', 'ColumnSize' => 4, 'ColumnIndex' => 11, 'DbType' => 'year', 'AllowNull' => false, 'DefaultValue' => '0000', 'NumericPrecision' => null, 'NumericScale' => null, 'IsPrimaryKey' => false, 'IsForeignKey' => false, 'SequenceName' => null, 'AutoIncrement' => false, ); $columns['field11_enum'] = array( 'ColumnName' => '`field11_enum`', 'ColumnSize' => null, 'ColumnIndex' => 12, 'DbType' => 'enum', 'AllowNull' => false, 'DefaultValue' => 'one', 'NumericPrecision' => null, 'NumericScale' => null, 'IsPrimaryKey' => false, 'IsForeignKey' => false, 'SequenceName' => null, 'AutoIncrement' => false, 'DbTypeValues' => array('one', 'two', 'three'), ); $columns['field12_SET'] = array( 'ColumnName' => '`field12_SET`', 'ColumnSize' => null, 'ColumnIndex' => 13, 'DbType' => 'set', 'AllowNull' => false, 'DefaultValue' => TDbTableColumn::UNDEFINED_VALUE, 'NumericPrecision' => null, 'NumericScale' => null, 'IsPrimaryKey' => false, 'IsForeignKey' => false, 'SequenceName' => null, 'AutoIncrement' => false, 'DbTypeValues' => array('blue', 'red', 'green'), ); $this->assertColumn($columns, $table); $this->assertNull($table->getSchemaName()); $this->assertEqual('table1', $table->getTableName()); $this->assertEqual(array('id', 'name'), $table->getPrimaryKeys()); } function assertColumn($columns, $table) { foreach($columns as $id=>$asserts) { $column = $table->Columns[$id]; foreach($asserts as $property=>$assert) { $ofAssert= var_export($assert,true); $value = $column->{$property}; $ofValue = var_export($value, true); $this->assertEqual($value, $assert, "Column [{$id}] {$property} value {$ofValue} did not match {$ofAssert}"); } } } }