Commit 3c604109 authored by Dries's avatar Dries
Browse files

- Patch #7498 by nereocystis: PostgreSQL updates for HEAD

parent d8bbdcbe
...@@ -86,17 +86,75 @@ CREATE TABLE boxes ( ...@@ -86,17 +86,75 @@ CREATE TABLE boxes (
); );
-- --
-- Table structure for bundle -- Table structure for table 'aggregator_category'
-- --
CREATE TABLE bundle ( CREATE TABLE aggregator_category (
bid SERIAL, cid serial,
title varchar(255) NOT NULL default '', title varchar(255) NOT NULL default '',
attributes varchar(255) NOT NULL default '', description text NOT NULL,
PRIMARY KEY (bid), block smallint NOT NULL default '0',
PRIMARY KEY (cid),
UNIQUE (title)
);
--
-- Table structure for table 'aggregator_category_feed'
--
CREATE TABLE aggregator_category_feed (
fid integer NOT NULL default '0',
cid integer NOT NULL default '0',
PRIMARY KEY (fid,cid)
);
--
-- Table structure for table 'aggregator_category_item'
--
CREATE TABLE aggregator_category_item (
iid integer NOT NULL default '0',
cid integer NOT NULL default '0',
PRIMARY KEY (iid,cid)
);
--
-- Table structure for table 'aggregator_feed'
--
CREATE TABLE aggregator_feed (
fid serial,
title varchar(255) NOT NULL default '',
url varchar(255) NOT NULL default '',
refresh integer NOT NULL default '0',
checked integer 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 integer NOT NULL default '0',
block smallint NOT NULL default '0',
PRIMARY KEY (fid),
UNIQUE (url),
UNIQUE (title) UNIQUE (title)
); );
--
-- Table structure for table 'aggregator_item'
--
CREATE TABLE aggregator_item (
iid integer NOT NULL auto_increment,
fid integer 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 integer default NULL,
PRIMARY KEY (iid)
);
-- --
-- Table structure for cache -- Table structure for cache
-- --
...@@ -145,27 +203,6 @@ CREATE TABLE directory ( ...@@ -145,27 +203,6 @@ CREATE TABLE directory (
PRIMARY KEY (link) PRIMARY KEY (link)
); );
--
-- Table structure for feed
--
CREATE TABLE feed (
fid SERIAL,
title varchar(255) NOT NULL default '',
url varchar(255) NOT NULL default '',
refresh integer NOT NULL default '0',
checked integer NOT NULL default '0',
attributes varchar(255) NOT NULL default '',
link varchar(255) NOT NULL default '',
description text NOT NULL default '',
image text NOT NULL default '',
etag varchar(255) NOT NULL default '',
modified integer NOT NULL default '0',
PRIMARY KEY (fid),
UNIQUE (title),
UNIQUE (url)
);
-- --
-- Table structure for table 'filters' -- Table structure for table 'filters'
-- --
...@@ -199,22 +236,6 @@ CREATE TABLE history ( ...@@ -199,22 +236,6 @@ CREATE TABLE history (
PRIMARY KEY (uid,nid) PRIMARY KEY (uid,nid)
); );
--
-- Table structure for item
--
CREATE TABLE item (
iid SERIAL,
fid integer 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 default '',
timestamp integer NOT NULL default '0',
attributes varchar(255) NOT NULL default '',
PRIMARY KEY (iid)
);
-- --
-- Table structure for locales -- Table structure for locales
-- --
...@@ -234,6 +255,21 @@ CREATE TABLE locales ( ...@@ -234,6 +255,21 @@ CREATE TABLE locales (
PRIMARY KEY (lid) PRIMARY KEY (lid)
); );
--
-- Table structure for table 'menu'
--
CREATE TABLE menu (
mid integer NOT NULL default '0',
pid integer NOT NULL default '0',
path varchar(255) NOT NULL default '',
title varchar(255) NOT NULL default '',
weight smallint NOT NULL default '0',
visibility smallint NOT NULL default '0',
status smallint NOT NULL default '0',
PRIMARY KEY (mid)
);
-- --
-- Table structure for table 'moderation_filters' -- Table structure for table 'moderation_filters'
-- --
...@@ -331,6 +367,35 @@ CREATE INDEX page_nid_idx ON page(nid); ...@@ -331,6 +367,35 @@ CREATE INDEX page_nid_idx ON page(nid);
-- Table structure for table 'url_alias' -- Table structure for table 'url_alias'
-- --
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,
overview smallint DEFAULT '0' NOT NULL,
options text,
UNIQUE (name),
PRIMARY KEY (fid)
);
CREATE INDEX profile_fields_category ON profile_fields (category);
--
-- Table structure for table 'profile_values'
--
CREATE TABLE profile_values (
fid integer default '0',
uid integer default '0',
value text
);
CREATE INDEX profile_values_uid ON profile_values (uid);
CREATE INDEX profile_values_fid ON profile_values (fid);
CREATE TABLE url_alias ( CREATE TABLE url_alias (
pid serial, pid serial,
dst varchar(128) NOT NULL default '', dst varchar(128) NOT NULL default '',
......
...@@ -772,42 +772,17 @@ function update_79() { ...@@ -772,42 +772,17 @@ function update_79() {
function update_80() { function update_80() {
// Add a 'created' field to the users table:
$ret[] = update_sql('ALTER TABLE {users} ADD created INT(11) NOT NULL');
$ret[] = update_sql('ALTER TABLE {users} CHANGE timestamp changed INT(11) NOT NULL');
// Add some indices to speed up the update process:
$ret[] = update_sql('ALTER TABLE {comments} ADD index (timestamp)');
$ret[] = update_sql('ALTER TABLE {node} ADD index (created)');
// Assign everyone a created timestamp to begin with:
$ret[] = update_sql("UPDATE {users} SET created = changed WHERE created = ''");
// Print a status message:"
print '<p>Note: this might take a while ...</p>';
// Try updating the user records using the comment table:
$result = db_query('SELECT DISTINCT(u.uid) FROM {comments} c LEFT JOIN {users} u ON c.uid = u.uid WHERE c.timestamp < u.created');
while ($account = db_fetch_object($result)) {
// Retrieve the proper timestamp:
$timestamp = db_result(db_query('SELECT MIN(timestamp) FROM {comments} WHERE uid = %d', $account->uid));
// Update this user record as well as older records with an older timestamp: if ($GLOBALS["db_type"] == "mysql") {
db_query('UPDATE {users} SET created = %d WHERE created > %d AND uid <= %d', $timestamp, $timestamp, $account->uid); // Add a 'created' field to the users table:
} $ret[] = update_sql('ALTER TABLE {users} ADD created INT(11) NOT NULL');
$ret[] = update_sql('ALTER TABLE {users} CHANGE timestamp changed INT(11) NOT NULL');
// Try updating the user records using the node table:
$result = db_query('SELECT DISTINCT(u.uid) FROM {node} n LEFT JOIN {users} u ON n.uid = u.uid WHERE n.created < u.created');
while ($account = db_fetch_object($result)) {
// Retrieve the proper timestamp:
$timestamp = db_result(db_query('SELECT MIN(created) FROM {node} WHERE uid = %d', $account->uid));
// Update this user record as well as older records with an older timestamp:
db_query('UPDATE {users} SET created = %d WHERE created > %d AND uid <= %d', $timestamp, $timestamp, $account->uid);
}
// Add profile module related tables: // Add profile module related tables:
$ret[] = update_sql("CREATE TABLE {profile_fields} ( $ret[] = update_sql("CREATE TABLE {profile_fields} (
fid int(10) NOT NULL auto_increment, fid int(10) NOT NULL auto_increment,
title varchar(255) default NULL, title varchar(255) default NULL,
name varchar(128) default NULL, name varchar(128) default NULL,
...@@ -822,84 +797,175 @@ function update_80() { ...@@ -822,84 +797,175 @@ function update_80() {
PRIMARY KEY (fid) PRIMARY KEY (fid)
);"); );");
$ret[] = update_sql("CREATE TABLE {profile_values} ( $ret[] = update_sql("CREATE TABLE {profile_values} (
fid int(11) unsigned default '0', fid int(11) unsigned default '0',
uid int(11) unsigned default '0', uid int(11) unsigned default '0',
value text, value text,
KEY uid (uid), KEY uid (uid),
KEY fid (fid) KEY fid (fid)
);"); );");
// Add some indices to speed up the update process:
$ret[] = update_sql('ALTER TABLE {comments} ADD index (timestamp)');
$ret[] = update_sql('ALTER TABLE {node} ADD index (created)');
// Assign everyone a created timestamp to begin with:
$ret[] = update_sql("UPDATE {users} SET created = changed WHERE created = ''");
}
else {// pgsql
$ret[] = update_sql('ALTER TABLE {users} RENAME timestamp TO changed');
$ret[] = update_sql('ALTER TABLE {users} ADD created integer');
$ret[] = update_sql('UPDATE {users} SET created = 0');
$ret[] = update_sql('ALTER TABLE {users} ALTER COLUMN created SET NOT NULL');
$ret[] = update_sql('ALTER TABLE {users} ALTER COLUMN created SET DEFAULT 0');
// Add profile module related tables:
$ret[] = update_sql("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,
type varchar(128) default NULL,
weight smallint DEFAULT '0' NOT NULL,
overview smallint DEFAULT '0' NOT NULL,
options text,
UNIQUE (name),
PRIMARY KEY (fid)
);");
$ret[] = update_sql("CREATE INDEX profile_fields_category ON {profile_fields} (category);");
$ret[] = update_sql("CREATE TABLE {profile_values} (
fid integer default '0',
uid integer default '0',
value text
);");
$ret[] = update_sql("CREATE INDEX profile_values_uid ON profile_values (uid);");
$ret[] = update_sql("CREATE INDEX profile_values_fid ON profile_values (fid);");
// Add some indices to speed up the update process:
$ret[] = update_sql('CREATE INDEX comments_timestamp ON {comments} (timestamp)');
$ret[] = update_sql('CREATE INDEX node_created on {node} (created)');
// Assign everyone a created timestamp to begin with:
$ret[] = update_sql("UPDATE {users} SET created = changed WHERE created = 0");
}
// Migrate the old profile data to the new scheme:
$fields = array( // Print a status message:"
array("Name", "realname", "textfield", NULL, 0), print '<p>Note: this might take a while ...</p>';
array("Address", "address", "textfield", NULL, 0),
array("City", "city", "textfield", NULL, 0), // Try updating the user records using the comment table:
array("State, province or region", "state", "textfield", NULL, 0), $result = db_query('SELECT DISTINCT(u.uid) FROM {comments} c LEFT JOIN {users} u ON c.uid = u.uid WHERE c.timestamp < u.created');
array("Zip or postal code", "zip", "textfield", NULL, 0),
array("Country", "country", "textfield", NULL, 1),
array("Gender", "gender", "selection", "male\nfemale", 1),
array("Job title", "job", "textfield", NULL, 0),
array("ICQ messenger ID", "icq", "textfield", NULL, 0),
array("MSN messenger ID", "msn", "textfield", NULL, 0),
array("Yahoo messenger ID", "yahoo", "textfield", NULL, 0),
array("AIM messenger ID", "aim", "textfield", NULL, 0),
array("URL of homepage", "homepage", "url", NULL, 1),
array("Biography", "biography", "textarea", NULL, 0),
array("Interests", "interests", "textarea", NULL, 0),
array("Public key", "publickey", "textarea", NULL, 0)
);
// Remove existing data (debug mode):
db_query('DELETE FROM {profile_fields}');
db_query('DELETE FROM {profile_values}');
foreach ($fields as $field) {
db_query("INSERT INTO {profile_fields} (title, name, type, category, options, overview) VALUES ('%s', '%s', '%s', 'Personal information', '%s', %d)", $field[0], $field[1], $field[2], $field[3], $field[4]);
}
db_query("ALTER TABLE {users} ADD picture varchar(255) NOT NULL DEFAULT ''");
$result = db_query("SELECT uid FROM {users}");
while ($account = db_fetch_object($result)) { while ($account = db_fetch_object($result)) {
// Load the user record: // Retrieve the proper timestamp:
$account = user_load(array('uid' => $account->uid)); $timestamp = db_result(db_query('SELECT MIN(timestamp) FROM {comments} WHERE uid = %d', $account->uid));
$edit = array(); // Try updating the user records using the node table:
$result = db_query('SELECT DISTINCT(u.uid) FROM {node} n LEFT JOIN {users} u ON n.uid = u.uid WHERE n.created < u.created');
while ($account = db_fetch_object($result)) {
// Retrieve the proper timestamp:
$timestamp = db_result(db_query('SELECT MIN(created) FROM {node} WHERE uid = %d', $account->uid));
// Update this user record as well as older records with an older timestamp:
db_query('UPDATE {users} SET created = %d WHERE created > %d AND uid <= %d', $timestamp, $timestamp, $account->uid);
}
// Modify the user record: // Update this user record as well as older records with an older timestamp:
foreach ($fields as $field) { db_query('UPDATE {users} SET created = %d WHERE created > %d AND uid <= %d', $timestamp, $timestamp, $account->uid);
$old = "profile_". $field[1];
$new = $field[1];
if ($account->$old) {
$edit[$new] = $account->$old;
}
unset($account->$old);
} }
// Gender specific changes:
if ($edit['gender'] == 'f') $edit['gender'] = 'female';
if ($edit['gender'] == 'm') $edit['gender'] = 'male';
// Avatar specific changes: // Migrate the old profile data to the new scheme:
if ($account->profile_avatar) { $fields = array(
$edit['picture'] = $account->profile_avatar; array("Name", "realname", "textfield", NULL, 0),
array("Address", "address", "textfield", NULL, 0),
array("City", "city", "textfield", NULL, 0),
array("State, province or region", "state", "textfield", NULL, 0),
array("Zip or postal code", "zip", "textfield", NULL, 0),
array("Country", "country", "textfield", NULL, 1),
array("Gender", "gender", "selection", "male\nfemale", 1),
array("Job title", "job", "textfield", NULL, 0),
array("ICQ messenger ID", "icq", "textfield", NULL, 0),
array("MSN messenger ID", "msn", "textfield", NULL, 0),
array("Yahoo messenger ID", "yahoo", "textfield", NULL, 0),
array("AIM messenger ID", "aim", "textfield", NULL, 0),
array("URL of homepage", "homepage", "url", NULL, 1),
array("Biography", "biography", "textarea", NULL, 0),
array("Interests", "interests", "textarea", NULL, 0),
array("Public key", "publickey", "textarea", NULL, 0)
);
// Remove existing data (debug mode):
db_query('DELETE FROM {profile_fields}');
db_query('DELETE FROM {profile_values}');
foreach ($fields as $field) {
db_query("INSERT INTO {profile_fields} (title, name, type, category, options, overview) VALUES ('%s', '%s', '%s', 'Personal information', '%s', %d)", $field[0], $field[1], $field[2], $field[3], $field[4]);
}
if ($GLOBALS["db_type"] == "mysql") {
db_query("ALTER TABLE {users} ADD picture varchar(255) NOT NULL DEFAULT ''");
}
else {
db_query("ALTER TABLE {users} ADD picture varchar(255)");
db_query("UPDATE {users} SET picture = ''");
db_query("ALTER TABLE {users} ALTER COLUMN picture SET NOT NULL");
db_query("ALTER TABLE {users} ALTER COLUMN picture SET DEFAULT ''");
} }
unset($account->profile_avatar);
// Save the update record: $result = db_query("SELECT uid FROM {users}");
user_save($account, $edit); while ($account = db_fetch_object($result)) {
// Load the user record:
$account = user_load(array('uid' => $account->uid));
$edit = array();
// Modify the user record:
foreach ($fields as $field) {
$old = "profile_". $field[1];
$new = $field[1];
if ($account->$old) {
$edit[$new] = $account->$old;
} }
unset($account->$old);
}
// Gender specific changes:
if ($edit['gender'] == 'f') $edit['gender'] = 'female';
if ($edit['gender'] == 'm') $edit['gender'] = 'male';
// Avatar specific changes:
if ($account->profile_avatar) {
$edit['picture'] = $account->profile_avatar;
}
unset($account->profile_avatar);
// Save the update record:
user_save($account, $edit);
}
return $ret; return $ret;
} }
function update_81() { function update_81() {
$ret[] = update_sql('ALTER TABLE {profile_fields} ADD page varchar(255) default NULL'); if ($GLOBALS['db_type'] == 'mysql') {
$ret[] = update_sql('ALTER TABLE {profile_fields} ADD page varchar(255) default NULL');
}
else {
$ret[] = update_sql('ALTER TABLE {profile_fields} ADD page varchar(255)');
$ret[] = update_sql('ALTER TABLE {profile_fields} ALTER COLUMN page SET default NULL');
}
$ret[] = update_sql("UPDATE {profile_fields} SET type = 'url' WHERE name = 'homepage'"); $ret[] = update_sql("UPDATE {profile_fields} SET type = 'url' WHERE name = 'homepage'");
return $ret; return $ret;
} }
function update_82() { function update_82() {
$ret[] = update_sql("ALTER TABLE {profile_fields} ADD required tinyint(1) DEFAULT '0' NOT NULL"); if ($GLOBALS['db_type'] == 'mysql') {
$ret[] = update_sql("ALTER TABLE {profile_fields} ADD required tinyint(1) DEFAULT '0' NOT NULL");
}
else {
$ret[] = update_sql("ALTER TABLE {profile_fields} ADD required smallint");
$ret[] = update_sql("ALTER TABLE {profile_fields} ALTER COLUMN required SET DEFAULT '0'");
$ret[] = update_sql("UPDATE {profile_fields} SET required = '0'");
$ret[] = update_sql("ALTER TABLE {profile_fields} ALTER COLUMN required SET NOT NULL");
}
return $ret; return $ret;
} }
...@@ -916,10 +982,20 @@ function update_83() { ...@@ -916,10 +982,20 @@ function update_83() {
status int(1) unsigned NOT NULL default '0', status int(1) unsigned NOT NULL default '0',
PRIMARY KEY (mid) PRIMARY KEY (mid)
);"); );");
$ret[] = update_sql("INSERT INTO sequences (name, id) VALUES ('menu_mid', 1)"); $ret[] = update_sql("INSERT INTO {sequences} (name, id) VALUES ('menu_mid', 1)");
} }
else { else {
/* Needs PostgreSQL equivalent */ $ret[] = update_sql("CREATE TABLE menu (
mid integer NOT NULL default '0',
pid integer NOT NULL default '0',
path varchar(255) NOT NULL default '',
title varchar(255) NOT NULL default '',
weight smallint NOT NULL default '0',
visibility smallint NOT NULL default '0',
status smallint NOT NULL default '0',
PRIMARY KEY (mid)
);");
} }
return $ret; return $ret;
} }
...@@ -927,10 +1003,13 @@ function update_83() { ...@@ -927,10 +1003,13 @@ function update_83() {
function update_84() { function update_84() {
$ret = array(); $ret = array();
if ($GLOBALS["db_type"] == "mysql") { if ($GLOBALS["db_type"] == "mysql") {
$ret[] = update_sql("ALTER TABLE vocabulary ADD help VARCHAR(255) NOT NULL DEFAULT '' AFTER description;"); $ret[] = update_sql("ALTER TABLE {vocabulary} ADD help VARCHAR(255) NOT NULL DEFAULT '' AFTER description;");
} }
else { else {
/* Needs PostgreSQL equivalent */ $ret[] = update_sql("ALTER TABLE {vocabulary} ADD help VARCHAR(255)");
$ret[] = update_sql("ALTER TABLE {vocabulary} ALTER help SET DEFAULT ''");
$ret[] = update_sql("UPDATE {vocabulary} SET help = ''");
$ret[] = update_sql("ALTER TABLE {vocabulary} ALTER help SET NOT NULL");
} }
return $ret; return $ret;
} }
...@@ -966,7 +1045,32 @@ function update_85() { ...@@ -966,7 +1045,32 @@ function update_85() {
)"); )");
} }
else { else {
/* Needs PostgreSQL equivalent */ $ret[] = update_sql("ALTER TABLE {bundle} RENAME TO {aggregator_category}");
$ret[] = update_sql("ALTER TABLE {aggregator_category} DROP attributes");
$ret[] = update_sql("ALTER TABLE {aggregator_category} RENAME bid TO cid");
$ret[] = update_sql("ALTER TABLE {aggregator_category} ADD description text");
$ret[] = update_sql("UPDATE {aggregator_category} SET description = ''");
$ret[] = update_sql("ALTER TABLE {aggregator_category} ALTER COLUMN description SET NOT NULL");
$ret[] = update_sql("ALTER TABLE {feed} RENAME TO {aggregator_feed}");
$ret[] = update_sql("ALTER TABLE {aggregator_feed} DROP attributes");
$ret[] = update_sql("ALTER TABLE {aggregator_feed} ADD block smallint");
$ret[] = update_sql("UPDATE {aggregator_feed} SET block = 0");
$ret[] = update_sql("ALTER TABLE {aggregator_feed} ALTER COLUMN block SET NOT NULL");
$ret[] = update_sql("ALTER TABLE {aggregator_category} ADD block smallint");
$ret[] = update_sql("UPDATE {aggregator_category} SET block = 0");
$ret[] = update_sql("ALTER TABLE {aggregator_category} ALTER COLUMN block SET NOT NULL");
$ret[] = update_sql("ALTER TABLE {item} RENAME TO {aggregator_item}");
$ret[] = update_sql("ALTER TABLE {aggregator_item} DROP attributes");
$ret[] = update_sql("CREATE TABLE {aggregator_category_feed} (
fid integer NOT NULL default '0',
cid integer NOT NULL default '0',
PRIMARY KEY (fid,cid)
);");
$ret[] = update_sql("CREATE TABLE {aggregator_category_item} (
iid integer NOT NULL default '0',
cid integer NOT NULL default '0',
PRIMARY KEY (iid,cid)
)");
} }
return $ret; return $ret;
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment