summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--includes/database/mysql/schema.inc4
-rw-r--r--includes/database/pgsql/schema.inc4
-rw-r--r--includes/database/sqlite/schema.inc4
-rw-r--r--modules/simpletest/tests/database_test.test106
4 files changed, 118 insertions, 0 deletions
diff --git a/includes/database/mysql/schema.inc b/includes/database/mysql/schema.inc
index 16f3fd5a8213..edf86458cbc0 100644
--- a/includes/database/mysql/schema.inc
+++ b/includes/database/mysql/schema.inc
@@ -210,7 +210,11 @@ class DatabaseSchema_mysql extends DatabaseSchema {
'blob:big' => 'LONGBLOB',
'blob:normal' => 'BLOB',
+ 'date:normal' => 'DATE',
+
'datetime:normal' => 'DATETIME',
+
+ 'time:normal' => 'TIME',
);
return $map;
}
diff --git a/includes/database/pgsql/schema.inc b/includes/database/pgsql/schema.inc
index 61080c0addcd..c99fc78b931a 100644
--- a/includes/database/pgsql/schema.inc
+++ b/includes/database/pgsql/schema.inc
@@ -242,7 +242,11 @@ class DatabaseSchema_pgsql extends DatabaseSchema {
'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',
diff --git a/includes/database/sqlite/schema.inc b/includes/database/sqlite/schema.inc
index d32ef98798b7..4f3df5f74768 100644
--- a/includes/database/sqlite/schema.inc
+++ b/includes/database/sqlite/schema.inc
@@ -202,6 +202,10 @@ class DatabaseSchema_sqlite extends DatabaseSchema {
'blob:big' => 'BLOB',
'blob:normal' => 'BLOB',
+ 'date:normal' => 'DATE',
+
+ 'time:normal' => 'TIME',
+
'datetime:normal' => 'TIMESTAMP',
);
return $map;
diff --git a/modules/simpletest/tests/database_test.test b/modules/simpletest/tests/database_test.test
index 6b5eb2d0b1ab..d3c972742868 100644
--- a/modules/simpletest/tests/database_test.test
+++ b/modules/simpletest/tests/database_test.test
@@ -2777,3 +2777,109 @@ class DatabaseTransactionTestCase extends DatabaseTestCase {
}
}
}
+
+
+/**
+ * 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());
+ }
+
+ }
+
+}
+