? 200953.patch ? d7dev.esproj ? schema_add_date_and_time_with_unit_tests_0.diff ? sites/default/files ? sites/default/private ? sites/default/schema_add_date_and_time_with_unit_tests_0.diff ? sites/default/settings.php Index: includes/database/mysql/schema.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/database/mysql/schema.inc,v retrieving revision 1.24 diff -u -p -r1.24 schema.inc --- includes/database/mysql/schema.inc 17 Aug 2009 06:52:02 -0000 1.24 +++ includes/database/mysql/schema.inc 22 Aug 2009 18:54:57 -0000 @@ -210,7 +210,11 @@ class DatabaseSchema_mysql extends Datab 'blob:big' => 'LONGBLOB', 'blob:normal' => 'BLOB', + 'date:normal' => 'DATE', + 'datetime:normal' => 'DATETIME', + + 'time:normal' => 'TIME', ); return $map; } Index: includes/database/pgsql/schema.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/database/pgsql/schema.inc,v retrieving revision 1.19 diff -u -p -r1.19 schema.inc --- includes/database/pgsql/schema.inc 17 Aug 2009 06:52:02 -0000 1.19 +++ includes/database/pgsql/schema.inc 22 Aug 2009 18:54:58 -0000 @@ -242,7 +242,11 @@ class DatabaseSchema_pgsql extends Datab 'blob:big' => 'bytea', 'blob:normal' => 'bytea', + 'date:normal' => 'date', + 'datetime:normal' => 'timestamp without time zone', + + 'time:normal' => 'time without time zone', 'serial:tiny' => 'serial', 'serial:small' => 'serial', Index: includes/database/sqlite/schema.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/database/sqlite/schema.inc,v retrieving revision 1.8 diff -u -p -r1.8 schema.inc --- includes/database/sqlite/schema.inc 17 Aug 2009 06:52:02 -0000 1.8 +++ includes/database/sqlite/schema.inc 22 Aug 2009 18:54:58 -0000 @@ -202,6 +202,10 @@ class DatabaseSchema_sqlite extends Data 'blob:big' => 'BLOB', 'blob:normal' => 'BLOB', + 'date:normal' => 'DATE', + + 'time:normal' => 'TIME', + 'datetime:normal' => 'TIMESTAMP', ); return $map; Index: modules/simpletest/tests/database_test.test =================================================================== RCS file: /cvs/drupal/drupal/modules/simpletest/tests/database_test.test,v retrieving revision 1.63 diff -u -p -r1.63 database_test.test --- modules/simpletest/tests/database_test.test 4 Aug 2009 05:36:57 -0000 1.63 +++ modules/simpletest/tests/database_test.test 22 Aug 2009 18:54:58 -0000 @@ -2777,3 +2777,111 @@ class DatabaseTransactionTestCase extend } } } + + +/** + * Test proposed new data types for the schema API. + * + */ +class DatabaseExtraTypesTestCase extends DrupalWebTestCase { + + public static function getInfo() { + return array( + 'name' => 'Extra Types tests', + 'description' => 'Test the Extra Types.', + 'group' => 'Database', + ); + } + + + /** + * Test the date data type. + * + */ + function testDateField() { + try { + $date_table = array( + 'fields' => array( + 'date_field' => array( + 'description' => t('Test Date field'), + 'type' => 'date', + 'not null' => FALSE, + ), + ), + ); + $ret = array(); + db_create_table($ret, 'date_table', $date_table); + $this->assertEqual($ret[0]['success'], 1, t('Created table with date field')); + + db_insert('date_table')->fields(array('date_field')) + ->values(array('date_field' => '2001-01-01')) + ->values(array('date_field' => '1856-12-31')) + ->values(array('date_field' => '2100-06-30')) + ->execute(); + + $num_records = (int) db_query('SELECT COUNT(*) FROM {date_table}')->fetchField(); + $this->assertEqual($num_records, 3, t('Inserted 3 records, and counted 3 records')); + $res = db_query('SELECT date_field from {date_table} ORDER BY date_field'); + + $date = $res->fetch()->date_field; + $this->assertEqual($date, '1856-12-31', t('Date retrieved in order @date', array('@date' => $date))); + $date = $res->fetch()->date_field; + $this->assertEqual($date, '2001-01-01', t('Date retrieved in order @date', array('@date' => $date))); + $date = $res->fetch()->date_field; + $this->assertEqual($date, '2100-06-30', t('Date retrieved in order @date', array('@date' => $date))); + + + db_drop_table($ret, 'date_table'); + $this->assertEqual($ret[1]['success'], 1, t('Dropped table with date field')); + + } catch (Exception $e) { + $this->fail($e->getMessage()); + } + + } + + /** + * Test the time data type + */ + function testTimeField() { + try { + $time_table = array( + 'fields' => array( + 'time_field' => array( + 'description' => t('Test Time field'), + 'type' => 'time', + 'not null' => FALSE, + ), + ), + ); + $ret = array(); + db_create_table($ret, 'time_table', $time_table); + $this->assertEqual($ret[0]['success'], 1, t('Created table with time field')); + + db_insert('time_table')->fields(array('time_field')) + ->values(array('time_field' => '12:59:00')) + ->values(array('time_field' => '00:01:00')) + ->values(array('time_field' => '23:17:00')) + ->execute(); + + $num_records = (int) db_query('SELECT COUNT(*) FROM {time_table}')->fetchField(); + $this->assertEqual($num_records, 3, t('Inserted 3 records, and counted 3 records')); + $res = db_query('SELECT time_field from {time_table} ORDER BY time_field'); + + $time = $res->fetch()->time_field; + $this->assertEqual($time, '00:01:00', t('Time retrieved in order @time', array('@time' => $time))); + $time = $res->fetch()->time_field; + $this->assertEqual($time, '12:59:00', t('Time retrieved in order @time', array('@time' => $time))); + $time = $res->fetch()->time_field; + $this->assertEqual($time, '23:17:00', t('Time retrieved in order @time', array('@time' => $time))); + + db_drop_table($ret, 'time_table'); + $this->assertEqual($ret[1]['success'], 1, t('Dropped table with time field')); + } catch (Exception $e) { + $this->fail($e->getMessage()); + } + + } + +} +