Index: includes/database.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database.inc,v
retrieving revision 1.67
diff -u -F^f -r1.67 database.inc
--- includes/database.inc	13 Apr 2007 08:56:57 -0000	1.67
+++ includes/database.inc	13 Apr 2007 22:31:24 -0000
@@ -308,6 +308,48 @@ function db_escape_table($string) {
   return preg_replace('/[^A-Za-z0-9_]+/', '', $string);
 }
 
+
+/**
+ * Create a table from a drupal data model.
+ *
+ * A drupal data model is a representation of a data structure.
+ * It is always pulled from a callback function (similar to FAPI).
+ * This callback function, model_modelid(), should return an associative array that
+ * describes the data structure of the model (table). The following keys will be
+ * processed during table creation:
+ *  - ['table']: The table name. Defaults to the model_id.
+ *  - ['fields']: An associative array ('fieldname' => details) that describes the fields
+ *     of the model. In the details array, the following options are available:
+ *       - ['type']: The generic datatype. One of: 
+ *                   'string', 'number', 'float', 'text', 'blob'
+ *       - ['size']: The data size. This decides which engine-specific datatype is used
+ *                   (e.g. TINYINT vs. INT). If not set, 'normal' is used (which would expand
+ *                   to INT resp. TEXT resp. BLOB).
+ *                   For number: 'tiny','small','medium','normal','big'.
+ *                   For text:   'small','medium','normal','long'. 
+ *                   For blob:   'normal','long'.
+ *       - ['length']: For chars the max. length, for numbers the display width (mysql only).
+ *       - ['not null']: If true, no NULL values will be allowed. Defaults to false.
+ *       - ['default']: The default value.
+ *       - ['unsigned'], ['auto_increment']
+ *       All options apart from 'type' are optional.
+ *  - ['primary key']: An array of (one or more) field names that shall form the primary key
+ *  - ['unique key']: An array of the form 'key_name' => array('field1' [, 'field2' [, 'field3']])
+ *  - ['keys']: An array of the form 'key_name' => array('field1' [, 'field2' [, 'field3']])
+ *  - ['indexes']: An array of the form 'index_name' => array('field1' [, 'field2' [, 'field3']])
+ * 
+ * @param $model_id A valid data model id.
+ */
+function db_process_model($model_id) {
+  // Load the data model.
+  $model = call_user_func('model_'. $model_id);
+  
+  if (!isset($model['table']))
+    $model['table'] = $model_id;
+
+  return db_create_table($model);
+}
+
 /**
  * @} End of "defgroup database".
  */
Index: includes/database.mysql.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database.mysql.inc,v
retrieving revision 1.69
diff -u -F^f -r1.69 database.mysql.inc
--- includes/database.mysql.inc	13 Apr 2007 08:56:57 -0000	1.69
+++ includes/database.mysql.inc	13 Apr 2007 22:31:24 -0000
@@ -438,6 +438,150 @@ function db_distinct_field($table, $fiel
   return preg_replace('/(SELECT.*)(?:'. $table .'\.|\s)(?<!DISTINCT\()(?<!DISTINCT\('. $table .'\.)'. $field .'(.*FROM )/AUsi', '\1 '. $field_to_select .'\2', $query);
 }
 
+
+ /**
+ * Create a new table from a drupal data model.
+ * 
+ * @param $model A valid drupal data model
+ */
+function db_create_table($model) {
+  $query = "CREATE TABLE IF NOT EXISTS {" . $model['table'] . "} (\n";
+  
+  // Add the SQL statement for each field
+  foreach ($model['fields'] as $name => $field) { 
+    $query .= _db_create_field_sql($name, db_process_field($field));
+    $query .= ", \n";
+  } 
+  
+  // Process keys.
+  if (isset($model['primary key']))
+    $query .= " PRIMARY KEY (" . implode(', ', $model['primary key']) . "), \n";
+  
+  if (isset($model['unique key'])) {
+    foreach ($model['unique key'] as $key => $fields)
+      $query .= " UNIQUE KEY $key (" . implode(', ', $fields) . "), \n";
+  } 
+  
+  if (isset($model['keys'])) {
+    foreach ($model['keys'] as $key => $fields)
+      $query .= " KEY $key (" . implode(', ', $fields) . "), \n";
+  } 
+  
+  if (isset($model['indexes'])) {
+    foreach ($model['indexes'] as $key => $fields)
+      $query .= " INDEX $key (" . implode(', ', $fields) . "), \n";
+  } 
+  
+  $query = substr($query, 0, strlen($query) - 3);
+  $query .= ");";
+  // print $query;
+  return db_query($query);
+} 
+ 
+/**
+ * Set database-engine specific properties for a field.
+ * 
+ * @param $field A field description array, as specified in the data model documentation.
+ */
+function db_process_field($field) {
+  // set default properties
+  if (!isset($field['not null']))
+    $field['not null'] = false;
+
+  switch ($field['type']) {
+    case 'string':
+      $field['dbtype'] = 'VARCHAR';
+      break;
+    case 'number':
+      if (!isset($field['size']))
+        $field['size'] = 'normal';
+      switch ($field['size']) {
+        case 'tiny':
+          $field['dbtype'] = 'TINYINT';
+          break;
+        case 'small':
+          $field['dbtype'] = 'SMALLINT';
+          break;
+        case 'medium':
+          $field['dbtype'] = 'MEDIUMINT';
+          break;
+        case 'big':
+          $field['dbtype'] = 'BIGINT';
+          break;
+        case 'normal':
+          $field['dbtype'] = 'INT';
+          break;
+      }
+      break; 
+    case 'text':
+      if (!isset($field['size']))
+        $field['size'] = 'normal';
+      switch ($field['size']) {
+        case 'small':
+          $field['dbtype'] = 'SMALLTEXT';
+          break;
+        case 'medium':
+          $field['dbtype'] = 'MEDIUMTEXT';
+          break;
+        case 'normal':
+          $field['dbtype'] = 'TEXT';
+          break;
+        case 'long':
+          $field['dbtype'] = 'LONGTEXT';
+          break;
+      }
+      break;
+    case 'blob':
+      if ($field['size'] == 'long')
+        $field['dbtype'] = 'LONGBLOB';
+      else
+        $field['dbtype'] = 'BLOB';
+      break;
+    case 'float':
+      $field['dbtype'] = 'FLOAT';
+      break;
+  }
+  return $field;
+} 
+
+
+/**
+* Create an SQL string for a field to be used in table creation or alteration.
+* 
+* Before passing a field out of a model definition into this function it has 
+* to be processed by db_process_field.
+* 
+* @param $name 
+*    Name of the field 
+* @param $details 
+*    The field properties. At least $details['dbtype'] has to be set by now.
+*    Aditional properties are 'length', 'unsigned', 'not null', 'auto_increment', 'default'
+*/
+function _db_create_field_sql($name, $details) {
+  $query = "`" . $name . "` " . $details['dbtype'];
+    
+  if (isset($details['length']))
+    $query .= "(" . $details['length'] . ") ";
+  
+  if (!empty($details['unsigned'])) 
+    $query .= " unsigned ";
+
+  if (isset($details['not null']) && $details['not null'])
+      $query .= " NOT NULL ";
+  
+  if (isset($details['auto_increment']) && $details['auto_increment']) 
+    $query .= " auto_increment ";
+    
+  if (isset($details['default']) && $details['default'] !== FALSE)
+      $query .= " DEFAULT '" . $details['default'] . "' ";
+  
+  if (!isset($details['default']) && $details['not null'] == FALSE)
+      $query .= " DEFAULT NULL ";
+      
+  return substr($query, 0, strlen($query) -1);
+}
+
+
 /**
  * @} End of "ingroup database".
  */
