Index: modules/locale/locale.install =================================================================== RCS file: /cvs/drupal/drupal/modules/locale/locale.install,v retrieving revision 1.8 diff -u -r1.8 locale.install --- modules/locale/locale.install 26 Mar 2007 01:32:22 -0000 1.8 +++ modules/locale/locale.install 31 Mar 2007 15:34:50 -0000 @@ -81,6 +81,39 @@ db_query("CREATE INDEX {locales_target}_plural_idx ON {locales_target} (plural)"); db_query("CREATE INDEX {locales_source}_source_idx ON {locales_source} (source)"); break; + case 'mssql': + db_query("CREATE TABLE {languages} ( + language varchar(12) NOT NULL default '', + name varchar(64) NOT NULL default '', + native varchar(64) NOT NULL default '', + direction INT NOT NULL default '0', + enabled int NOT NULL default '0', + plurals int NOT NULL default '0', + formula varchar(128) NOT NULL default '', + domain varchar(128) NOT NULL default '', + prefix varchar(128) NOT NULL default '', + weight INT NOT NULL default '0', + PRIMARY KEY (language) + );"); + db_query("CREATE TABLE {locales_source} ( + lid int NOT NULL identity(1,1), + location varchar(255) NOT NULL default '', + source text NOT NULL, + PRIMARY KEY (lid) + );"); + db_query("CREATE TABLE {locales_target} ( + lid int NOT NULL default '0', + translation text NOT NULL, + 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)"); + db_query("CREATE INDEX {locales_source}_source_idx ON {locales_source} (source)"); + break; + } db_query("INSERT INTO {languages} (language, name, native, direction, enabled, weight) VALUES ('en', 'English', 'English', '0', '1', '0')"); } Index: includes/install.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/install.inc,v retrieving revision 1.35 diff -u -r1.35 install.inc --- includes/install.inc 27 Mar 2007 05:13:53 -0000 1.35 +++ includes/install.inc 31 Mar 2007 15:34:50 -0000 @@ -144,7 +144,7 @@ function drupal_detect_database_types() { $databases = array(); - foreach (array('mysql', 'mysqli', 'pgsql') as $type) { + foreach (array('mysql', 'mysqli', 'pgsql', 'mssql') as $type) { if (file_exists('./includes/install.'. $type .'.inc')) { include_once './includes/install.'. $type .'.inc'; $function = $type .'_is_available'; @@ -301,11 +301,11 @@ * @param module_list * An array of modules to install. */ -function drupal_install_profile($profile, $module_list) { +function drupal_install_profile($profile, $module_list) { // The system module is a special case; we can't bootstrap until it's // installed, so we can't use the normal installation function. $module_list = array_diff($module_list, array('system')); - + require_once "./profiles/$profile/$profile.profile"; $system_path = dirname(drupal_get_filename('module', 'system', NULL)); require_once './' . $system_path . '/system.install'; module_invoke('system', 'install'); @@ -331,17 +331,17 @@ */ function drupal_install_modules($module_list = array()) { $enable_modules = array(); - + foreach ($module_list as $module) { if (drupal_get_installed_schema_version($module, TRUE) == SCHEMA_UNINSTALLED) { module_load_install($module); module_invoke($module, 'install'); - $versions = drupal_get_schema_versions($module); + $versions = drupal_get_schema_versions($module); drupal_set_installed_schema_version($module, $versions ? max($versions) : SCHEMA_INSTALLED); $enable_modules[] = $module; } } - + module_enable($enable_modules); } Index: modules/search/search.install =================================================================== RCS file: /cvs/drupal/drupal/modules/search/search.install,v retrieving revision 1.6 diff -u -r1.6 search.install --- modules/search/search.install 1 Sep 2006 07:40:08 -0000 1.6 +++ modules/search/search.install 31 Mar 2007 15:34:51 -0000 @@ -59,6 +59,32 @@ PRIMARY KEY (word) )"); break; + case 'mssql': + db_query("CREATE TABLE {search_dataset} ( + sid int NOT NULL default '0', + type varchar(16) default NULL, + data varchar(1024) 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 int NOT NULL default '0', + type varchar(16) default NULL, + fromsid int 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; } } Index: modules/profile/profile.install =================================================================== RCS file: /cvs/drupal/drupal/modules/profile/profile.install,v retrieving revision 1.8 diff -u -r1.8 profile.install --- modules/profile/profile.install 28 Nov 2006 14:37:44 -0000 1.8 +++ modules/profile/profile.install 31 Mar 2007 15:34:51 -0000 @@ -64,6 +64,34 @@ 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; + case 'mssql': + db_query("CREATE TABLE {profile_fields} ( + fid int NOT NULL identity(1,1), + title varchar(255) default NULL, + name varchar(128) unique default NULL, + explanation VARCHAR(MAX) default NULL, + category varchar(255) default NULL, + page varchar(255) default NULL, + type varchar(128) default NULL, + weight int DEFAULT '0' NOT NULL, + required int DEFAULT '0' NOT NULL, + register int DEFAULT '0' NOT NULL, + visibility int DEFAULT '0' NOT NULL, + autocomplete int DEFAULT '0' NOT NULL, + options VARCHAR(MAX), + PRIMARY KEY (fid) + );"); + db_query("CREATE UNIQUE INDEX idx_name ON {profile_fields}(name);"); + db_query("CREATE INDEX {profile_fields}_category_idx ON {profile_fields} (category)"); + + db_query("CREATE TABLE {profile_values} ( + fid int default '0', + uid int default '0', + value VARCHAR(MAX) + );"); + 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; } } Index: modules/book/book.install =================================================================== RCS file: /cvs/drupal/drupal/modules/book/book.install,v retrieving revision 1.6 diff -u -r1.6 book.install --- modules/book/book.install 1 Sep 2006 07:40:08 -0000 1.6 +++ modules/book/book.install 31 Mar 2007 15:34:50 -0000 @@ -29,6 +29,17 @@ db_query("CREATE INDEX {book}_nid_idx ON {book} (nid)"); db_query("CREATE INDEX {book}_parent_idx ON {book} (parent)"); break; + case 'mssql': + db_query("CREATE TABLE {book} ( + vid int NOT NULL default '0', + nid int NOT NULL default '0', + parent int NOT NULL default '0', + weight int 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; } } Index: modules/contact/contact.install =================================================================== RCS file: /cvs/drupal/drupal/modules/contact/contact.install,v retrieving revision 1.6 diff -u -r1.6 contact.install --- modules/contact/contact.install 2 Jan 2007 05:30:29 -0000 1.6 +++ modules/contact/contact.install 31 Mar 2007 15:34:50 -0000 @@ -31,6 +31,18 @@ UNIQUE (category) )"); break; + case 'mssql': + db_query("CREATE TABLE {contact} ( + cid int NOT NULL default '0', + category varchar(255) unique NOT NULL default '', + recipients varchar(1024) NOT NULL default '', + reply varchar(1024) NOT NULL default '', + weight int NOT NULL default '0', + selected int NOT NULL default '0', + PRIMARY KEY (cid) + );"); + db_query("CREATE UNIQUE INDEX idx_category ON {contact}(category);"); + break; } } Index: modules/poll/poll.install =================================================================== RCS file: /cvs/drupal/drupal/modules/poll/poll.install,v retrieving revision 1.7 diff -u -r1.7 poll.install --- modules/poll/poll.install 1 Sep 2006 07:40:08 -0000 1.7 +++ modules/poll/poll.install 31 Mar 2007 15:34:51 -0000 @@ -64,6 +64,32 @@ )"); db_query("CREATE INDEX {poll_choices}_nid_idx ON {poll_choices} (nid)"); break; + case 'mssql': + db_query("CREATE TABLE {poll} ( + nid int NOT NULL default '0', + runtime int NOT NULL default '0', + active int NOT NULL default '0', + PRIMARY KEY (nid) + );"); + db_query("CREATE TABLE {poll_votes} ( + nid int NOT NULL, + uid int NOT NULL default 0, + 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 int NOT NULL identity(1,1), + nid int 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; } } Index: modules/aggregator/aggregator.install =================================================================== RCS file: /cvs/drupal/drupal/modules/aggregator/aggregator.install,v retrieving revision 1.8 diff -u -r1.8 aggregator.install --- modules/aggregator/aggregator.install 26 Sep 2006 14:19:00 -0000 1.8 +++ modules/aggregator/aggregator.install 31 Mar 2007 15:34:50 -0000 @@ -113,6 +113,55 @@ db_query("CREATE INDEX {aggregator_item}_fid_idx ON {aggregator_item} (fid)"); break; + + case 'mssql': + db_query("CREATE TABLE aggregator_category ( + cid int NOT NULL identity(1,1), + title varchar(255) unique NOT NULL default '', + description varchar(1024) NOT NULL, + block int NOT NULL default '0', + PRIMARY KEY (cid) + );"); + db_query("CREATE UNIQUE INDEX idx_title ON {aggregator_category}(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 int NOT NULL identity(1,1), + title varchar(255) unique NOT NULL default '', + url varchar(255) NOT NULL default '', + refresh int NOT NULL default '0', + checked int NOT NULL default '0', + link varchar(255) unique NOT NULL default '', + description varchar(1024) NOT NULL, + image varchar(1024) NOT NULL, + etag varchar(255) NOT NULL default '', + modified int NOT NULL default '0', + block int NOT NULL default '0', + PRIMARY KEY (fid) + );"); + db_query("CREATE UNIQUE INDEX idx_link ON {aggregator_feed}(link);"); + db_query("CREATE UNIQUE INDEX idx_title ON {aggregator_feed}(title);"); + + db_query("CREATE TABLE aggregator_item ( + iid int NOT NULL identity(1,1), + 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 varchar(1024) NOT NULL, + timestamp int default NULL, + PRIMARY KEY (iid) + );"); + db_query("CREATE INDEX idx_fid ON {aggregator_item}(fid);"); + break; } } Index: modules/system/system.install =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system.install,v retrieving revision 1.88 diff -u -r1.88 system.install --- modules/system/system.install 30 Mar 2007 08:47:58 -0000 1.88 +++ modules/system/system.install 31 Mar 2007 15:34:54 -0000 @@ -1104,6 +1104,476 @@ )"); db_query("CREATE INDEX {watchdog}_type_idx ON {watchdog} (type)"); break; + + case 'mssql': + db_query("CREATE TABLE {access} ( + aid int NOT NULL identity(1,1), + mask varchar(255) NOT NULL default '', + type varchar(255) NOT NULL default '', + status int NOT NULL default '0', + PRIMARY KEY (aid) + );"); + db_query("CREATE TABLE {authmap} ( + aid int NOT NULL identity(1,1), + uid int NOT NULL default '0', + authname varchar(128) unique NOT NULL default '', + module varchar(128) NOT NULL default '', + PRIMARY KEY (aid) + );"); + db_query("CREATE UNIQUE INDEX idx_authname ON {authmap}(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 int DEFAULT '0' NOT NULL, + weight int DEFAULT '0' NOT NULL, + region varchar(64) DEFAULT 'left' NOT NULL, + custom int DEFAULT '0' NOT NULL, + throttle int DEFAULT '0' NOT NULL, + visibility int DEFAULT '0' NOT NULL, + pages varchar(4000) DEFAULT '' NOT NULL, + title varchar(64) DEFAULT '' NOT NULL + );"); + db_query("CREATE TABLE {boxes} ( + bid int NOT NULL identity(1,1), + title varchar(64) NOT NULL default '', + body text, + info varchar(128) unique NOT NULL default '', + format int NOT NULL default '0', + PRIMARY KEY (bid), + );"); + db_query("CREATE UNIQUE INDEX idx_info ON {boxes}(info);"); + + db_query("CREATE TABLE {cache} ( + cid varchar(255) NOT NULL default '', + data text, + expire int NOT NULL default '0', + created int NOT NULL default '0', + headers text, + PRIMARY KEY (cid), + );"); + db_query("CREATE INDEX idx_expire ON {cache}(expire);"); + + db_query("CREATE TABLE {cache_filter} ( + cid varchar(255) NOT NULL default '', + data text, + expire int NOT NULL default '0', + created int NOT NULL default '0', + headers text, + PRIMARY KEY (cid), + );"); + db_query("CREATE INDEX idx_expire ON {cache_filter}(expire);"); + + db_query("CREATE TABLE {cache_menu} ( + cid varchar(255) NOT NULL default '', + data text, + expire int NOT NULL default '0', + created int NOT NULL default '0', + headers text, + PRIMARY KEY (cid), + );"); + db_query("CREATE INDEX idx_expire ON {cache_menu}(expire);"); + + db_query("CREATE TABLE {cache_page} ( + cid varchar(255) NOT NULL default '', + data text, + expire int NOT NULL default '0', + created int NOT NULL default '0', + headers text, + PRIMARY KEY (cid), + );"); + db_query("CREATE INDEX idx_expire ON {cache_page}(expire);"); + + db_query("CREATE TABLE {comments} ( + cid int NOT NULL default '0', + 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 int NOT NULL default '0', + format int NOT NULL default '0', + thread varchar(255) NOT NULL, + users text, + name varchar(60) NULL default NULL, + mail varchar(64) NULL default NULL, + homepage varchar(255) NULL default NULL, + PRIMARY KEY (cid) + );"); + db_query("CREATE INDEX idx_nid ON {comments}(nid);"); + + db_query("CREATE TABLE {node_comment_statistics} ( + nid int NOT NULL default '0', + last_comment_timestamp int NOT NULL default '0', + last_comment_name varchar(60) NULL default NULL, + last_comment_uid int NOT NULL default '0', + comment_count int NOT NULL default '0', + PRIMARY KEY (nid) + );"); + db_query("CREATE INDEX idx_node_comment_timestamp ON {node_comment_statistics}(last_comment_timestamp);"); + + db_query("CREATE TABLE {files} ( + fid int NOT NULL default 0, + nid int NOT NULL default 0, + filename varchar(255) NOT NULL default '', + filepath varchar(255) NOT NULL default '', + filemime varchar(255) NOT NULL default '', + filesize int NOT NULL default 0, + PRIMARY KEY (fid) + ); + "); + db_query("CREATE INDEX idx_nid ON {files}(nid);"); + + db_query("CREATE TABLE {file_revisions} ( + fid int NOT NULL default 0, + vid int NOT NULL default 0, + description varchar(255) NOT NULL default '', + list int NOT NULL default 0, + PRIMARY KEY (fid, vid) + );"); + db_query("CREATE INDEX idx_vid ON {file_revisions}(vid);"); + + db_query("CREATE TABLE {filter_formats} ( + format int NOT NULL identity(1,1), + name varchar(255) unique NOT NULL default '', + roles varchar(255) NOT NULL default '', + cache int NOT NULL default '0', + PRIMARY KEY (format) + );"); + db_query("CREATE UNIQUE INDEX idx_name ON {filter_formats}(name)"); + + db_query("CREATE TABLE {filters} ( + format int NOT NULL default '0', + module varchar(64) NOT NULL default '', + delta int DEFAULT '0' NOT NULL, + weight int DEFAULT '0' NOT NULL + );"); + db_query("CREATE INDEX idx_weight 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 VARCHAR(MAX), + page_callback varchar(255) NOT NULL default '', + page_arguments VARCHAR(MAX), + 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 int NOT NULL default '0', + vid int unique 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) + );"); + db_query("CREATE UNIQUE INDEX idx_vid ON {node}(vid);"); + db_query("CREATE INDEX idx_node_type ON {node}(node_type);"); + db_query("CREATE INDEX idx_node_title_type ON {node}(node_title_type);"); + db_query("CREATE INDEX idx_node_status ON {node}(node_status);"); + db_query("CREATE INDEX idx_uid ON {node}(uid);"); + db_query("CREATE INDEX idx_node_moderate ON {node}(moderate);"); + db_query("CREATE INDEX idx_node_promote_status ON {node}(promote, status);"); + db_query("CREATE INDEX idx_node_created ON {node}(created);"); + db_query("CREATE INDEX idx_node_changed ON {node}(changed);"); + db_query("CREATE INDEX idx_node_status_type_nid ON {node}(status, type, nid);"); + db_query("CREATE INDEX idx_nid ON {node}(nid);"); + + + db_query("CREATE TABLE {node_access} ( + nid int NOT NULL default '0', + gid int NOT NULL default '0', + realm varchar(255) NOT NULL default '', + grant_view int NOT NULL default '0', + grant_update int NOT NULL default '0', + grant_delete int NOT NULL default '0', + PRIMARY KEY (nid,gid,realm) + );"); + db_query("CREATE TABLE {node_revisions} ( + nid int NOT NULL, + vid int NOT NULL, + uid int NOT NULL default '0', + title varchar(128) NOT NULL default '', + body text NOT NULL default '', + teaser varchar(4000) 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 idx_nid ON {node_revisions}(nid);"); + db_query("CREATE INDEX idx_uid 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 varchar(4000) NOT NULL default '', + help varchar(4000) NOT NULL default '', + has_title tinyint NOT NULL, + title_label varchar(255) NOT NULL default '', + has_body tinyint NOT NULL, + body_label varchar(255) NOT NULL default '', + min_word_count int NOT NULL, + custom int NOT NULL DEFAULT '0', + modified int NOT NULL DEFAULT '0', + locked int NOT NULL DEFAULT '0', + orig_type varchar(255) NOT NULL default '', + PRIMARY KEY (type))"); + + db_query("CREATE TABLE {url_alias} ( + pid int NOT NULL identity(1,1), + src varchar(128) NOT NULL default '', + dst varchar(128) unique NOT NULL default '', + PRIMARY KEY (pid) + );"); + db_query("CREATE UNIQUE INDEX idx_dst ON {url_alias}(dst);"); + db_query("CREATE INDEX idx_src ON {url_alias}(src);"); + + db_query("CREATE TABLE {permission} ( + rid int NOT NULL default '0', + perm varchar(4000), + tid int NOT NULL default '0' + );"); + db_query("CREATE INDEX idx_rid ON {permission}(rid);"); + + db_query("CREATE TABLE {role} ( + rid int NOT NULL identity(1,1), + name varchar(32) unique NOT NULL default '', + PRIMARY KEY (rid) + );"); + db_query("CREATE UNIQUE INDEX idx_name ON {role}(name);"); + + db_query("CREATE TABLE {blocks_roles} ( + module varchar(64) NOT NULL, + delta varchar(32) NOT NULL, + rid int NOT NULL, + PRIMARY KEY (module, delta, rid) + );"); + db_query("CREATE TABLE {sessions} ( + uid int 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 varchar(max), + PRIMARY KEY (sid) + );"); + db_query("CREATE INDEX idx_uid ON {sessions}(uid);"); + db_query("CREATE INDEX idx_timestamp ON {sessions}(timestamp);"); + + db_query("CREATE TABLE {sequences} ( + name varchar(255) NOT NULL default '', + id int NOT NULL default '0', + PRIMARY KEY (name) + );"); + db_query("CREATE TABLE {node_counter} ( + nid int NOT NULL default '0', + totalcount int NOT NULL default '0', + daycount int NOT NULL default '0', + timestamp int NOT NULL default '0', + PRIMARY KEY (nid) + );"); + db_query("CREATE INDEX idx_totalcount ON {node_counter}(totalcount);"); + db_query("CREATE INDEX idx_daycount ON {node_counter}(daycount);"); + db_query("CREATE INDEX idx_timestamp 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 char NOT NULL default '0', + throttle int 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 idx_weight ON {system}(weight);"); + + db_query("CREATE TABLE {term_data} ( + tid int NOT NULL default '0', + vid int NOT NULL default '0', + name varchar(255) NOT NULL default '', + description varchar(4000), + weight int NOT NULL default '0', + PRIMARY KEY (tid) + );"); + db_query("CREATE INDEX idx_vid ON {term_data}(vid);"); + + db_query("CREATE TABLE {term_hierarchy} ( + tid int NOT NULL default '0', + parent int NOT NULL default '0', + PRIMARY KEY (tid, parent) + );"); + db_query("CREATE INDEX idx_tid ON {term_hierarchy}(tid);"); + db_query("CREATE INDEX idx_parent ON {term_hierarchy}(parent);"); + + db_query("CREATE TABLE {term_node} ( + nid int NOT NULL default '0', + vid int NOT NULL default '0', + tid int NOT NULL default '0', + PRIMARY KEY (tid,nid) + );"); + db_query("CREATE INDEX idx_nid ON {term_node}(nid);"); + db_query("CREATE INDEX idx_vid ON {term_node}(nid);"); + db_query("CREATE INDEX idx_tid ON {term_node}(tid);"); + + db_query("CREATE TABLE {term_relation} ( + tid1 int NOT NULL default '0', + tid2 int NOT NULL default '0' + );"); + db_query("CREATE INDEX idx_tid1 ON {term_relation}(tid1);"); + db_query("CREATE INDEX idx_tid2 ON {term_relation}(tid2);"); + + db_query("CREATE TABLE {term_synonym} ( + tid int NOT NULL default '0', + name varchar(255) NOT NULL default '' + );"); + db_query("CREATE INDEX idx_tid ON {term_synonym}(tid);"); + db_query("CREATE INDEX idx_name ON {term_synonym}(name);"); + + db_query("CREATE TABLE {users} ( + uid int NOT NULL default '0', + name varchar(60) unique NOT NULL default '', + pass varchar(32) NOT NULL default '', + mail varchar(64) default '', + mode int NOT NULL default '0', + sort int default '0', + threshold int 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 int NOT NULL default '0', + timezone varchar(8) NULL default NULL, + language varchar(12) NOT NULL default '', + picture varchar(255) NOT NULL DEFAULT '', + init varchar(64) default '', + data text NULL, + PRIMARY KEY (uid) + );"); + db_query("CREATE UNIQUE INDEX idx_name ON {users}(name);"); + db_query("CREATE INDEX idx_access ON {users}(access);"); + + db_query("CREATE TABLE {users_roles} ( + uid int NOT NULL default '0', + rid int 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 int NOT NULL default '', + name varchar(255) NOT NULL default '', + description varchar(4000), + help varchar(255) NOT NULL default '', + relations int NOT NULL default '0', + hierarchy int NOT NULL default '0', + multiple int NOT NULL default '0', + required int NOT NULL default '0', + tags int NOT NULL default '0', + module varchar(255) NOT NULL default '', + weight int NOT NULL default '0', + PRIMARY KEY (vid) + );"); + + db_query("CREATE TABLE {vocabulary_node_types} ( + vid int NOT NULL DEFAULT '0', + type varchar(32) NOT NULL DEFAULT '', + PRIMARY KEY (vid, type) + );"); + + db_query("CREATE TABLE {watchdog} ( + wid int NOT NULL identity(1,1), + uid int NOT NULL default '0', + type varchar(16) NOT NULL default '', + message text NOT NULL, + severity int 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) + );"); + db_query("CREATE INDEX idx_type ON {watchdog}(type);"); + + // Functions to implement GREATEST function from MySQL, Oracle, and PostGres + db_query("CREATE FUNCTION dbo.GREATEST + ( @val1 SQL_VARIANT, + @val2 SQL_VARIANT, + @val3 SQL_VARIANT ) + RETURNS SQL_VARIANT + AS + BEGIN + RETURN ( + CASE + WHEN @val1 > @val2 AND @val1 > @val3 THEN @val1 + WHEN @val2 > @val3 THEN @val2 + ELSE @val3 + END + ) + END;"); + 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)"); Index: modules/statistics/statistics.install =================================================================== RCS file: /cvs/drupal/drupal/modules/statistics/statistics.install,v retrieving revision 1.7 diff -u -r1.7 statistics.install --- modules/statistics/statistics.install 7 Nov 2006 22:27:07 -0000 1.7 +++ modules/statistics/statistics.install 31 Mar 2007 15:34:51 -0000 @@ -37,6 +37,21 @@ )"); db_query("CREATE INDEX {accesslog}_accesslog_timestamp_idx ON {accesslog} (timestamp)"); break; + case 'mssql': + db_query("CREATE TABLE {accesslog} ( + aid int NOT NULL identity(1,1), + 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 int default '0', + timer int NOT NULL default '0', + timestamp int NOT NULL default '0', + PRIMARY KEY (aid) + );"); + db_query("CREATE INDEX {accesslog}_accesslog_timestamp_idx ON {accesslog} (timestamp)"); + break; } } Index: modules/forum/forum.install =================================================================== RCS file: /cvs/drupal/drupal/modules/forum/forum.install,v retrieving revision 1.6 diff -u -r1.6 forum.install --- modules/forum/forum.install 1 Sep 2006 07:40:08 -0000 1.6 +++ modules/forum/forum.install 31 Mar 2007 15:34:50 -0000 @@ -27,6 +27,16 @@ db_query("CREATE INDEX {forum}_nid_idx ON {forum} (nid)"); db_query("CREATE INDEX {forum}_tid_idx ON {forum} (tid)"); break; + case 'mssql': + db_query("CREATE TABLE {forum} ( + nid int NOT NULL default '0', + vid int NOT NULL default '0', + tid int 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; } } Index: includes/install.mssql.inc =================================================================== RCS file: includes/install.mssql.inc diff -N includes/install.mssql.inc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ includes/install.mssql.inc 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,139 @@ +
We were unable to use the MS SQL database because the MS SQL extension for PHP is not installed. Check your PHP.ini to see how you can enable it.
For more help, see the Installation and upgrading handbook. If you are unsure what these terms mean you should probably contact your hosting provider.
'); + exit; + } + + $url = parse_url($url); + + // Decode url-encoded information in the db connection string + $url['user'] = urldecode($url['user']); + // Test if database url has a password. + if(isset($url['pass'])) { + $url['pass'] = urldecode($url['pass']); + } + else { + $url['pass'] = ''; + } + $url['host'] = stripslashes(urldecode($url['host'])); + $url['path'] = urldecode($url['path']); + + // Allow for non-standard MS SQL port. + if (isset($url['port'])) { + $url['host'] = $url['host'] .','. $url['port']; + } + + // Allow large texts for MS SQL. + ini_set("mssql.textlimit", 16000000); + ini_set("mssql.textsize", 16000000); + + // TODO: Put back @. + $connection = mssql_connect($url['host'], $url['user'], $url['pass']); + if (!$connection) { + // Redirect to installer if using default DB credentials + if ($url['user'] == 'username' && $url['pass'] == 'password') { + include_once 'includes/install.inc'; + install_goto('install.php'); + } + + // Show error screen otherwise + drupal_maintenance_theme(); + drupal_set_header('HTTP/1.1 503 Service Unavailable'); + drupal_set_title('Unable to connect to database server'); + print theme('maintenance_page', 'If you still have to install Drupal, proceed to the installation page.
+If you have already finished installed Drupal, this either means that the username and password information in your settings.php file is incorrect or that we can\'t connect to the MS SQL database server. This could mean your hosting provider\'s database server is down.
The MS SQL error was: '. theme('placeholder', mssql_get_last_message()) .'.
+Currently, the username is '. theme('placeholder', $url['user']) .' and the database server is '. theme('placeholder', $url['host']) .'.
+For more help, see the Installation and upgrading handbook. If you are unsure what these terms mean you should probably contact your hosting provider.
'); + exit; + } + + if (!mssql_select_db(substr($url['path'], 1))) { + drupal_maintenance_theme(); + drupal_set_title('Unable to select database'); + print theme('maintenance_page', 'We were able to connect to the MS SQL database server (which means your username and password are okay) but not able to select the database.
+The MS SQL error was: '. theme('placeholder', mssql_get_last_message()) .'.
+Currently, the database is '. theme('placeholder', substr($url['path'], 1)) .'. The username is '. theme('placeholder', $url['user']) .' and the database server is '. theme('placeholder', $url['host']) .'.
+For more help, see the Installation and upgrading handbook. If you are unsure what these terms mean you should probably contact your hosting provider.
'); + exit; + } + + // TODO: Document this. Not sure what this does. + // Maximum returnable text size + mssql_query('SET TEXTSIZE 524287;'); + + return $connection; +} + +/** + * Helper function for db_query(). + */ +function _db_query($query, $debug = 0) { + global $active_db, $queries, $user, $base_root; + global $temp_tables; + static $last_error_msg; + + // First prefix temp tables with # that have been created during this session + $query = str_replace($temp_tables['base_name'], $temp_tables['temp_name'], $query); + + + if (variable_get('dev_query', 0)) { + list($usec, $sec) = explode(' ', microtime()); + $timer = (float)$usec + (float)$sec; + } + + // LENGTH is called DATALENGTH in MS SQL. + // TODO: Preg search instead of strpos. + if(strpos($query,"LENGTH")){ + $pattern = '/(.+)LENGTH(.+)/i'; + $query = preg_replace($pattern, '${1}DATALENGTH$2', $query); + } + // No LIMIT in MS SQL. We use SELECT TOP n ... FROM ... + // Can't do TOP because it is NOT a range. + // TODO: Preg search instead of strpos. + if(strpos($query,'LIMIT')){ + $pattern = '/(.+)LIMIT (\d+), (\d+)/i'; + $query_new = preg_replace($pattern, '${1}', $query); + $limit = preg_replace($pattern, '$3', $query); + $query = str_replace('SELECT', 'SELECT TOP '.$limit, $query_new); + unset($pattern, $query_new, $limit); + } + // TODO: Not sure what this is. + // TODO: Preg search instead of strpos so we don't replace valid instances of 'relevance'. + if(strpos($query,'relevance')){ + $query = str_replace('relevance', '_relevance', $query_new); + } + + /** + * // TODO Fix this big issue + * NOTE: Sending the query again is currently in here + * becuase for some reason, on certain pages, no result is + * returned from SQL-Server even though the qurey is fine. + * To prove this, try putting this in the error log after + * querying the result. You'll see that 'SELECT * FROM system WHERE type = 'theme' + * returns nothing, even though every query before it is fine: + * error_log("\n" . $tquery . " and result: " . $result); + * + */ + #echo "$queryquery: '. $query .'
error:'. mssql_get_last_message() .'