diff --git a/includes/install.pgsql.inc b/includes/install.pgsql.inc new file mode 100644 index 0000000000000000000000000000000000000000..cc9da399853e6571f404acbe97db6318b3cac248 --- /dev/null +++ b/includes/install.pgsql.inc @@ -0,0 +1,134 @@ +<?php +// $Id$ + +// PostgreSQL specific install functions + +/** + * Check if PostgreSQL is available. + * + * @return + * TRUE/FALSE + */ +function pgsql_is_available() { + return function_exists('pg_connect'); +} + +/** + * Check if we can connect to PostgreSQL. + * + * @return + * TRUE/FALSE + */ +function drupal_test_pgsql($url, &$success) { + if (!pgsql_is_available()) { + drupal_set_message('PHP PostgreSQL support not enabled.', 'error'); + return FALSE; + } + + $url = parse_url($url); + + // Decode url-encoded information in the db connection string. + $url['user'] = urldecode($url['user']); + $url['pass'] = urldecode($url['pass']); + $url['host'] = urldecode($url['host']); + $url['path'] = urldecode($url['path']); + + // Build pgsql connection string and allow for non-standard PostgreSQL port. + $conn_string = ' user='. $url['user'] .' dbname='. substr($url['path'], 1) .' password='. $url['pass'] . ' host=' . $url['host']; + $conn_string .= isset($url['port']) ? ' port=' . $url['port'] : ''; + + // Test connecting to the database. + $connection = @pg_connect($conn_string); + if (!$connection) { + drupal_set_message(st('Failure to connect to your PostgreSQL database server. PostgreSQL reports the following message: %error.<ul><li>Are you sure you have the correct username and password?</li><li>Are you sure that you have typed the correct database hostname?</li><li>Are you sure that the database server is running?</li><li>Are you sure you typed the correct database name?</li></ul>For more help, see the <a href="http://drupal.org/node/258">Installation and upgrading handbook</a>. If you are unsure what these terms mean you should probably contact your hosting provider.', array('%error' => 'Connection failed. See log file for failure reason')), 'error'); + return FALSE; + } + + $success = array('CONNECT'); + + // Test CREATE. + $query = 'CREATE TABLE drupal_install_test (id integer NOT NULL)'; + $result = pg_query($connection, $query); + if ($error = pg_result_error($result)) { + drupal_set_message(st('We were unable to create a test table on your PostgreSQL database server with the command %query. PostgreSQL reports the following message: %error.<ul><li>Are you sure the configured username has the necessary PostgreSQL permissions to create tables in the database?</li></ul>For more help, see the <a href="http://drupal.org/node/258">Installation and upgrading handbook</a>. If you are unsure what these terms mean you should probably contact your hosting provider.', array('%query' => $query, '%error' => $error)), 'error'); + return FALSE; + } + $err = FALSE; + $success[] = 'SELECT'; + $success[] = 'CREATE'; + + // Test INSERT. + $query = 'INSERT INTO drupal_install_test (id) VALUES (1)'; + $result = pg_query($connection, $query); + if ($error = pg_result_error($result)) { + drupal_set_message(st('We were unable to insert a value into a test table on your PostgreSQL database server. We tried inserting a value with the command %query and PostgreSQL reported the following error: %error.', array('%query' => $query, '%error' => $error)), 'error'); + $err = TRUE; + } + else { + $success[] = 'INSERT'; + } + + // Test UPDATE. + $query = 'UPDATE drupal_install_test SET id = 2'; + $result = pg_query($connection, $query); + if ($error = pg_result_error($result)) { + drupal_set_message(st('We were unable to update a value in a test table on your PostgreSQL database server. We tried updating a value with the command %query and PostgreSQL reported the following error: %error.', array('%query' => $query, '%error' => $error)), 'error'); + $err = TRUE; + } + else { + $success[] = 'UPDATE'; + } + + // Test LOCK. + $query = 'BEGIN; LOCK drupal_install_test IN SHARE ROW EXCLUSIVE MODE'; + $result = pg_query($connection, $query); + if ($error = pg_result_error($result)) { + drupal_set_message(st('We were unable to lock a test table on your PostgreSQL database server. We tried locking a table with the command %query and PostgreSQL reported the following error: %error.', array('%query' => $query, '%error' => $error)), 'error'); + $err = TRUE; + } + else { + $success[] = 'LOCK'; + } + + // Test UNLOCK, which is done automatically upon transaction end in PostgreSQL + $query = 'COMMIT'; + $result = pg_query($connection, $query); + if ($error = pg_result_error()) { + drupal_set_message(st('We were unable to unlock a test table on your PostgreSQL database server. We tried unlocking a table with the command %query and PostgreSQL reported the following error: %error.', array('%query' => $query, '%error' => $error)), 'error'); + $err = TRUE; + } + else { + $success[] = 'UNLOCK'; + } + + // Test DELETE. + $query = 'DELETE FROM drupal_install_test'; + $result = pg_query($connection, $query); + if ($error = pg_result_error()) { + drupal_set_message(st('We were unable to delete a value from a test table on your PostgreSQL database server. We tried deleting a value with the command %query and PostgreSQL reported the following error: %error.', array('%query' => $query, '%error' => $error)), 'error'); + $err = TRUE; + } + else { + $success[] = 'DELETE'; + } + + // Test DROP. + $query = 'DROP TABLE drupal_install_test'; + $result = pg_query($connection, $query); + if ($error = pg_result_error()) { + drupal_set_message(st('We were unable to drop a test table from your PostgreSQL database server. We tried dropping a table with the command %query and PostgreSQL reported the following error %error.', array('%query' => $query, '%error' => $error)), 'error'); + $err = TRUE; + } + else { + $success[] = 'DROP'; + } + + if ($err) { + return FALSE; + } + + pg_close($connection); + return TRUE; +} + +?> diff --git a/modules/aggregator/aggregator.install b/modules/aggregator/aggregator.install index 9c9b52f1abc01714903c88e035fb3aba3eab744e..5d042cc023ecc999eaadce03ed033809a45902b6 100644 --- a/modules/aggregator/aggregator.install +++ b/modules/aggregator/aggregator.install @@ -55,6 +55,58 @@ function aggregator_install() { PRIMARY KEY (iid) ) /*!40100 DEFAULT CHARACTER SET UTF8 */ "); + break; + case 'pgsql': + db_query("CREATE TABLE {aggregator_category} ( + cid serial, + title varchar(255) NOT NULL default '', + description text NOT NULL, + block smallint NOT NULL default '0', + PRIMARY KEY (cid), + UNIQUE (title) + )"); + + db_query("CREATE TABLE {aggregator_category_feed} ( + fid int NOT NULL default '0', + cid int NOT NULL default '0', + PRIMARY KEY (fid,cid) + )"); + + db_query("CREATE TABLE {aggregator_category_item} ( + iid int NOT NULL default '0', + cid int NOT NULL default '0', + PRIMARY KEY (iid,cid) + )"); + + db_query("CREATE TABLE {aggregator_feed} ( + fid serial, + title varchar(255) NOT NULL default '', + url varchar(255) NOT NULL default '', + refresh int NOT NULL default '0', + checked int NOT NULL default '0', + link varchar(255) NOT NULL default '', + description text NOT NULL, + image text NOT NULL, + etag varchar(255) NOT NULL default '', + modified int NOT NULL default '0', + block smallint NOT NULL default '0', + PRIMARY KEY (fid), + UNIQUE (url), + UNIQUE (title) + )"); + + db_query("CREATE TABLE {aggregator_item} ( + iid serial, + fid int NOT NULL default '0', + title varchar(255) NOT NULL default '', + link varchar(255) NOT NULL default '', + author varchar(255) NOT NULL default '', + description text NOT NULL, + timestamp int default NULL, + guid varchar(255), + PRIMARY KEY (iid) + )"); + break; } } diff --git a/modules/book/book.install b/modules/book/book.install index cfc2975550944e3f31f4ae23b7580b808175f806..377d219adcdb569bab34d895208cc7abaad2b792 100644 --- a/modules/book/book.install +++ b/modules/book/book.install @@ -14,5 +14,17 @@ function book_install() { KEY nid (nid), KEY parent (parent) ) /*!40100 DEFAULT CHARACTER SET UTF8 */ "); + break; + case 'pgsql': + db_query("CREATE TABLE {book} ( + vid uint NOT NULL default '0', + nid uint NOT NULL default '0', + parent int NOT NULL default '0', + weight smallint NOT NULL default '0', + PRIMARY KEY (vid) + )"); + db_query("CREATE INDEX {book}_nid_idx ON {book} (nid)"); + db_query("CREATE INDEX {book}_parent_idx ON {book} (parent)"); + break; } -} \ No newline at end of file +} diff --git a/modules/contact/contact.install b/modules/contact/contact.install index 14e3c737d319d4769c1c14dd96cc0e38c4f85749..60816763186f27c606344d8936a3fea998899a5b 100644 --- a/modules/contact/contact.install +++ b/modules/contact/contact.install @@ -15,5 +15,18 @@ function contact_install() { PRIMARY KEY (cid), UNIQUE KEY category (category) ) /*!40100 DEFAULT CHARACTER SET UTF8 */ "); + break; + case 'pgsql': + db_query("CREATE TABLE {contact} ( + cid serial CHECK (cid >= 0), + category varchar(255) NOT NULL default '', + recipients text NOT NULL default '', + reply text NOT NULL default '', + weight smallint NOT NULL default '0', + selected smallint NOT NULL default '0', + PRIMARY KEY (cid), + UNIQUE (category) + )"); + break; } -} \ No newline at end of file +} diff --git a/modules/drupal/drupal.install b/modules/drupal/drupal.install index b1b418571909fdef2c8e8ba92197b17cd247a76c..50012e145f6c12bf4147f957797a8f4a4b820a8a 100644 --- a/modules/drupal/drupal.install +++ b/modules/drupal/drupal.install @@ -26,5 +26,29 @@ function drupal_install() { type varchar(255) NOT NULL default '', PRIMARY KEY (cid,name) ) /*!40100 DEFAULT CHARACTER SET UTF8 */ "); + break; + case 'pgsql': + db_query("CREATE TABLE {client} ( + cid serial CHECK (cid >= 0), + link varchar(255) NOT NULL default '', + name varchar(128) NOT NULL default '', + mail varchar(128) NOT NULL default '', + slogan text NOT NULL, + mission text NOT NULL, + users int NOT NULL default '0', + nodes int NOT NULL default '0', + version varchar(35) NOT NULL default'', + created int NOT NULL default '0', + changed int NOT NULL default '0', + PRIMARY KEY (cid) + )"); + + db_query("CREATE TABLE {client_system} ( + cid int NOT NULL default '0', + name varchar(255) NOT NULL default '', + type varchar(255) NOT NULL default '', + PRIMARY KEY (cid,name) + )"); + break; } -} \ No newline at end of file +} diff --git a/modules/forum/forum.install b/modules/forum/forum.install index 9d7d80c21e919df4522322e303b0ff6c83eb645b..c11eee1082ce1642ad6007e7db2eb832401f8023 100644 --- a/modules/forum/forum.install +++ b/modules/forum/forum.install @@ -13,5 +13,16 @@ function forum_install() { KEY nid (nid), KEY tid (tid) ) /*!40100 DEFAULT CHARACTER SET UTF8 */ "); + break; + case 'pgsql': + db_query("CREATE TABLE {forum} ( + nid uint NOT NULL default '0', + vid uint NOT NULL default '0', + tid uint NOT NULL default '0', + PRIMARY KEY (vid) + )"); + db_query("CREATE INDEX {forum}_nid_idx ON {forum} (nid)"); + db_query("CREATE INDEX {forum}_tid_idx ON {forum} (tid)"); + break; } -} \ No newline at end of file +} diff --git a/modules/locale/locale.install b/modules/locale/locale.install index 08bcbc5bcfb75cec557b13cd6a3c85466b653b38..99192be0db74329c0e8982cd299a76b28ca73657 100644 --- a/modules/locale/locale.install +++ b/modules/locale/locale.install @@ -33,6 +33,37 @@ function locale_install() { KEY plid (plid), KEY plural (plural) ) /*!40100 DEFAULT CHARACTER SET UTF8 */ "); + break; + case 'pgsql': + db_query("CREATE TABLE {locales_meta} ( + locale varchar(12) NOT NULL default '', + name varchar(64) NOT NULL default '', + enabled int NOT NULL default '0', + isdefault int NOT NULL default '0', + plurals int NOT NULL default '0', + formula varchar(128) NOT NULL default '', + PRIMARY KEY (locale) + )"); + + db_query("CREATE TABLE {locales_source} ( + lid serial, + location varchar(255) NOT NULL default '', + source bytea NOT NULL, + PRIMARY KEY (lid) + )"); + + db_query("CREATE TABLE {locales_target} ( + lid int NOT NULL default '0', + translation bytea NOT NULL, + locale varchar(12) NOT NULL default '', + plid int NOT NULL default '0', + plural int NOT NULL default '0' + )"); + db_query("CREATE INDEX {locales_target}_lid_idx ON {locales_target} (lid)"); + db_query("CREATE INDEX {locales_target}_locale_idx ON {locales_target} (locale)"); + db_query("CREATE INDEX {locales_target}_plid_idx ON {locales_target} (plid)"); + db_query("CREATE INDEX {locales_target}_plural_idx ON {locales_target} (plural)"); + break; } db_query("INSERT INTO {locales_meta} (locale, name, enabled, isdefault) VALUES ('en', 'English', '1', '1')"); } diff --git a/modules/poll/poll.install b/modules/poll/poll.install index 8c8feaef8994c07babcb42e4e90c544255231105..f05958cca2fe4c76f7f49287f673e94cc425a998 100644 --- a/modules/poll/poll.install +++ b/modules/poll/poll.install @@ -31,5 +31,33 @@ function poll_install() { PRIMARY KEY (chid), KEY nid (nid) ) /*!40100 DEFAULT CHARACTER SET UTF8 */ "); + case 'pgsql': + db_query("CREATE TABLE {poll} ( + nid uint NOT NULL default '0', + runtime int NOT NULL default '0', + active uint NOT NULL default '0', + PRIMARY KEY (nid) + )"); + + db_query("CREATE TABLE {poll_votes} ( + nid uint NOT NULL, + uid uint NOT NULL default 0, + chorder int NOT NULL default -1, + hostname varchar(128) NOT NULL default '' + )"); + db_query("CREATE INDEX {poll_votes}_nid_idx ON {poll_votes} (nid)"); + db_query("CREATE INDEX {poll_votes}_uid_idx ON {poll_votes} (uid)"); + db_query("CREATE INDEX {poll_votes}_hostname_idx ON {poll_votes} (hostname)"); + + db_query("CREATE TABLE {poll_choices} ( + chid serial CHECK (chid >= 0), + nid uint NOT NULL default '0', + chtext varchar(128) NOT NULL default '', + chvotes int NOT NULL default '0', + chorder int NOT NULL default '0', + PRIMARY KEY (chid) + )"); + db_query("CREATE INDEX {poll_choices}_nid_idx ON {poll_choices} (nid)"); + break; } } diff --git a/modules/profile/profile.install b/modules/profile/profile.install index 2aa4e46cbdcb4bf2516510af0731df2d31dd1d90..555c0f109eefe53e350f5b2e22ad613bc7ef0859 100644 --- a/modules/profile/profile.install +++ b/modules/profile/profile.install @@ -31,5 +31,33 @@ function profile_install() { KEY uid (uid), KEY fid (fid) ) /*!40100 DEFAULT CHARACTER SET UTF8 */ "); + case 'pgsql': + db_query("CREATE TABLE {profile_fields} ( + fid serial, + title varchar(255) default NULL, + name varchar(128) default NULL, + explanation TEXT default NULL, + category varchar(255) default NULL, + page varchar(255) default NULL, + type varchar(128) default NULL, + weight smallint DEFAULT '0' NOT NULL, + required smallint DEFAULT '0' NOT NULL, + register smallint DEFAULT '0' NOT NULL, + visibility smallint DEFAULT '0' NOT NULL, + autocomplete smallint DEFAULT '0' NOT NULL, + options text, + UNIQUE (name), + PRIMARY KEY (fid) + )"); + db_query("CREATE INDEX {profile_fields}_category_idx ON {profile_fields} (category)"); + + db_query("CREATE TABLE {profile_values} ( + fid uint default '0', + uid uint default '0', + value text + )"); + db_query("CREATE INDEX {profile_values}_uid_idx ON {profile_values} (uid)"); + db_query("CREATE INDEX {profile_values}_fid_idx ON {profile_values} (fid)"); + break; } -} \ No newline at end of file +} diff --git a/modules/search/search.install b/modules/search/search.install index d6ab2fb2b1b1adc8905c13841b94958e5cf0110d..eddde85d49b1860363c875471fdcee91e2f6424b 100644 --- a/modules/search/search.install +++ b/modules/search/search.install @@ -29,5 +29,32 @@ function search_install() { count float default NULL, PRIMARY KEY (word) ) /*!40100 DEFAULT CHARACTER SET UTF8 */ "); + break; + case 'pgsql': + db_query("CREATE TABLE {search_dataset} ( + sid uint NOT NULL default '0', + type varchar(16) default NULL, + data text NOT NULL + )"); + db_query("CREATE INDEX {search_dataset}_sid_type_idx ON {search_dataset} (sid, type)"); + + db_query("CREATE TABLE {search_index} ( + word varchar(50) NOT NULL default '', + sid uint NOT NULL default '0', + type varchar(16) default NULL, + fromsid uint NOT NULL default '0', + fromtype varchar(16) default NULL, + score float default NULL + )"); + db_query("CREATE INDEX {search_index}_sid_type_idx ON {search_index} (sid, type)"); + db_query("CREATE INDEX {search_index}_from_sid_type_idx ON {search_index} (fromsid, fromtype)"); + db_query("CREATE INDEX {search_index}_word_idx ON {search_index} (word)"); + + db_query("CREATE TABLE {search_total} ( + word varchar(50) NOT NULL default '', + count float default NULL, + PRIMARY KEY (word) + )"); + break; } -} \ No newline at end of file +} diff --git a/modules/statistics/statistics.install b/modules/statistics/statistics.install index 2d48993003e29b16d45b7a71dc883a2c6565ebe0..2517d88199f725ad1b4c82009783d35f08393e67 100644 --- a/modules/statistics/statistics.install +++ b/modules/statistics/statistics.install @@ -18,5 +18,21 @@ function statistics_install() { KEY accesslog_timestamp (timestamp), PRIMARY KEY (aid) ) /*!40100 DEFAULT CHARACTER SET UTF8 */ "); + break; + case 'pgsql': + db_query("CREATE TABLE {accesslog} ( + aid serial, + sid varchar(32) NOT NULL default '', + title varchar(255) default NULL, + path varchar(255) default NULL, + url varchar(255) default NULL, + hostname varchar(128) default NULL, + uid uint default '0', + timer uint NOT NULL default '0', + timestamp uint NOT NULL default '0', + PRIMARY KEY (aid) + )"); + db_query("CREATE INDEX {accesslog}_accesslog_timestamp_idx ON {accesslog} (timestamp)"); + break; } -} \ No newline at end of file +} diff --git a/modules/system/system.install b/modules/system/system.install index ba23868f14f13895e142fa057ebcd0a6053349a2..7ff587f53a8549a75fabb66bba2bdfb11aa81b5d 100644 --- a/modules/system/system.install +++ b/modules/system/system.install @@ -384,9 +384,393 @@ function system_install() { break; case 'pgsql': - break; + /* create unsigned types */ + db_query("CREATE DOMAIN uint integer CHECK (VALUE >= 0)"); + db_query("CREATE DOMAIN smalluint smallint CHECK (VALUE >= 0)"); + db_query("CREATE DOMAIN biguint bigint CHECK (VALUE >= 0)"); + + 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 + )"); + + db_query("CREATE TABLE {boxes} ( + bid serial, + title varchar(64) NOT NULL default '', + 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 INDEX {cache}_expire_idx ON {cache} (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 smalluint 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 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 uint 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 uint NOT NULL default 0, + nid uint NOT NULL default 0, + filename varchar(255) NOT NULL default '', + filepath varchar(255) NOT NULL default '', + filemime varchar(255) NOT NULL default '', + filesize uint NOT NULL default 0, + PRIMARY KEY (fid) + )"); + + db_query("CREATE TABLE {file_revisions} ( + fid uint NOT NULL default 0, + vid uint NOT NULL default 0, + description varchar(255) NOT NULL default '', + list smalluint NOT NULL default 0, + PRIMARY KEY (fid, 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 serial CHECK (mid >= 0), + pid uint NOT NULL default '0', + path varchar(255) NOT NULL default '', + title varchar(255) NOT NULL default '', + description varchar(255) NOT NULL default '', + weight smallint NOT NULL default '0', + type uint NOT NULL default '0', + PRIMARY KEY (mid) + )"); + db_query("ALTER SEQUENCE {menu}_mid_seq MINVALUE 2 RESTART 2"); + + db_query("CREATE TABLE {node} ( + nid serial CHECK (nid >= 0), + vid uint 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 uint NOT NULL default '0', + gid uint NOT NULL default '0', + realm varchar(255) NOT NULL default '', + grant_view smalluint NOT NULL default '0', + grant_update smalluint NOT NULL default '0', + grant_delete smalluint NOT NULL default '0', + PRIMARY KEY (nid,gid,realm) + )"); + + db_query("CREATE TABLE {node_revisions} ( + nid uint NOT NULL, + vid uint NOT NULL, + 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 SEQUENCE {node_revisions}_vid_seq INCREMENT 1 START 1"); + + db_query("CREATE TABLE {url_alias} ( + pid serial CHECK (pid >= 0), + src varchar(128) NOT NULL default '', + dst varchar(128) NOT NULL default '', + PRIMARY KEY (pid), + UNIQUE (dst) + )"); + db_query("CREATE INDEX {url_alias}_src_idx ON {url_alias} (src)"); + + db_query("CREATE TABLE {permission} ( + rid uint NOT NULL default '0', + perm text, + tid uint 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(32) 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 uint NOT NULL, + PRIMARY KEY (module, delta, rid) + )"); + + db_query("CREATE TABLE {sessions} ( + uid uint NOT NULL, + sid varchar(32) 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 uint NOT NULL default '0', + PRIMARY KEY (name) + )"); */ + + db_query("CREATE TABLE {node_counter} ( + nid int NOT NULL default '0', + totalcount biguint NOT NULL default '0', + daycount uint NOT NULL default '0', + timestamp uint NOT NULL default '0', + PRIMARY KEY (nid) + )"); + db_query("CREATE INDEX {node_counter}_totalcount_idx ON {node_counter} (totalcount)"); + db_query("CREATE INDEX {node_counter}_daycount_idx ON {node_counter} (daycount)"); + db_query("CREATE INDEX {node_counter}_timestamp_idx ON {node_counter} (timestamp)"); + + 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 uint 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 uint NOT NULL default '0', + parent uint 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 uint NOT NULL default '0', + tid uint NOT NULL default '0', + PRIMARY KEY (tid,nid) + )"); + db_query("CREATE INDEX {term_node}_nid_idx ON {term_node} (nid)"); + db_query("CREATE INDEX {term_node}_tid_idx ON {term_node} (tid)"); + + db_query("CREATE TABLE {term_relation} ( + tid1 uint NOT NULL default '0', + tid2 uint 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 uint 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 uint NOT NULL default '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 SEQUENCE {users}_uid_seq INCREMENT 1 START 1"); + + db_query("CREATE TABLE {users_roles} ( + uid uint NOT NULL default '0', + rid uint NOT NULL default '0', + PRIMARY KEY (uid, rid) + )"); + + db_query("CREATE TABLE {variable} ( + name varchar(48) NOT NULL default '', + value text NOT NULL, + PRIMARY KEY (name) + )"); + + 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 smalluint NOT NULL default '0', + hierarchy smalluint NOT NULL default '0', + multiple smalluint NOT NULL default '0', + required smalluint NOT NULL default '0', + tags smalluint 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 uint NOT NULL DEFAULT '0', + type varchar(32) NOT NULL DEFAULT '', + PRIMARY KEY (vid, type) + )"); + + db_query("CREATE TABLE {watchdog} ( + wid serial, + uid int NOT NULL default '0', + type varchar(16) NOT NULL default '', + message text NOT NULL, + severity smalluint NOT NULL default '0', + link varchar(255) NOT NULL default '', + location varchar(128) NOT NULL default '', + referer varchar(128) NOT NULL default '', + hostname varchar(128) NOT NULL default '', + timestamp int NOT NULL default '0', + PRIMARY KEY (wid) + )"); + break; } + 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/bluemarine/page.tpl.php', 'bluemarine', 'theme', 'themes/engines/phptemplate/phptemplate.engine', 1, 0, 0, 0)");