Index: modules/system/system.install
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.install,v
retrieving revision 1.90
diff -u -F^f -r1.90 system.install
--- modules/system/system.install	13 Apr 2007 08:53:24 -0000	1.90
+++ modules/system/system.install	13 Apr 2007 22:31:26 -0000
@@ -2,6 +2,636 @@
 // $Id: system.install,v 1.90 2007/04/13 08:53:24 dries Exp $
 
 /**
+ * Data definition models for required tables.
+ */
+ 
+function model_access() {
+  $model['fields'] = array(
+    'aid'    => array('type' => 'number', 'not null' => true, 'auto_increment' => true),
+    'mask'   => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'type'   => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'status' => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true)
+  );
+  $model['primary key'] = array('aid');
+
+  return $model;
+}
+
+function model_authmap() {
+  $model['fields'] = array(
+    'aid'      => array('type' => 'number', 'not null' => true, 'unsigned' => true, 'auto_increment' => true),
+    'uid'      => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'authname' => array('type' => 'string', 'length' => 128, 'default' => '', 'not null' => true),
+    'module'   => array('type' => 'string', 'length' => 128, 'default' => '', 'not null' => true)
+  );
+  $model['primary key'] = array('aid');
+  $model['unique key'] = array('authname' => array('authname'));
+
+  return $model;
+}
+
+function model_blocks() {
+  $model['fields'] = array(
+    'module'     => array('type' => 'string', 'length' => 64, 'default' => '', 'not null' => true),
+    'delta'      => array('type' => 'string', 'length' => 32, 'default' => '0', 'not null' => true),
+    'theme'      => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'status'     => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true),
+    'weight'     => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true),
+    'region'     => array('type' => 'string', 'length' => 64, 'default' => 'left', 'not null' => true),
+    'custom'     => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true),
+    'throttle'   => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true),
+    'visibility' => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true),
+    'pages'      => array('type' => 'text', 'not null' => true),
+    'title'      => array('type' => 'string', 'length' => 64, 'default' => '', 'not null' => true)
+  );
+
+  return $model;
+}
+
+function model_boxes() {
+  $model['fields'] = array(
+    'bid'    => array('type' => 'number', 'not null' => true),
+    'body'   => array('type' => 'text', 'size' => 'long'),
+    'info'   => array('type' => 'string', 'length' => 128, 'default' => '', 'not null' => true),
+    'format' => array('type' => 'number', 'default' => '0', 'not null' => true)
+  );
+  $model['primary key'] = array('bid');
+  $model['unique key'] = array('info' => array('info'));
+
+  return $model;
+}
+
+function model_cache() {
+  $model['fields'] = array(
+    'cid'     => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'data'    => array('type' => 'blob', 'size' => 'long'),
+    'expire'  => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'created' => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'headers' => array('type' => 'text')
+  );
+  $model['primary key'] = array('cid');
+  $model['indexes'] = array(
+    'expire' => array('expire')
+  );
+
+  return $model;
+}
+
+function model_cache_filter() {
+  $model['fields'] = array(
+    'cid'     => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'data'    => array('type' => 'blob', 'size' => 'long'),
+    'expire'  => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'created' => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'headers' => array('type' => 'text')
+  );
+  $model['primary key'] = array('cid');
+  $model['indexes'] = array(
+    'expire' => array('expire')
+  );
+
+  return $model;
+}
+
+function model_cache_page() {
+  $model['fields'] = array(
+    'cid'     => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'data'    => array('type' => 'blob', 'size' => 'long'),
+    'expire'  => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'created' => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'headers' => array('type' => 'text')
+  );
+  $model['primary key'] = array('cid');
+  $model['indexes'] = array(
+    'expire' => array('expire')
+  );
+
+  return $model;
+}
+
+function model_comments() {
+  $model['fields'] = array(
+    'cid'       => array('type' => 'number', 'not null' => true, 'auto_increment' => true),
+    'pid'       => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'nid'       => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'uid'       => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'subject'   => array('type' => 'string', 'length' => 64, 'default' => '', 'not null' => true),
+    'comment'   => array('type' => 'text', 'size' => 'long', 'not null' => true),
+    'hostname'  => array('type' => 'string', 'length' => 128, 'default' => '', 'not null' => true),
+    'timestamp' => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'score'     => array('type' => 'number', 'size' => 'medium', 'default' => '0', 'not null' => true),
+    'status'    => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'format'    => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'thread'    => array('type' => 'string', 'length' => 255, 'not null' => true),
+    'users'     => array('type' => 'text', 'size' => 'long'),
+    'name'      => array('type' => 'string', 'length' => 60, 'not null' => false),
+    'mail'      => array('type' => 'string', 'length' => 64, 'not null' => false),
+    'homepage'  => array('type' => 'string', 'length' => 255, 'not null' => false)
+  );
+  $model['primary key'] = array('cid');
+  $model['keys'] = array(
+    'lid'    => array('nid'),
+    'status' => array('status')
+  );
+
+  return $model;
+}
+
+function model_node_comment_statistics() {
+  $model['fields'] = array(
+    'nid'                    => array('type' => 'number', 'not null' => true, 'unsigned' => true, 'auto_increment' => true),
+    'last_comment_timestamp' => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'last_comment_name'      => array('type' => 'string', 'length' => 60, 'not null' => false),
+    'last_comment_uid'       => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'comment_count'          => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true)
+  );
+  $model['primary key'] = array('nid');
+  $model['keys'] = array(
+    'node_comment_timestamp' => array('last_comment_timestamp')
+  );
+
+  return $model;
+}
+
+function model_files() {
+  $model['fields'] = array(
+    'fid'      => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'nid'      => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'filename' => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'filepath' => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'filemime' => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'filesize' => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true)
+  );
+  $model['primary key'] = array('fid');
+  $model['keys'] = array(
+    'nid' => array('nid')
+  );
+
+  return $model;
+}
+
+function model_file_revisions() {
+  $model['fields'] = array(
+    'fid'         => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'vid'         => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'description' => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'list'        => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true, 'unsigned' => true)
+  );
+  $model['primary key'] = array('fid', 'vid');
+  $model['keys'] = array(
+    'vid' => array('vid')
+  );
+
+  return $model;
+}
+
+function model_filter_formats() {
+  $model['fields'] = array(
+    'format' => array('type' => 'number', 'not null' => true, 'auto_increment' => true),
+    'name'   => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'roles'  => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'cache'  => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true)
+  );
+  $model['primary key'] = array('format');
+  $model['unique key'] = array('name' => array('name'));
+
+  return $model;
+}
+
+function model_filters() {
+  $model['fields'] = array(
+    'format' => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'module' => array('type' => 'string', 'length' => 64, 'default' => '', 'not null' => true),
+    'delta'  => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true),
+    'weight' => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true)
+  );
+  $model['indexes'] = array(
+    'weight' => array('weight')
+  );
+
+  return $model;
+}
+
+function model_flood() {
+  $model['fields'] = array(
+    'event'     => array('type' => 'string', 'length' => 64, 'default' => '', 'not null' => true),
+    'hostname'  => array('type' => 'string', 'length' => 128, 'default' => '', 'not null' => true),
+    'timestamp' => array('type' => 'number', 'default' => '0', 'not null' => true)
+  );
+
+  return $model;
+}
+
+function model_history() {
+  $model['fields'] = array(
+    'uid'       => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'nid'       => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'timestamp' => array('type' => 'number', 'default' => '0', 'not null' => true)
+  );
+  $model['primary key'] = array('uid',' nid');
+
+  return $model;
+}
+
+function model_menu() {
+  $model['fields'] = array(
+    'mid'              => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'pid'              => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'path'             => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'load_functions'   => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'to_arg_functions' => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'access_callback'  => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'access_arguments' => array('type' => 'text'),
+    'page_callback'    => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'page_arguments'   => array('type' => 'text'),
+    'fit'              => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'number_parts'     => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'mleft'            => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'mright'           => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'visible'          => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'parents'          => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'depth'            => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'has_children'     => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'tab'              => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'title'            => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'parent'           => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'type'             => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'block_callback'   => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'description'      => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'position'         => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'link_path'        => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'attributes'       => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'query'            => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'fragment'         => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'absolute'         => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'html'             => array('type' => 'number', 'default' => '0', 'not null' => true)
+  );
+  $model['primary key'] = array('path');
+  $model['keys'] = array(
+    'fit'     => array('fit'),
+    'visible' => array('visible'),
+    'pid'     => array('pid'),
+    'parent'  => array('parent')
+  );
+
+  return $model;
+}
+
+function model_node() {
+  $model['fields'] = array(
+    'nid'      => array('type' => 'number', 'not null' => true, 'unsigned' => true, 'auto_increment' => true),
+    'vid'      => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'type'     => array('type' => 'string', 'length' => 32, 'default' => '', 'not null' => true),
+    'title'    => array('type' => 'string', 'length' => 128, 'default' => '', 'not null' => true),
+    'uid'      => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'status'   => array('type' => 'number', 'default' => '1', 'not null' => true),
+    'created'  => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'changed'  => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'comment'  => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'promote'  => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'moderate' => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'sticky'   => array('type' => 'number', 'default' => '0', 'not null' => true)
+  );
+  $model['primary key'] = array('nid', 'vid');
+  $model['unique key'] = array('vid' => array('vid'));
+  $model['keys'] = array(
+    'node_type'           => array('type(4)'),
+    'node_title_type'     => array('title', 'type(4)'),
+    'status'              => array('status'),
+    'uid'                 => array('uid'),
+    'node_moderate'       => array('moderate'),
+    'node_promote_status' => array('promote', 'status'),
+    'node_created'        => array('created'),
+    'node_changed'        => array('changed'),
+    'node_status_type'    => array('status', 'type', 'nid'),
+    'nid'                 => array('nid')
+  );
+
+  return $model;
+}
+
+function model_node_access() {
+  $model['fields'] = array(
+    'nid'          => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'gid'          => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'realm'        => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'grant_view'   => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'grant_update' => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'grant_delete' => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true, 'unsigned' => true)
+  );
+  $model['primary key'] = array('nid,gid,realm');
+
+  return $model;
+}
+
+function model_node_revisions() {
+  $model['fields'] = array(
+    'nid'       => array('type' => 'number', 'not null' => true, 'unsigned' => true),
+    'vid'       => array('type' => 'number', 'not null' => true, 'unsigned' => true),
+    'uid'       => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'title'     => array('type' => 'string', 'length' => 128, 'default' => '', 'not null' => true),
+    'body'      => array('type' => 'text', 'size' => 'long', 'not null' => true),
+    'teaser'    => array('type' => 'text', 'size' => 'long', 'not null' => true),
+    'log'       => array('type' => 'text', 'size' => 'long', 'not null' => true),
+    'timestamp' => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'format'    => array('type' => 'number', 'default' => '0', 'not null' => true)
+  );
+  $model['primary key'] = array('vid');
+  $model['keys'] = array(
+    'nid' => array('nid'),
+    'uid' => array('uid')
+  );
+
+  return $model;
+}
+
+function model_node_type() {
+  $model['fields'] = array(
+    'type'           => array('type' => 'string', 'length' => 32, 'not null' => true),
+    'name'           => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'module'         => array('type' => 'string', 'length' => 255, 'not null' => true),
+    'description'    => array('type' => 'text', 'size' => 'medium', 'not null' => true),
+    'help'           => array('type' => 'text', 'size' => 'medium', 'not null' => true),
+    'has_title'      => array('type' => 'number', 'size' => 'tiny', 'not null' => true, 'unsigned' => true),
+    'title_label'    => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'has_body'       => array('type' => 'number', 'size' => 'tiny', 'not null' => true, 'unsigned' => true),
+    'body_label'     => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'min_word_count' => array('type' => 'number', 'size' => 'small', 'not null' => true, 'unsigned' => true),
+    'custom'         => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true),
+    'modified'       => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true),
+    'locked'         => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true),
+    'orig_type'      => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true)
+  );
+  $model['primary key'] = array('type');
+
+  return $model;
+}
+
+function model_url_alias() {
+  $model['fields'] = array(
+    'pid'      => array('type' => 'number', 'not null' => true, 'unsigned' => true, 'auto_increment' => true),
+    'src'      => array('type' => 'string', 'length' => 128, 'default' => '', 'not null' => true),
+    'dst'      => array('type' => 'string', 'length' => 128, 'default' => '', 'not null' => true),
+    'language' => array('type' => 'string', 'length' => 12, 'default' => '', 'not null' => true)
+  );
+  $model['primary key'] = array('pid');
+  $model['unique key'] = array('dst_language' => array('dst', 'language'));
+  $model['keys'] = array(
+    'src' => array('src')
+  );
+
+  return $model;
+}
+
+function model_permission() {
+  $model['fields'] = array(
+    'rid'  => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'perm' => array('type' => 'text', 'size' => 'long'),
+    'tid'  => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true)
+  );
+  $model['keys'] = array(
+    'rid' => array('rid')
+  );
+
+  return $model;
+}
+
+function model_role() {
+  $model['fields'] = array(
+    'rid'  => array('type' => 'number', 'not null' => true, 'unsigned' => true, 'auto_increment' => true),
+    'name' => array('type' => 'string', 'length' => 64, 'default' => '', 'not null' => true)
+  );
+  $model['primary key'] = array('rid');
+  $model['unique key'] = array('name' => array('name'));
+
+  return $model;
+}
+
+function model_blocks_roles() {
+  $model['fields'] = array(
+    'module' => array('type' => 'string', 'length' => 64, 'not null' => true),
+    'delta'  => array('type' => 'string', 'length' => 32, 'not null' => true),
+    'rid'    => array('type' => 'number', 'not null' => true, 'unsigned' => true)
+  );
+  $model['primary key'] = array('module', 'delta', 'rid');
+
+  return $model;
+}
+
+function model_sessions() {
+  $model['fields'] = array(
+    'uid'       => array('type' => 'number', 'not null' => true, 'unsigned' => true),
+    'sid'       => array('type' => 'string', 'length' => 64, 'default' => '', 'not null' => true),
+    'hostname'  => array('type' => 'string', 'length' => 128, 'default' => '', 'not null' => true),
+    'timestamp' => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'cache'     => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'session'   => array('type' => 'text', 'size' => 'long')
+  );
+  $model['primary key'] = array('sid');
+  $model['keys'] = array(
+    'uid'       => array('uid'),
+    'timestamp' => array('timestamp')
+  );
+
+  return $model;
+}
+
+function model_sequences() {
+  $model['fields'] = array(
+    'name' => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'id'   => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true)
+  );
+  $model['primary key'] = array('name');
+
+  return $model;
+}
+
+function model_node_counter() {
+  $model['fields'] = array(
+    'nid'        => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'totalcount' => array('type' => 'number', 'size' => 'big', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'daycount'   => array('type' => 'number', 'size' => 'medium', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'timestamp'  => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true)
+  );
+  $model['primary key'] = array('nid');
+
+  return $model;
+}
+
+function model_system() {
+  $model['fields'] = array(
+    'filename'       => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'name'           => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'type'           => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'description'    => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'status'         => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'throttle'       => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true),
+    'bootstrap'      => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'schema_version' => array('type' => 'number', 'size' => 'small', 'default' => '-1', 'not null' => true),
+    'weight'         => array('type' => 'number', 'default' => '0', 'not null' => true)
+  );
+  $model['primary key'] = array('filename');
+  $model['keys'] = array(
+    'weight' => array('weight')
+  );
+
+  return $model;
+}
+
+function model_term_data() {
+  $model['fields'] = array(
+    'tid'         => array('type' => 'number', 'not null' => true, 'unsigned' => true, 'auto_increment' => true),
+    'vid'         => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'name'        => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'description' => array('type' => 'text', 'size' => 'long'),
+    'weight'      => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true)
+  );
+  $model['primary key'] = array('tid');
+  $model['keys'] = array(
+    'vid' => array('vid')
+  );
+
+  return $model;
+}
+
+function model_term_hierarchy() {
+  $model['fields'] = array(
+    'tid'    => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'parent' => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true)
+  );
+  $model['primary key'] = array('tid', 'parent');
+  $model['keys'] = array(
+    'tid'    => array('tid'),
+    'parent' => array('parent')
+  );
+
+  return $model;
+}
+
+function model_term_node() {
+  $model['fields'] = array(
+    'nid' => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'vid' => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'tid' => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true)
+  );
+  $model['primary key'] = array('vid,tid,nid');
+  $model['keys'] = array(
+    'nid' => array('nid'),
+    'vid' => array('vid'),
+    'tid' => array('tid')
+  );
+
+  return $model;
+}
+
+function model_term_relation() {
+  $model['fields'] = array(
+    'tid1' => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'tid2' => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true)
+  );
+  $model['keys'] = array(
+    'tid1' => array('tid1'),
+    'tid2' => array('tid2')
+  );
+
+  return $model;
+}
+
+function model_term_synonym() {
+  $model['fields'] = array(
+    'tid'  => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'name' => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true)
+  );
+  $model['keys'] = array(
+    'tid'  => array('tid'),
+    'name' => array('name(3)')
+  );
+
+  return $model;
+}
+
+function model_users() {
+  $model['fields'] = array(
+    'uid'       => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'name'      => array('type' => 'string', 'length' => 60, 'default' => '', 'not null' => true),
+    'pass'      => array('type' => 'string', 'length' => 32, 'default' => '', 'not null' => true),
+    'mail'      => array('type' => 'string', 'length' => 64, 'default' => ''),
+    'mode'      => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true),
+    'sort'      => array('type' => 'number', 'size' => 'tiny', 'default' => '0'),
+    'threshold' => array('type' => 'number', 'size' => 'tiny', 'default' => '0'),
+    'theme'     => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'signature' => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'created'   => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'access'    => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'login'     => array('type' => 'number', 'default' => '0', 'not null' => true),
+    'status'    => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true),
+    'timezone'  => array('type' => 'string', 'length' => 8, 'not null' => false),
+    'language'  => array('type' => 'string', 'length' => 12, 'default' => '', 'not null' => true),
+    'picture'   => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'init'      => array('type' => 'string', 'length' => 64, 'default' => ''),
+    'data'      => array('type' => 'text', 'size' => 'long')
+  );
+  $model['primary key'] = array('uid');
+  $model['unique key'] = array('name' => array('name'));
+  $model['keys'] = array(
+    'created' => array('created'),
+    'access'  => array('access')
+  );
+
+  return $model;
+}
+
+function model_users_roles() {
+  $model['fields'] = array(
+    'uid' => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'rid' => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true)
+  );
+  $model['primary key'] = array('uid', 'rid');
+
+  return $model;
+}
+
+function model_variable() {
+  $model['fields'] = array(
+    'name'     => array('type' => 'string', 'length' => 128, 'default' => '', 'not null' => true),
+    'value'    => array('type' => 'text', 'size' => 'long', 'not null' => true),
+    'language' => array('type' => 'string', 'length' => 12, 'default' => '', 'not null' => true)
+  );
+  $model['primary key'] = array('name', 'language');
+
+  return $model;
+}
+
+function model_vocabulary() {
+  $model['fields'] = array(
+    'vid'         => array('type' => 'number', 'not null' => true, 'unsigned' => true, 'auto_increment' => true),
+    'name'        => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'description' => array('type' => 'text', 'size' => 'long'),
+    'help'        => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'relations'   => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'hierarchy'   => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'multiple'    => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'required'    => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'tags'        => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'module'      => array('type' => 'string', 'length' => 255, 'default' => '', 'not null' => true),
+    'weight'      => array('type' => 'number', 'size' => 'tiny', 'default' => '0', 'not null' => true)
+  );
+  $model['primary key'] = array('vid');
+
+  return $model;
+}
+
+function model_vocabulary_node_types() {
+  $model['fields'] = array(
+    'vid'  => array('type' => 'number', 'default' => '0', 'not null' => true, 'unsigned' => true),
+    'type' => array('type' => 'string', 'length' => 32, 'default' => '', 'not null' => true)
+  );
+  $model['primary key'] = array('vid', 'type');
+
+  return $model;
+}
+
+/**
  * Test and report Drupal installation requirements.
  */
 function system_requirements($phase) {
@@ -165,918 +795,26 @@ function system_requirements($phase) {
   return $requirements;
 }
 
-
 /**
  * Implementation of hook_install().
  */
 function system_install() {
-  switch ($GLOBALS['db_type']) {
-    case 'mysql':
-    case 'mysqli':
-      db_query("CREATE TABLE {access} (
-        aid int NOT NULL auto_increment,
-        mask varchar(255) NOT NULL default '',
-        type varchar(255) NOT NULL default '',
-        status tinyint NOT NULL default '0',
-        PRIMARY KEY (aid)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {authmap} (
-        aid int unsigned NOT NULL auto_increment,
-        uid int NOT NULL default '0',
-        authname varchar(128) NOT NULL default '',
-        module varchar(128) NOT NULL default '',
-        PRIMARY KEY (aid),
-        UNIQUE KEY authname (authname)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {blocks} (
-        module varchar(64) DEFAULT '' NOT NULL,
-        delta varchar(32) NOT NULL default '0',
-        theme varchar(255) NOT NULL default '',
-        status tinyint DEFAULT '0' NOT NULL,
-        weight tinyint DEFAULT '0' NOT NULL,
-        region varchar(64) DEFAULT 'left' NOT NULL,
-        custom tinyint DEFAULT '0' NOT NULL,
-        throttle tinyint DEFAULT '0' NOT NULL,
-        visibility tinyint DEFAULT '0' NOT NULL,
-        pages text NOT NULL,
-        title varchar(64) DEFAULT '' NOT NULL
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {boxes} (
-        bid int NOT NULL,
-        body longtext,
-        info varchar(128) NOT NULL default '',
-        format int NOT NULL default '0',
-        PRIMARY KEY (bid),
-        UNIQUE KEY info (info)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {cache} (
-        cid varchar(255) NOT NULL default '',
-        data longblob,
-        expire int NOT NULL default '0',
-        created int NOT NULL default '0',
-        headers text,
-        PRIMARY KEY (cid),
-        INDEX expire (expire)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-      db_query("CREATE TABLE {cache_filter} (
-        cid varchar(255) NOT NULL default '',
-        data longblob,
-        expire int NOT NULL default '0',
-        created int NOT NULL default '0',
-        headers text,
-        PRIMARY KEY (cid),
-        INDEX expire (expire)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-      db_query("CREATE TABLE {cache_page} (
-        cid varchar(255) BINARY NOT NULL default '',
-        data longblob,
-        expire int NOT NULL default '0',
-        created int NOT NULL default '0',
-        headers text,
-        PRIMARY KEY (cid),
-        INDEX expire (expire)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {comments} (
-        cid int NOT NULL auto_increment,
-        pid int NOT NULL default '0',
-        nid int NOT NULL default '0',
-        uid int NOT NULL default '0',
-        subject varchar(64) NOT NULL default '',
-        comment longtext NOT NULL,
-        hostname varchar(128) NOT NULL default '',
-        timestamp int NOT NULL default '0',
-        score mediumint NOT NULL default '0',
-        status tinyint unsigned NOT NULL default '0',
-        format int NOT NULL default '0',
-        thread varchar(255) NOT NULL,
-        users longtext,
-        name varchar(60) default NULL,
-        mail varchar(64) default NULL,
-        homepage varchar(255) default NULL,
-        PRIMARY KEY (cid),
-        KEY lid (nid),
-        KEY status (status)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {node_comment_statistics} (
-        nid int unsigned NOT NULL auto_increment,
-        last_comment_timestamp int NOT NULL default '0',
-        last_comment_name varchar(60) default NULL,
-        last_comment_uid int NOT NULL default '0',
-        comment_count int unsigned NOT NULL default '0',
-        PRIMARY KEY (nid),
-        KEY node_comment_timestamp (last_comment_timestamp)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {files} (
-        fid int unsigned NOT NULL default 0,
-        nid int unsigned NOT NULL default 0,
-        filename varchar(255) NOT NULL default '',
-        filepath varchar(255) NOT NULL default '',
-        filemime varchar(255) NOT NULL default '',
-        filesize int unsigned NOT NULL default 0,
-        PRIMARY KEY (fid),
-        KEY nid (nid)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {file_revisions} (
-        fid int unsigned NOT NULL default 0,
-        vid int unsigned NOT NULL default 0,
-        description varchar(255) NOT NULL default '',
-        list tinyint unsigned NOT NULL default 0,
-        PRIMARY KEY (fid, vid),
-        KEY (vid)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {filter_formats} (
-        format int NOT NULL auto_increment,
-        name varchar(255) NOT NULL default '',
-        roles varchar(255) NOT NULL default '',
-        cache tinyint NOT NULL default '0',
-        PRIMARY KEY (format),
-        UNIQUE KEY (name)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {filters} (
-        format int NOT NULL default '0',
-        module varchar(64) NOT NULL default '',
-        delta tinyint DEFAULT '0' NOT NULL,
-        weight tinyint DEFAULT '0' NOT NULL,
-        INDEX (weight)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {flood} (
-        event varchar(64) NOT NULL default '',
-        hostname varchar(128) NOT NULL default '',
-        timestamp int NOT NULL default '0'
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {history} (
-        uid int NOT NULL default '0',
-        nid int NOT NULL default '0',
-        timestamp int NOT NULL default '0',
-        PRIMARY KEY (uid,nid)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {menu} (
-        mid int NOT NULL default 0,
-        pid int NOT NULL default 0,
-        path varchar(255) NOT NULL default '',
-        load_functions varchar(255) NOT NULL default '',
-        to_arg_functions varchar(255) NOT NULL default '',
-        access_callback varchar(255) NOT NULL default '',
-        access_arguments text,
-        page_callback varchar(255) NOT NULL default '',
-        page_arguments text,
-        fit int NOT NULL default 0,
-        number_parts int NOT NULL default 0,
-        mleft int NOT NULL default 0,
-        mright int NOT NULL default 0,
-        visible int NOT NULL default 0,
-        parents varchar(255) NOT NULL default '',
-        depth int NOT NULL default 0,
-        has_children int NOT NULL default 0,
-        tab int NOT NULL default 0,
-        title varchar(255) NOT NULL default '',
-        parent varchar(255) NOT NULL default '',
-        type int NOT NULL default 0,
-        block_callback varchar(255) NOT NULL default '',
-        description varchar(255) NOT NULL default '',
-        position varchar(255) NOT NULL default '',
-        link_path varchar(255) NOT NULL default '',
-        attributes varchar(255) NOT NULL default '',
-        query varchar(255) NOT NULL default '',
-        fragment varchar(255) NOT NULL default '',
-        absolute INT NOT NULL default 0,
-        html INT NOT NULL default 0,
-        PRIMARY KEY  (path),
-        KEY fit (fit),
-        KEY visible (visible),
-        KEY pid (pid),
-        KEY parent (parent)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {node} (
-        nid int unsigned NOT NULL auto_increment,
-        vid int unsigned NOT NULL default '0',
-        type varchar(32) NOT NULL default '',
-        title varchar(128) NOT NULL default '',
-        uid int NOT NULL default '0',
-        status int NOT NULL default '1',
-        created int NOT NULL default '0',
-        changed int NOT NULL default '0',
-        comment int NOT NULL default '0',
-        promote int NOT NULL default '0',
-        moderate int NOT NULL default '0',
-        sticky int NOT NULL default '0',
-        PRIMARY KEY  (nid, vid),
-        UNIQUE KEY vid (vid),
-        KEY node_type (type(4)),
-        KEY node_title_type (title, type(4)),
-        KEY status (status),
-        KEY uid (uid),
-        KEY node_moderate (moderate),
-        KEY node_promote_status (promote, status),
-        KEY node_created (created),
-        KEY node_changed (changed),
-        KEY node_status_type (status, type, nid),
-        KEY nid (nid)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {node_access} (
-        nid int unsigned NOT NULL default '0',
-        gid int unsigned NOT NULL default '0',
-        realm varchar(255) NOT NULL default '',
-        grant_view tinyint unsigned NOT NULL default '0',
-        grant_update tinyint unsigned NOT NULL default '0',
-        grant_delete tinyint unsigned NOT NULL default '0',
-        PRIMARY KEY (nid,gid,realm)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {node_revisions} (
-        nid int unsigned NOT NULL,
-        vid int unsigned NOT NULL,
-        uid int NOT NULL default '0',
-        title varchar(128) NOT NULL default '',
-        body longtext NOT NULL,
-        teaser longtext NOT NULL,
-        log longtext NOT NULL,
-        timestamp int NOT NULL default '0',
-        format int NOT NULL default '0',
-        PRIMARY KEY  (vid),
-        KEY nid (nid),
-        KEY uid (uid)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {node_type} (
-        type varchar(32) NOT NULL,
-        name varchar(255) NOT NULL default '',
-        module varchar(255) NOT NULL,
-        description mediumtext NOT NULL,
-        help mediumtext NOT NULL,
-        has_title tinyint unsigned NOT NULL,
-        title_label varchar(255) NOT NULL default '',
-        has_body tinyint unsigned NOT NULL,
-        body_label varchar(255) NOT NULL default '',
-        min_word_count smallint unsigned NOT NULL,
-        custom tinyint NOT NULL DEFAULT '0',
-        modified tinyint NOT NULL DEFAULT '0',
-        locked tinyint NOT NULL DEFAULT '0',
-        orig_type varchar(255) NOT NULL default '',
-        PRIMARY KEY (type)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {url_alias} (
-        pid int unsigned NOT NULL auto_increment,
-        src varchar(128) NOT NULL default '',
-        dst varchar(128) NOT NULL default '',
-        language varchar(12) NOT NULL default '',
-        PRIMARY KEY (pid),
-        UNIQUE KEY dst_language (dst, language),
-        KEY src (src)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {permission} (
-        rid int unsigned NOT NULL default '0',
-        perm longtext,
-        tid int unsigned NOT NULL default '0',
-        KEY rid (rid)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {role} (
-        rid int unsigned NOT NULL auto_increment,
-        name varchar(64) NOT NULL default '',
-        PRIMARY KEY (rid),
-        UNIQUE KEY name (name)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {blocks_roles} (
-        module varchar(64) NOT NULL,
-        delta varchar(32) NOT NULL,
-        rid int unsigned NOT NULL,
-        PRIMARY KEY (module, delta, rid)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {sessions} (
-        uid int unsigned NOT NULL,
-        sid varchar(64) NOT NULL default '',
-        hostname varchar(128) NOT NULL default '',
-        timestamp int NOT NULL default '0',
-        cache int NOT NULL default '0',
-        session longtext,
-        KEY uid (uid),
-        PRIMARY KEY (sid),
-        KEY timestamp (timestamp)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {sequences} (
-        name varchar(255) NOT NULL default '',
-        id int unsigned NOT NULL default '0',
-        PRIMARY KEY (name)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {node_counter} (
-        nid int NOT NULL default '0',
-        totalcount bigint unsigned NOT NULL default '0',
-        daycount mediumint unsigned NOT NULL default '0',
-        timestamp int unsigned NOT NULL default '0',
-        PRIMARY KEY (nid)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {system} (
-        filename varchar(255) NOT NULL default '',
-        name varchar(255) NOT NULL default '',
-        type varchar(255) NOT NULL default '',
-        description varchar(255) NOT NULL default '',
-        status int NOT NULL default '0',
-        throttle tinyint DEFAULT '0' NOT NULL,
-        bootstrap int NOT NULL default '0',
-        schema_version smallint NOT NULL default -1,
-        weight int NOT NULL default '0',
-        PRIMARY KEY (filename),
-        KEY (weight)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {term_data} (
-        tid int unsigned NOT NULL auto_increment,
-        vid int unsigned NOT NULL default '0',
-        name varchar(255) NOT NULL default '',
-        description longtext,
-        weight tinyint NOT NULL default '0',
-        PRIMARY KEY (tid),
-        KEY vid (vid)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {term_hierarchy} (
-        tid int unsigned NOT NULL default '0',
-        parent int unsigned NOT NULL default '0',
-        KEY tid (tid),
-        KEY parent (parent),
-        PRIMARY KEY (tid, parent)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {term_node} (
-        nid int unsigned NOT NULL default '0',
-        vid int unsigned NOT NULL default '0',
-        tid int unsigned NOT NULL default '0',
-        KEY nid (nid),
-        KEY vid (vid),
-        KEY tid (tid),
-        PRIMARY KEY (vid,tid,nid)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {term_relation} (
-        tid1 int unsigned NOT NULL default '0',
-        tid2 int unsigned NOT NULL default '0',
-        KEY tid1 (tid1),
-        KEY tid2 (tid2)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {term_synonym} (
-        tid int unsigned NOT NULL default '0',
-        name varchar(255) NOT NULL default '',
-        KEY tid (tid),
-        KEY name (name(3))
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {users} (
-        uid int unsigned NOT NULL default '0',
-        name varchar(60) NOT NULL default '',
-        pass varchar(32) NOT NULL default '',
-        mail varchar(64) default '',
-        mode tinyint NOT NULL default '0',
-        sort tinyint default '0',
-        threshold tinyint default '0',
-        theme varchar(255) NOT NULL default '',
-        signature varchar(255) NOT NULL default '',
-        created int NOT NULL default '0',
-        access int NOT NULL default '0',
-        login int NOT NULL default '0',
-        status tinyint NOT NULL default '0',
-        timezone varchar(8) default NULL,
-        language varchar(12) NOT NULL default '',
-        picture varchar(255) NOT NULL DEFAULT '',
-        init varchar(64) default '',
-        data longtext,
-        PRIMARY KEY (uid),
-        UNIQUE KEY name (name),
-        KEY created (created),
-        KEY access (access)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {users_roles} (
-        uid int unsigned NOT NULL default '0',
-        rid int unsigned NOT NULL default '0',
-        PRIMARY KEY (uid, rid)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {variable} (
-        name varchar(128) NOT NULL default '',
-        value longtext NOT NULL,
-        language varchar(12) NOT NULL default '',
-        PRIMARY KEY (name, language)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {vocabulary} (
-        vid int unsigned NOT NULL auto_increment,
-        name varchar(255) NOT NULL default '',
-        description longtext,
-        help varchar(255) NOT NULL default '',
-        relations tinyint unsigned NOT NULL default '0',
-        hierarchy tinyint unsigned NOT NULL default '0',
-        multiple tinyint unsigned NOT NULL default '0',
-        required tinyint unsigned NOT NULL default '0',
-        tags tinyint unsigned NOT NULL default '0',
-        module varchar(255) NOT NULL default '',
-        weight tinyint NOT NULL default '0',
-        PRIMARY KEY (vid)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      db_query("CREATE TABLE {vocabulary_node_types} (
-        vid int unsigned NOT NULL DEFAULT '0',
-        type varchar(32) NOT NULL DEFAULT '',
-        PRIMARY KEY (vid, type)
-      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
-
-      break;
-    case 'pgsql':
-      /* create unsigned types */
-      db_query("CREATE DOMAIN int_unsigned integer CHECK (VALUE >= 0)");
-      db_query("CREATE DOMAIN smallint_unsigned smallint CHECK (VALUE >= 0)");
-      db_query("CREATE DOMAIN bigint_unsigned bigint CHECK (VALUE >= 0)");
-
-      /* create functions */
-      db_query('CREATE OR REPLACE FUNCTION "greatest"(numeric, numeric) RETURNS numeric AS
-        \'SELECT CASE WHEN (($1 > $2) OR ($2 IS NULL)) THEN $1 ELSE $2 END;\'
-        LANGUAGE \'sql\''
-      );
-      db_query('CREATE OR REPLACE FUNCTION "greatest"(numeric, numeric, numeric) RETURNS numeric AS
-        \'SELECT greatest($1, greatest($2, $3));\'
-        LANGUAGE \'sql\''
-      );
-      if (!db_result(db_query("SELECT COUNT(*) FROM pg_proc WHERE proname = 'rand'"))) {
-        db_query('CREATE OR REPLACE FUNCTION "rand"() RETURNS float AS
-          \'SELECT random();\'
-          LANGUAGE \'sql\''
-        );
-      }
-
-      if (!db_result(db_query("SELECT COUNT(*) FROM pg_proc WHERE proname = 'concat'"))) {
-        db_query('CREATE OR REPLACE FUNCTION "concat"(text, text) RETURNS text AS
-          \'SELECT $1 || $2;\'
-          LANGUAGE \'sql\''
-        );
-      }
-      db_query('CREATE OR REPLACE FUNCTION "if"(boolean, text, text) RETURNS text AS
-        \'SELECT CASE WHEN $1 THEN $2 ELSE $3 END;\'
-        LANGUAGE \'sql\''
-      );
-      db_query('CREATE OR REPLACE FUNCTION "if"(boolean, integer, integer) RETURNS integer AS
-        \'SELECT CASE WHEN $1 THEN $2 ELSE $3 END;\'
-        LANGUAGE \'sql\''
-      );
-
-      /* create tables */
-      db_query("CREATE TABLE {access} (
-        aid serial,
-        mask varchar(255) NOT NULL default '',
-        type varchar(255) NOT NULL default '',
-        status smallint NOT NULL default '0',
-        PRIMARY KEY (aid)
-      )");
-
-      db_query("CREATE TABLE {authmap} (
-        aid serial CHECK (aid >= 0),
-        uid int NOT NULL default '0',
-        authname varchar(128) NOT NULL default '',
-        module varchar(128) NOT NULL default '',
-        PRIMARY KEY (aid),
-        UNIQUE (authname)
-      )");
-
-      db_query("CREATE TABLE {blocks} (
-        module varchar(64) DEFAULT '' NOT NULL,
-        delta varchar(32) NOT NULL default '0',
-        theme varchar(255) NOT NULL default '',
-        status smallint DEFAULT '0' NOT NULL,
-        weight smallint DEFAULT '0' NOT NULL,
-        region varchar(64) DEFAULT 'left' NOT NULL,
-        custom smallint DEFAULT '0' NOT NULL,
-        throttle smallint DEFAULT '0' NOT NULL,
-        visibility smallint DEFAULT '0' NOT NULL,
-        pages text DEFAULT '' NOT NULL,
-        title varchar(64) DEFAULT '' NOT NULL
-      )");
-
-      db_query("CREATE TABLE {boxes} (
-        bid serial,
-        body text,
-        info varchar(128) NOT NULL default '',
-        format smallint NOT NULL default '0',
-        PRIMARY KEY (bid),
-        UNIQUE (info)
-      )");
-
-      db_query("CREATE TABLE {cache} (
-        cid varchar(255) NOT NULL default '',
-        data bytea,
-        expire int NOT NULL default '0',
-        created int NOT NULL default '0',
-        headers text,
-        PRIMARY KEY (cid)
-      )");
-      db_query("CREATE TABLE {cache_filter} (
-        cid varchar(255) NOT NULL default '',
-        data bytea,
-        expire int NOT NULL default '0',
-        created int NOT NULL default '0',
-        headers text,
-        PRIMARY KEY (cid)
-      )");
-      db_query("CREATE TABLE {cache_page} (
-        cid varchar(255) NOT NULL default '',
-        data bytea,
-        expire int NOT NULL default '0',
-        created int NOT NULL default '0',
-        headers text,
-        PRIMARY KEY (cid)
-      )");
-      db_query("CREATE INDEX {cache}_expire_idx ON {cache} (expire)");
-      db_query("CREATE INDEX {cache_filter}_expire_idx ON {cache_filter} (expire)");
-      db_query("CREATE INDEX {cache_page}_expire_idx ON {cache_page} (expire)");
-
-      db_query("CREATE TABLE {comments} (
-        cid serial,
-        pid int NOT NULL default '0',
-        nid int NOT NULL default '0',
-        uid int NOT NULL default '0',
-        subject varchar(64) NOT NULL default '',
-        comment text NOT NULL,
-        hostname varchar(128) NOT NULL default '',
-        timestamp int NOT NULL default '0',
-        score int NOT NULL default '0',
-        status smallint_unsigned NOT NULL default '0',
-        format smallint NOT NULL default '0',
-        thread varchar(255) NOT NULL,
-        users text,
-        name varchar(60) default NULL,
-        mail varchar(64) default NULL,
-        homepage varchar(255) default NULL,
-        PRIMARY KEY (cid)
-      )");
-      db_query("CREATE INDEX {comments}_nid_idx ON {comments} (nid)");
-      db_query("CREATE INDEX {comments}_status_idx ON {comments} (status)");
-
-      db_query("CREATE TABLE {node_comment_statistics} (
-        nid serial CHECK (nid >= 0),
-        last_comment_timestamp int NOT NULL default '0',
-        last_comment_name varchar(60) default NULL,
-        last_comment_uid int NOT NULL default '0',
-        comment_count int_unsigned NOT NULL default '0',
-        PRIMARY KEY (nid)
-      )");
-      db_query("CREATE INDEX {node_comment_statistics}_node_comment_timestamp_idx ON {node_comment_statistics} (last_comment_timestamp)");
-
-      db_query("CREATE TABLE {files} (
-        fid serial CHECK (fid >= 0),
-        nid int_unsigned NOT NULL default 0,
-        filename varchar(255) NOT NULL default '',
-        filepath varchar(255) NOT NULL default '',
-        filemime varchar(255) NOT NULL default '',
-        filesize int_unsigned NOT NULL default 0,
-        PRIMARY KEY (fid)
-      )");
-      db_query("CREATE INDEX {files}_nid_idx ON {files} (nid)");
-
-      db_query("CREATE TABLE {file_revisions} (
-        fid int_unsigned NOT NULL default 0,
-        vid int_unsigned NOT NULL default 0,
-        description varchar(255) NOT NULL default '',
-        list smallint_unsigned NOT NULL default 0,
-        PRIMARY KEY (fid, vid)
-      )");
-      db_query("CREATE INDEX {file_revisions}_vid_idx ON {file_revisions} (vid)");
-
-      db_query("CREATE TABLE {filter_formats} (
-        format serial,
-        name varchar(255) NOT NULL default '',
-        roles varchar(255) NOT NULL default '',
-        cache smallint NOT NULL default '0',
-        PRIMARY KEY (format),
-        UNIQUE (name)
-      )");
-
-      db_query("CREATE TABLE {filters} (
-        format int NOT NULL default '0',
-        module varchar(64) NOT NULL default '',
-        delta smallint DEFAULT '0' NOT NULL,
-        weight smallint DEFAULT '0' NOT NULL
-      )");
-      db_query("CREATE INDEX {filters}_weight_idx ON {filters} (weight)");
-
-      db_query("CREATE TABLE {flood} (
-        event varchar(64) NOT NULL default '',
-        hostname varchar(128) NOT NULL default '',
-        timestamp int NOT NULL default '0'
-      )");
-
-      db_query("CREATE TABLE {history} (
-        uid int NOT NULL default '0',
-        nid int NOT NULL default '0',
-        timestamp int NOT NULL default '0',
-        PRIMARY KEY (uid,nid)
-      )");
-
-      db_query("CREATE TABLE {menu} (
-        mid int NOT NULL default 0,
-        pid int NOT NULL default 0,
-        path varchar(255) NOT NULL default '',
-        load_functions varchar(255) NOT NULL default '',
-        to_arg_functions varchar(255) NOT NULL default '',
-        access_callback varchar(255) NOT NULL default '',
-        access_arguments text,
-        page_callback varchar(255) NOT NULL default '',
-        page_arguments text,
-        fit int NOT NULL default 0,
-        number_parts int NOT NULL default 0,
-        mleft int NOT NULL default 0,
-        mright int NOT NULL default 0,
-        visible int NOT NULL default 0,
-        parents varchar(255) NOT NULL default '',
-        depth int NOT NULL default 0,
-        has_children int NOT NULL default 0,
-        tab int NOT NULL default 0,
-        title varchar(255) NOT NULL default '',
-        parent varchar(255) NOT NULL default '',
-        type int NOT NULL default 0,
-        block_callback varchar(255) NOT NULL default '',
-        description varchar(255) NOT NULL default '',
-        position varchar(255) NOT NULL default '',
-        link_path varchar(255) NOT NULL default '',
-        attributes varchar(255) NOT NULL default '',
-        query varchar(255) NOT NULL default '',
-        fragment varchar(255) NOT NULL default '',
-        absolute INT NOT NULL default 0,
-        html INT NOT NULL default 0,
-        PRIMARY KEY (path)
-      )");
-
-      db_query("CREATE INDEX {menu}_fit_idx ON {menu} (fit)");
-      db_query("CREATE INDEX {menu}_visible_idx ON {menu} (visible)");
-      db_query("CREATE INDEX {menu}_parent_idx ON {menu} (parent)");
-      db_query("CREATE INDEX {menu}_pid_idx ON {menu} (parent)");
-
-      db_query("CREATE TABLE {node} (
-        nid serial CHECK (nid >= 0),
-        vid int_unsigned NOT NULL default '0',
-        type varchar(32) NOT NULL default '',
-        title varchar(128) NOT NULL default '',
-        uid int NOT NULL default '0',
-        status int NOT NULL default '1',
-        created int NOT NULL default '0',
-        changed int NOT NULL default '0',
-        comment int NOT NULL default '0',
-        promote int NOT NULL default '0',
-        moderate int NOT NULL default '0',
-        sticky int NOT NULL default '0',
-        PRIMARY KEY (nid, vid),
-        UNIQUE (vid)
-      )");
-      db_query("CREATE INDEX {node}_node_type_idx ON {node} (substr (type, 1, 4))");
-      db_query("CREATE INDEX {node}_node_title_type_idx ON {node} (title, substr(type, 1, 4))");
-      db_query("CREATE INDEX {node}_status_idx ON {node} (status)");
-      db_query("CREATE INDEX {node}_uid_idx ON {node} (uid)");
-      db_query("CREATE INDEX {node}_node_moderate_idx ON {node} (moderate)");
-      db_query("CREATE INDEX {node}_node_promote_status_idx ON {node} (promote, status)");
-      db_query("CREATE INDEX {node}_node_created_idx ON {node} (created)");
-      db_query("CREATE INDEX {node}_node_changed_idx ON {node} (changed)");
-      db_query("CREATE INDEX {node}_node_status_type_idx ON {node} (status, type, nid)");
-      db_query("CREATE INDEX {node}_nid_idx ON {node} (nid)");
-
-      db_query("CREATE TABLE {node_access} (
-        nid int_unsigned NOT NULL default '0',
-        gid int_unsigned NOT NULL default '0',
-        realm varchar(255) NOT NULL default '',
-        grant_view smallint_unsigned NOT NULL default '0',
-        grant_update smallint_unsigned NOT NULL default '0',
-        grant_delete smallint_unsigned NOT NULL default '0',
-        PRIMARY KEY (nid,gid,realm)
-      )");
-
-      db_query("CREATE TABLE {node_revisions} (
-        nid int_unsigned NOT NULL,
-        vid serial CHECK (vid >= 0),
-        uid int NOT NULL default '0',
-        title varchar(128) NOT NULL default '',
-        body text NOT NULL default '',
-        teaser text NOT NULL default '',
-        log text NOT NULL default '',
-        timestamp int NOT NULL default '0',
-        format int NOT NULL default '0',
-        PRIMARY KEY (vid)
-      )");
-      db_query("CREATE INDEX {node_revisions}_nid_idx ON {node_revisions} (nid)");
-      db_query("CREATE INDEX {node_revisions}_uid_idx ON {node_revisions} (uid)");
-
-      db_query("CREATE TABLE {node_type} (
-        type varchar(32) NOT NULL,
-        name varchar(255) NOT NULL default '',
-        module varchar(255) NOT NULL,
-        description text NOT NULL,
-        help text NOT NULL,
-        has_title smallint_unsigned NOT NULL,
-        title_label varchar(255) NOT NULL default '',
-        has_body smallint_unsigned NOT NULL,
-        body_label varchar(255) NOT NULL default '',
-        min_word_count smallint_unsigned NOT NULL,
-        custom smallint NOT NULL DEFAULT '0',
-        modified smallint NOT NULL DEFAULT '0',
-        locked smallint NOT NULL DEFAULT '0',
-        orig_type varchar(255) NOT NULL default '',
-        PRIMARY KEY (type)
-      )");
-
-      db_query("CREATE TABLE {url_alias} (
-        pid serial CHECK (pid >= 0),
-        src varchar(128) NOT NULL default '',
-        dst varchar(128) NOT NULL default '',
-        language varchar(12) NOT NULL default '',
-        PRIMARY KEY (pid)
-      )");
-      db_query("CREATE INDEX {url_alias}_src_idx ON {url_alias} (src)");
-      db_query("CREATE UNIQUE INDEX {url_alias}_dst_language_idx ON {url_alias} (dst, language)");
-
-      db_query("CREATE TABLE {permission} (
-        rid int_unsigned NOT NULL default '0',
-        perm text,
-        tid int_unsigned NOT NULL default '0'
-      )");
-      db_query("CREATE INDEX {permission}_rid_idx ON {permission} (rid)");
-
-      db_query("CREATE TABLE {role} (
-        rid serial CHECK (rid >= 0),
-        name varchar(64) NOT NULL default '',
-        PRIMARY KEY (rid),
-        UNIQUE (name)
-      )");
-
-      db_query("CREATE TABLE {blocks_roles} (
-        module varchar(64) NOT NULL,
-        delta varchar(32) NOT NULL,
-        rid int_unsigned NOT NULL,
-        PRIMARY KEY (module, delta, rid)
-      )");
-
-      db_query("CREATE TABLE {sessions} (
-        uid int_unsigned NOT NULL,
-        sid varchar(64) NOT NULL default '',
-        hostname varchar(128) NOT NULL default '',
-        timestamp int NOT NULL default '0',
-        cache int NOT NULL default '0',
-        session text,
-        PRIMARY KEY (sid)
-      )");
-      db_query("CREATE INDEX {sessions}_uid_idx ON {sessions} (uid)");
-      db_query("CREATE INDEX {sessions}_timestamp_idx ON {sessions} (timestamp)");
-
-/* Only used for MySQL
-      db_query("CREATE TABLE {sequences} (
-        name varchar(255) NOT NULL default '',
-        id int_unsigned NOT NULL default '0',
-        PRIMARY KEY (name)
-      )"); */
-
-      db_query("CREATE TABLE {node_counter} (
-        nid int NOT NULL default '0',
-        totalcount bigint_unsigned NOT NULL default '0',
-        daycount int_unsigned NOT NULL default '0',
-        timestamp int_unsigned NOT NULL default '0',
-        PRIMARY KEY (nid)
-      )");
-
-      db_query("CREATE TABLE {system} (
-        filename varchar(255) NOT NULL default '',
-        name varchar(255) NOT NULL default '',
-        type varchar(255) NOT NULL default '',
-        description varchar(255) NOT NULL default '',
-        status int NOT NULL default '0',
-        throttle smallint DEFAULT '0' NOT NULL,
-        bootstrap int NOT NULL default '0',
-        schema_version smallint NOT NULL default -1,
-        weight int NOT NULL default '0',
-        PRIMARY KEY (filename)
-      )");
-      db_query("CREATE INDEX {system}_weight_idx ON {system} (weight)");
-
-      db_query("CREATE TABLE {term_data} (
-        tid serial CHECK (tid >= 0),
-        vid int_unsigned NOT NULL default '0',
-        name varchar(255) NOT NULL default '',
-        description text,
-        weight smallint NOT NULL default '0',
-        PRIMARY KEY (tid)
-      )");
-      db_query("CREATE INDEX {term_data}_vid_idx ON {term_data} (vid)");
-
-      db_query("CREATE TABLE {term_hierarchy} (
-        tid int_unsigned NOT NULL default '0',
-        parent int_unsigned NOT NULL default '0',
-        PRIMARY KEY (tid, parent)
-      )");
-      db_query("CREATE INDEX {term_hierarchy}_tid_idx ON {term_hierarchy} (tid)");
-      db_query("CREATE INDEX {term_hierarchy}_parent_idx ON {term_hierarchy} (parent)");
-
-      db_query("CREATE TABLE {term_node} (
-        nid int_unsigned NOT NULL default '0',
-        vid int_unsigned NOT NULL default '0',
-        tid int_unsigned NOT NULL default '0',
-        PRIMARY KEY (tid,nid,vid)
-      )");
-      db_query("CREATE INDEX {term_node}_nid_idx ON {term_node} (nid)");
-      db_query("CREATE INDEX {term_node}_vid_idx ON {term_node} (vid)");
-      db_query("CREATE INDEX {term_node}_tid_idx ON {term_node} (tid)");
-
-      db_query("CREATE TABLE {term_relation} (
-        tid1 int_unsigned NOT NULL default '0',
-        tid2 int_unsigned NOT NULL default '0'
-      )");
-      db_query("CREATE INDEX {term_relation}_tid1_idx ON {term_relation} (tid1)");
-      db_query("CREATE INDEX {term_relation}_tid2_idx ON {term_relation} (tid2)");
-
-      db_query("CREATE TABLE {term_synonym} (
-        tid int_unsigned NOT NULL default '0',
-        name varchar(255) NOT NULL default ''
-      )");
-      db_query("CREATE INDEX {term_synonym}_tid_idx ON {term_synonym} (tid)");
-      db_query("CREATE INDEX {term_synonym}_name_idx ON {term_synonym} (substr(name, 1, 3))");
-
-      db_query("CREATE TABLE {users} (
-        uid serial CHECK (uid >= 0),
-        name varchar(60) NOT NULL default '',
-        pass varchar(32) NOT NULL default '',
-        mail varchar(64) default '',
-        mode smallint NOT NULL default '0',
-        sort smallint default '0',
-        threshold smallint default '0',
-        theme varchar(255) NOT NULL default '',
-        signature varchar(255) NOT NULL default '',
-        created int NOT NULL default '0',
-        access int NOT NULL default '0',
-        login int NOT NULL default '0',
-        status smallint NOT NULL default '0',
-        timezone varchar(8) default NULL,
-        language varchar(12) NOT NULL default '',
-        picture varchar(255) NOT NULL DEFAULT '',
-        init varchar(64) default '',
-        data text,
-        PRIMARY KEY (uid),
-        UNIQUE (name)
-      )");
-      db_query("CREATE INDEX {users}_access_idx ON {users} (access)");
-      db_query("CREATE INDEX {users}_created_idx ON {users} (created)");
-
-      db_query("CREATE TABLE {users_roles} (
-        uid int_unsigned NOT NULL default '0',
-        rid int_unsigned NOT NULL default '0',
-        PRIMARY KEY (uid, rid)
-      )");
-
-      db_query("CREATE TABLE {variable} (
-        name varchar(128) NOT NULL default '',
-        value text NOT NULL,
-        language varchar(12) NOT NULL default '',
-        PRIMARY KEY (name, language)
-      )");
-
-      db_query("CREATE TABLE {vocabulary} (
-        vid serial CHECK (vid >= 0),
-        name varchar(255) NOT NULL default '',
-        description text,
-        help varchar(255) NOT NULL default '',
-        relations smallint_unsigned NOT NULL default '0',
-        hierarchy smallint_unsigned NOT NULL default '0',
-        multiple smallint_unsigned NOT NULL default '0',
-        required smallint_unsigned NOT NULL default '0',
-        tags smallint_unsigned NOT NULL default '0',
-        module varchar(255) NOT NULL default '',
-        weight smallint NOT NULL default '0',
-        PRIMARY KEY (vid)
-      )");
-
-      db_query("CREATE TABLE {vocabulary_node_types} (
-        vid int_unsigned NOT NULL DEFAULT '0',
-        type varchar(32) NOT NULL DEFAULT '',
-        PRIMARY KEY (vid, type)
-      )");
-
-      break;
+  
+  // Create tables
+  $model_ids = array(
+    'access', 'authmap', 'blocks', 'boxes', 'cache', 'cache_filter', 'cache_page', 
+    'comments', 'node_comment_statistics', 'files', 'file_revisions', 'filter_formats', 
+    'filters', 'flood', 'history', 'menu', 'node', 'node_access', 'node_revisions', 'node_type', 
+    'url_alias', 'permission', 'role', 'blocks_roles', 'sessions', 'sequences', 'node_counter', 
+    'system', 'term_data', 'term_hierarchy', 'term_node', 'term_relation', 'term_synonym', 
+    'users', 'users_roles', 'variable', 'vocabulary', 'vocabulary_node_types'
+  );
+  
+  foreach ($model_ids as $model_id) {
+    db_process_model($model_id);
   }
-
+  
+  
   db_query("INSERT INTO {system} (filename, name, type, description, status, throttle, bootstrap, schema_version) VALUES ('themes/engines/phptemplate/phptemplate.engine', 'phptemplate', 'theme_engine', '', 1, 0, 0, 0)");
   db_query("INSERT INTO {system} (filename, name, type, description, status, throttle, bootstrap, schema_version) VALUES ('themes/garland/page.tpl.php', 'garland', 'theme', 'themes/engines/phptemplate/phptemplate.engine', 1, 0, 0, 0)");
