system.install 110 KB
Newer Older
Dries's avatar
 
Dries committed
1
<?php
2
// $Id$
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

function system_install() {
  switch ($GLOBALS['db_type']) {
    case 'mysql':
    case 'mysqli':
      db_query("CREATE TABLE {access} (
        aid tinyint(10) NOT NULL auto_increment,
        mask varchar(255) NOT NULL default '',
        type varchar(255) NOT NULL default '',
        status tinyint(2) NOT NULL default '0',
        PRIMARY KEY (aid)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {authmap} (
        aid int(10) unsigned NOT NULL auto_increment,
        uid int(10) 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(2) DEFAULT '0' NOT NULL,
        weight tinyint(1) DEFAULT '0' NOT NULL,
        region varchar(64) DEFAULT 'left' NOT NULL,
        custom tinyint(2) DEFAULT '0' NOT NULL,
        throttle tinyint(1) DEFAULT '0' NOT NULL,
        visibility tinyint(1) DEFAULT '0' NOT NULL,
        pages text DEFAULT '' NOT NULL
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {boxes} (
        bid tinyint(4) NOT NULL auto_increment,
        title varchar(64) NOT NULL default '',
        body longtext,
        info varchar(128) NOT NULL default '',
        format int(4) 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(11) NOT NULL default '0',
        created int(11) NOT NULL default '0',
        headers text,
        PRIMARY KEY (cid),
        INDEX expire (expire)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {comments} (
        cid int(10) NOT NULL auto_increment,
        pid int(10) NOT NULL default '0',
        nid int(10) NOT NULL default '0',
        uid int(10) NOT NULL default '0',
        subject varchar(64) NOT NULL default '',
        comment longtext NOT NULL,
        hostname varchar(128) NOT NULL default '',
        timestamp int(11) NOT NULL default '0',
        score mediumint(9) NOT NULL default '0',
        status tinyint(3) unsigned NOT NULL default '0',
        format int(4) 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)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {node_comment_statistics} (
        nid int(10) unsigned NOT NULL auto_increment,
        last_comment_timestamp int(11) NOT NULL default '0',
        last_comment_name varchar(60) default NULL,
        last_comment_uid int(10) NOT NULL default '0',
        comment_count int(10) 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(10) unsigned NOT NULL default 0,
        nid int(10) 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(10) unsigned NOT NULL default 0,
        PRIMARY KEY (fid)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {file_revisions} (
        fid int(10) unsigned NOT NULL default 0,
        vid int(10) unsigned NOT NULL default 0,
        description varchar(255) NOT NULL default '',
        list tinyint(1) unsigned NOT NULL default 0,
        PRIMARY KEY (fid, vid)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {filter_formats} (
        format int(4) NOT NULL auto_increment,
        name varchar(255) NOT NULL default '',
        roles varchar(255) NOT NULL default '',
        cache tinyint(2) NOT NULL default '0',
        PRIMARY KEY (format),
        UNIQUE KEY (name)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {filters} (
        format int(4) NOT NULL default '0',
        module varchar(64) NOT NULL default '',
        delta tinyint(2) DEFAULT '0' NOT NULL,
        weight tinyint(2) 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(11) NOT NULL default '0'
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {history} (
        uid int(10) NOT NULL default '0',
        nid int(10) NOT NULL default '0',
        timestamp int(11) NOT NULL default '0',
        PRIMARY KEY (uid,nid)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {menu} (
        mid int(10) unsigned NOT NULL default '0',
        pid int(10) unsigned NOT NULL default '0',
        path varchar(255) NOT NULL default '',
        title varchar(255) NOT NULL default '',
        description varchar(255) NOT NULL default '',
        weight tinyint(4) NOT NULL default '0',
        type int(2) unsigned NOT NULL default '0',
        PRIMARY KEY (mid)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");


      db_query("CREATE TABLE {node} (
        nid int(10) unsigned NOT NULL auto_increment,
        vid int(10) unsigned NOT NULL default '0',
        type varchar(32) NOT NULL default '',
        title varchar(128) NOT NULL default '',
        uid int(10) NOT NULL default '0',
        status int(4) NOT NULL default '1',
        created int(11) NOT NULL default '0',
        changed int(11) NOT NULL default '0',
        comment int(2) NOT NULL default '0',
        promote int(2) NOT NULL default '0',
        moderate int(2) NOT NULL default '0',
        sticky int(2) 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(10) unsigned NOT NULL default '0',
        gid int(10) unsigned NOT NULL default '0',
        realm varchar(255) NOT NULL default '',
        grant_view tinyint(1) unsigned NOT NULL default '0',
        grant_update tinyint(1) unsigned NOT NULL default '0',
        grant_delete tinyint(1) unsigned NOT NULL default '0',
        PRIMARY KEY (nid,gid,realm)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {node_revisions} (
        nid int(10) unsigned NOT NULL,
        vid int(10) unsigned NOT NULL,
        uid int(10) NOT NULL default '0',
        title varchar(128) NOT NULL default '',
        body longtext NOT NULL default '',
        teaser longtext NOT NULL default '',
        log longtext NOT NULL default '',
        timestamp int(11) NOT NULL default '0',
        format int(4) NOT NULL default '0',
        PRIMARY KEY  (vid),
        KEY nid (nid),
        KEY uid (uid)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218
      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(3) unsigned NOT NULL,
        title_label varchar(255) NOT NULL default '',
        has_body tinyint(3) unsigned NOT NULL,
        body_label varchar(255) NOT NULL default '',
        min_word_count smallint(4) unsigned NOT NULL,
        custom tinyint(1) NOT NULL DEFAULT '0',
        modified tinyint(1) NOT NULL DEFAULT '0',
        locked tinyint(1) NOT NULL DEFAULT '0',
        orig_type varchar(255) NOT NULL default '',
        PRIMARY KEY (type)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404
      db_query("CREATE TABLE {url_alias} (
        pid int(10) unsigned NOT NULL auto_increment,
        src varchar(128) NOT NULL default '',
        dst varchar(128) NOT NULL default '',
        PRIMARY KEY (pid),
        UNIQUE KEY dst (dst),
        KEY src (src)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {permission} (
        rid int(10) unsigned NOT NULL default '0',
        perm longtext,
        tid int(10) unsigned NOT NULL default '0',
        KEY rid (rid)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {role} (
        rid int(10) unsigned NOT NULL auto_increment,
        name varchar(32) 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(10) unsigned NOT NULL,
        PRIMARY KEY (module, delta, rid)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {sessions} (
        uid int(10) unsigned NOT NULL,
        sid varchar(32) NOT NULL default '',
        hostname varchar(128) NOT NULL default '',
        timestamp int(11) NOT NULL default '0',
        cache int(11) 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(10) unsigned NOT NULL default '0',
        PRIMARY KEY (name)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {node_counter} (
        nid int(10) NOT NULL default '0',
        totalcount bigint(20) unsigned NOT NULL default '0',
        daycount mediumint(8) unsigned NOT NULL default '0',
        timestamp int(11) unsigned NOT NULL default '0',
        PRIMARY KEY (nid),
        KEY totalcount (totalcount),
        KEY daycount (daycount),
        KEY timestamp (timestamp)
      ) /*!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(2) NOT NULL default '0',
        throttle tinyint(1) DEFAULT '0' NOT NULL,
        bootstrap int(2) NOT NULL default '0',
        schema_version smallint(3) NOT NULL default -1,
        weight int(2) NOT NULL default '0',
        PRIMARY KEY (filename),
        KEY (weight)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {term_data} (
        tid int(10) unsigned NOT NULL auto_increment,
        vid int(10) unsigned NOT NULL default '0',
        name varchar(255) NOT NULL default '',
        description longtext,
        weight tinyint(4) NOT NULL default '0',
        PRIMARY KEY (tid),
        KEY vid (vid)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {term_hierarchy} (
        tid int(10) unsigned NOT NULL default '0',
        parent int(10) 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(10) unsigned NOT NULL default '0',
        tid int(10) unsigned NOT NULL default '0',
        KEY nid (nid),
        KEY tid (tid),
        PRIMARY KEY (tid,nid)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {term_relation} (
        tid1 int(10) unsigned NOT NULL default '0',
        tid2 int(10) unsigned NOT NULL default '0',
        KEY tid1 (tid1),
        KEY tid2 (tid2)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {term_synonym} (
        tid int(10) 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(10) unsigned NOT NULL default '0',
        name varchar(60) NOT NULL default '',
        pass varchar(32) NOT NULL default '',
        mail varchar(64) default '',
        mode tinyint(1) NOT NULL default '0',
        sort tinyint(1) default '0',
        threshold tinyint(1) default '0',
        theme varchar(255) NOT NULL default '',
        signature varchar(255) NOT NULL default '',
        created int(11) NOT NULL default '0',
        access int(11) NOT NULL default '0',
        login int(11) NOT NULL default '0',
        status tinyint(4) 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 access (access)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {users_roles} (
        uid int(10) unsigned NOT NULL default '0',
        rid int(10) unsigned NOT NULL default '0',
        PRIMARY KEY (uid, rid)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {variable} (
        name varchar(48) NOT NULL default '',
        value longtext NOT NULL,
        PRIMARY KEY (name)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {vocabulary} (
        vid int(10) unsigned NOT NULL auto_increment,
        name varchar(255) NOT NULL default '',
        description longtext,
        help varchar(255) NOT NULL default '',
        relations tinyint(3) unsigned NOT NULL default '0',
        hierarchy tinyint(3) unsigned NOT NULL default '0',
        multiple tinyint(3) unsigned NOT NULL default '0',
        required tinyint(3) unsigned NOT NULL default '0',
        tags tinyint(3) unsigned NOT NULL default '0',
        module varchar(255) NOT NULL default '',
        weight tinyint(4) NOT NULL default '0',
        PRIMARY KEY (vid)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {vocabulary_node_types} (
        vid int(10) unsigned NOT NULL DEFAULT '0',
        type varchar(32) NOT NULL DEFAULT '',
        PRIMARY KEY (vid, type)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {watchdog} (
        wid int(5) NOT NULL auto_increment,
        uid int(10) NOT NULL default '0',
        type varchar(16) NOT NULL default '',
        message longtext NOT NULL,
        severity tinyint(3) unsigned 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(11) NOT NULL default '0',
        PRIMARY KEY (wid)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      break;
    case 'pgsql':
405
      /* create unsigned types */
406 407 408
      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)");
409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469

      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',
470
        status smallint_unsigned NOT NULL default '0',
471 472 473 474 475 476 477 478 479 480 481 482 483 484 485
        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',
486
        comment_count int_unsigned NOT NULL default '0',
487 488 489 490 491
        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} (
492 493
        fid int_unsigned NOT NULL default 0,
        nid int_unsigned NOT NULL default 0,
494 495 496
        filename varchar(255) NOT NULL default '',
        filepath varchar(255) NOT NULL default '',
        filemime varchar(255) NOT NULL default '',
497
        filesize int_unsigned NOT NULL default 0,
498 499
        PRIMARY KEY (fid)
      )");
500

501
      db_query("CREATE TABLE {file_revisions} (
502 503
        fid int_unsigned NOT NULL default 0,
        vid int_unsigned NOT NULL default 0,
504
        description varchar(255) NOT NULL default '',
505
        list smallint_unsigned NOT NULL default 0,
506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540
        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),
541
        pid int_unsigned NOT NULL default '0',
542 543 544 545
        path varchar(255) NOT NULL default '',
        title varchar(255) NOT NULL default '',
        description varchar(255) NOT NULL default '',
        weight smallint NOT NULL default '0',
546
        type int_unsigned NOT NULL default '0',
547 548 549 550 551 552
        PRIMARY KEY (mid)
      )");
      db_query("ALTER SEQUENCE {menu}_mid_seq MINVALUE 2 RESTART 2");

      db_query("CREATE TABLE {node} (
        nid serial CHECK (nid >= 0),
553
        vid int_unsigned NOT NULL default '0',
554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578
        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} (
579 580
        nid int_unsigned NOT NULL default '0',
        gid int_unsigned NOT NULL default '0',
581
        realm varchar(255) NOT NULL default '',
582 583 584
        grant_view smallint_unsigned NOT NULL default '0',
        grant_update smallint_unsigned NOT NULL default '0',
        grant_delete smallint_unsigned NOT NULL default '0',
585 586 587 588
        PRIMARY KEY (nid,gid,realm)
      )");

      db_query("CREATE TABLE {node_revisions} (
589 590
        nid int_unsigned NOT NULL,
        vid int_unsigned NOT NULL,
591 592 593 594 595 596 597 598 599 600 601 602 603
        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");

604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621
      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)
      )");

622 623 624 625 626 627 628 629 630 631
      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} (
632
        rid int_unsigned NOT NULL default '0',
633
        perm text,
634
        tid int_unsigned NOT NULL default '0'
635 636 637 638 639 640 641 642 643 644 645 646 647
      )");
      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,
648
        rid int_unsigned NOT NULL,
649 650 651 652
        PRIMARY KEY (module, delta, rid)
      )");

      db_query("CREATE TABLE {sessions} (
653
        uid int_unsigned NOT NULL,
654 655 656 657 658 659 660 661 662 663 664 665 666
        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 '',
667
        id int_unsigned NOT NULL default '0',
668 669 670 671 672
        PRIMARY KEY (name)
      )"); */

      db_query("CREATE TABLE {node_counter} (
        nid int NOT NULL default '0',
673 674 675
        totalcount bigint_unsigned NOT NULL default '0',
        daycount int_unsigned NOT NULL default '0',
        timestamp int_unsigned NOT NULL default '0',
676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697
        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),
698
        vid int_unsigned NOT NULL default '0',
699 700 701 702 703 704 705 706
        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} (
707 708
        tid int_unsigned NOT NULL default '0',
        parent int_unsigned NOT NULL default '0',
709 710 711 712 713 714
        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} (
715 716
        nid int_unsigned NOT NULL default '0',
        tid int_unsigned NOT NULL default '0',
717 718 719 720 721 722
        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} (
723 724
        tid1 int_unsigned NOT NULL default '0',
        tid2 int_unsigned NOT NULL default '0'
725 726 727 728 729
      )");
      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} (
730
        tid int_unsigned NOT NULL default '0',
731 732 733 734 735 736
        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} (
737
        uid int_unsigned NOT NULL default '0',
738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761
        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} (
762 763
        uid int_unsigned NOT NULL default '0',
        rid int_unsigned NOT NULL default '0',
764 765 766 767 768 769 770 771 772 773 774 775 776 777
        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 '',
778 779 780 781 782
        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',
783 784 785 786 787 788
        module varchar(255) NOT NULL default '',
        weight smallint NOT NULL default '0',
        PRIMARY KEY (vid)
      )");

      db_query("CREATE TABLE {vocabulary_node_types} (
789
        vid int_unsigned NOT NULL DEFAULT '0',
790 791 792 793 794 795 796 797 798
        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,
799
        severity smallint_unsigned NOT NULL default '0',
800 801 802 803 804 805 806 807
        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;
808
  }
809

810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827
  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)");

  db_query("INSERT INTO {users} (uid,name,mail) VALUES(0,'','')");

  db_query("INSERT INTO {role} (name) VALUES ('anonymous user')");
  db_query("INSERT INTO {role} (name) VALUES ('authenticated user')");

  db_query("INSERT INTO {permission} VALUES (1,'access content',0)");
  db_query("INSERT INTO {permission} VALUES (2,'access comments, access content, post comments, post comments without approval',0)");

  db_query("INSERT INTO {variable} (name,value) VALUES('theme_default', 's:10:\"bluemarine\";')");

  db_query("INSERT INTO {blocks} (module,delta,theme,status) VALUES('user', 0, 'bluemarine', 1)");
  db_query("INSERT INTO {blocks} (module,delta,theme,status) VALUES('user', 1, 'bluemarine', 1)");

  db_query("INSERT INTO {node_access} VALUES (0, 0, 'all', 1, 0, 0)");

828 829 830
  db_query("INSERT INTO {node_type} (type, name, module, description, help, has_title, title_label, has_body, body_label, min_word_count, custom, modified, locked, orig_type) VALUES ('page', 'page', 'node', 'If you want to add a static page, like a contact page or an about page, use a page.', '', 1, 'Title', 1, 'Body', 0, 1, 1, 0, 'page')");
  db_query("INSERT INTO {node_type} (type, name, module, description, help, has_title, title_label, has_body, body_label, min_word_count, custom, modified, locked, orig_type) VALUES ('story', 'story', 'node', 'Stories are articles in their simplest form: they have a title, a teaser and a body, but can be extended by other modules. The teaser is part of the body too. Stories may be used as a personal blog or for news articles.', '', 1, 'Title', 1, 'Body', 0, 1, 1, 0, 'story')");

831 832 833 834 835 836 837 838 839
  db_query("INSERT INTO {filter_formats} (name, roles, cache) VALUES ('Filtered HTML',',1,2,',1)");
  db_query("INSERT INTO {filter_formats} (name, roles, cache) VALUES ('PHP code','',0)");
  db_query("INSERT INTO {filter_formats} (name, roles, cache) VALUES ('Full HTML','',1)");
  db_query("INSERT INTO {filters} VALUES (1,'filter',0,0)");
  db_query("INSERT INTO {filters} VALUES (1,'filter',2,1)");
  db_query("INSERT INTO {filters} VALUES (2,'filter',1,0)");
  db_query("INSERT INTO {filters} VALUES (3,'filter',2,0)");
  db_query("INSERT INTO {variable} (name,value) VALUES ('filter_html_1','i:1;')");

840
  db_query("INSERT INTO {variable} (name, value) VALUES ('node_options_forum', '%s')", 'a:1:{i:0;s:6:"status";}');
841 842 843 844 845 846 847

  db_query("INSERT INTO {menu} (pid, path, title, description, weight, type) VALUES (0, '', 'Primary links', '', 0, 115)");
  db_query("INSERT INTO {variable} VALUES ('menu_primary_menu', 'i:2;')");
  db_query("INSERT INTO {variable} VALUES ('menu_secondary_menu', 'i:2;')");
}

// Updates for core
Dries's avatar
 
Dries committed
848

849
function system_update_110() {
850 851 852 853
  $ret = array();

  // TODO: needs PGSQL version
  if ($GLOBALS['db_type'] == 'mysql') {
854 855 856 857
    /*
    ** Search
    */

858 859 860 861 862 863 864 865 866
    $ret[] = update_sql('DROP TABLE {search_index}');
    $ret[] = update_sql("CREATE TABLE {search_index} (
      word varchar(50) NOT NULL default '',
      sid int(10) unsigned NOT NULL default '0',
      type varchar(16) default NULL,
      fromsid int(10) unsigned NOT NULL default '0',
      fromtype varchar(16) default NULL,
      score int(10) unsigned default NULL,
      KEY sid (sid),
867
      KEY fromsid (fromsid),
868
      KEY word (word)
869
      )");
870 871 872 873

    $ret[] = update_sql("CREATE TABLE {search_total} (
      word varchar(50) NOT NULL default '',
      count int(10) unsigned default NULL,
Dries's avatar
Dries committed
874
      PRIMARY KEY word (word)
875
      )");
876

877 878 879 880 881 882 883 884

    /*
    ** Blocks
    */

    $ret[] = update_sql('ALTER TABLE {blocks} DROP path');
    $ret[] = update_sql('ALTER TABLE {blocks} ADD visibility tinyint(1) NOT NULL');
    $ret[] = update_sql('ALTER TABLE {blocks} ADD pages text NOT NULL');
885
  }
Dries's avatar
 
Dries committed
886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907
  elseif ($GLOBALS['db_type'] == 'pgsql') {
    /*
    ** Search
    */
    $ret[] = update_sql('DROP TABLE {search_index}');
    $ret[] = update_sql("CREATE TABLE {search_index} (
      word varchar(50) NOT NULL default '',
      sid integer NOT NULL default '0',
      type varchar(16) default NULL,
      fromsid integer NOT NULL default '0',
      fromtype varchar(16) default NULL,
      score integer default NULL
      )");
    $ret[] = update_sql("CREATE INDEX {search_index}_sid_idx on {search_index}(sid)");
    $ret[] = update_sql("CREATE INDEX {search_index}_fromsid_idx on {search_index}(fromsid)");
    $ret[] = update_sql("CREATE INDEX {search_index}_word_idx on {search_index}(word)");

    $ret[] = update_sql("CREATE TABLE {search_total} (
      word varchar(50) NOT NULL default '' PRIMARY KEY,
      count integer default NULL
      )");

908

Dries's avatar
 
Dries committed
909 910 911 912 913 914 915
    /*
    ** Blocks
    */
    // Postgres can only drop columns since 7.4
    #$ret[] = update_sql('ALTER TABLE {blocks} DROP path');

    $ret[] = update_sql('ALTER TABLE {blocks} ADD visibility smallint');
Steven Wittens's avatar
Steven Wittens committed
916
    $ret[] = update_sql("ALTER TABLE {blocks} ALTER COLUMN visibility set default 0");
Dries's avatar
 
Dries committed
917 918 919
    $ret[] = update_sql('UPDATE {blocks} SET visibility = 0');
    $ret[] = update_sql('ALTER TABLE {blocks} ALTER COLUMN visibility SET NOT NULL');
    $ret[] = update_sql('ALTER TABLE {blocks} ADD pages text');
920
    $ret[] = update_sql("ALTER TABLE {blocks} ALTER COLUMN pages set default ''");
Dries's avatar
 
Dries committed
921 922 923 924 925 926
    $ret[] = update_sql("UPDATE {blocks} SET pages = ''");
    $ret[] = update_sql('ALTER TABLE {blocks} ALTER COLUMN pages SET NOT NULL');

  }

  $ret[] = update_sql("DELETE FROM {variable} WHERE name = 'node_cron_last'");
927

928 929
  $ret[] = update_sql('UPDATE {blocks} SET status = 1, custom = 2 WHERE status = 0 AND custom = 1');

930 931
  return $ret;
}
932

933
function system_update_111() {
Dries's avatar
 
Dries committed
934 935
  $ret = array();

Dries's avatar
 
Dries committed
936 937
  $ret[] = update_sql("DELETE FROM {variable} WHERE name LIKE 'throttle_%'");

Dries's avatar
 
Dries committed
938 939 940
  if ($GLOBALS['db_type'] == 'mysql') {
    $ret[] = update_sql('ALTER TABLE {sessions} ADD PRIMARY KEY sid (sid)');
  }
Dries's avatar
 
Dries committed
941 942 943
  elseif ($GLOBALS['db_type'] == 'pgsql') {
    $ret[] = update_sql('ALTER TABLE {sessions} ADD UNIQUE(sid)');
  }
Dries's avatar
 
Dries committed
944 945 946 947

  return $ret;
}

948
function system_update_112() {
Dries's avatar
 
Dries committed
949 950
  $ret = array();

Dries's avatar
 
Dries committed
951 952 953 954 955 956 957 958 959 960 961 962 963 964
  if ($GLOBALS['db_type'] == 'mysql') {
    $ret[] = update_sql("CREATE TABLE {flood} (
      event varchar(64) NOT NULL default '',
      hostname varchar(128) NOT NULL default '',
      timestamp int(11) NOT NULL default '0'
     );");
  }
  elseif ($GLOBALS['db_type'] == 'pgsql') {
    $ret[] = update_sql("CREATE TABLE {flood} (
      event varchar(64) NOT NULL default '',
      hostname varchar(128) NOT NULL default '',
      timestamp integer NOT NULL default 0
     );");
  }
Dries's avatar
 
Dries committed
965 966 967 968

  return $ret;
}

969
function system_update_113() {
970 971 972
  $ret = array();

  if ($GLOBALS['db_type'] == 'mysql') {
Dries's avatar
 
Dries committed
973
    $ret[] = update_sql('ALTER TABLE {accesslog} ADD aid int(10) NOT NULL auto_increment, ADD PRIMARY KEY (aid)');
974
  }
Dries's avatar
 
Dries committed
975 976 977 978
  elseif ($GLOBALS['db_type'] == 'pgsql') {
    $ret[] = update_sql("SELECT * INTO TEMPORARY {accesslog}_t FROM {accesslog}");
    $ret[] = update_sql("DROP TABLE {accesslog}");
    $ret[] = update_sql("CREATE TABLE {accesslog} (
979
      aid serial,
Dries's avatar
 
Dries committed
980 981
      title varchar(255) default NULL,
      path varchar(255) default NULL,
Dries's avatar
Dries committed
982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999
      url varchar(255) default NULL,
      hostname varchar(128) default NULL,
      uid integer default '0',
      timestamp integer NOT NULL default '0'
    )");
    $ret[] = update_sql("INSERT INTO {accesslog} (title, path, url, hostname, uid, timestamp) SELECT title, path, url, hostname, uid, timestamp FROM {accesslog}_t");

    $ret[] = update_sql("DROP TABLE {accesslog}_t");
    $ret[] = update_sql("CREATE INDEX {accesslog}_timestamp_idx ON {accesslog} (timestamp);");

  }

  // Flush the menu cache:
  cache_clear_all('menu:', TRUE);

  return $ret;
}

1000
function system_update_114() {
Dries's avatar
Dries committed
1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053
  $ret = array();
  if ($GLOBALS['db_type'] == 'mysql') {
    $ret[] = update_sql("CREATE TABLE {queue} (
      nid int(10) unsigned NOT NULL,
      uid int(10) unsigned NOT NULL,
      vote int(3) NOT NULL default '0',
      PRIMARY KEY (nid, uid)
     )");
  }
  else if ($GLOBALS['db_type'] == 'pgsql') {
    $ret[] = update_sql("CREATE TABLE {queue} (
      nid integer NOT NULL default '0',
      uid integer NOT NULL default '0',
      vote integer NOT NULL default '0',
      PRIMARY KEY (nid, uid)
    )");
    $ret[] = update_sql("CREATE INDEX {queue}_nid_idx ON queue(nid)");
    $ret[] = update_sql("CREATE INDEX {queue}_uid_idx ON queue(uid)");
  }

  $result = db_query("SELECT nid, votes, score, users FROM {node}");
  while ($node = db_fetch_object($result)) {
    if (isset($node->users)) {
      $arr = explode(',', $node->users);
      unset($node->users);
      foreach ($arr as $value) {
        $arr2 = explode('=', trim($value));
        if (isset($arr2[0]) && isset($arr2[1])) {
          switch ($arr2[1]) {
            case '+ 1':
              db_query("INSERT INTO {queue} (nid, uid, vote) VALUES (%d, %d, %d)", $node->nid, (int)$arr2[0], 1);
              break;
            case '- 1':
              db_query("INSERT INTO {queue} (nid, uid, vote) VALUES (%d, %d, %d)", $node->nid, (int)$arr2[0], -1);
              break;
            default:
              db_query("INSERT INTO {queue} (nid, uid, vote) VALUES (%d, %d, %d)", $node->nid, (int)$arr2[0], 0);
          }
        }
      }
    }
  }

  if ($GLOBALS['db_type'] == 'mysql') {
    // Postgres only supports dropping of columns since 7.4
    $ret[] = update_sql("ALTER TABLE {node} DROP votes");
    $ret[] = update_sql("ALTER TABLE {node} DROP score");
    $ret[] = update_sql("ALTER TABLE {node} DROP users");
  }

  return $ret;
}

1054
function system_update_115() {
Dries's avatar
Dries committed
1055
  $ret = array();
1056 1057 1058 1059

  // This update has been moved to update_fix_watchdog_115 in update.php because it
  // is needed for the basic functioning of the update script.

Dries's avatar
Dries committed
1060 1061 1062
  return $ret;
}

1063
function system_update_116() {
Dries's avatar
Dries committed
1064 1065 1066
  return array(update_sql("DELETE FROM {system} WHERE name = 'admin'"));
}

1067
function system_update_117() {
Dries's avatar
Dries committed
1068 1069 1070
  $ret = array();
  if ($GLOBALS['db_type'] == 'mysql') {
    $ret[] = update_sql("CREATE TABLE {vocabulary_node_types} (
1071
                         vid int(10) NOT NULL default '0',
Dries's avatar
Dries committed
1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083
                         type varchar(16) NOT NULL default '',
                         PRIMARY KEY (vid, type))");
  }
  else if ($GLOBALS['db_type'] == 'pgsql') {
    $ret[] = update_sql("CREATE TABLE {vocabulary_node_types} (
                         vid serial,
                         type varchar(16) NOT NULL default '',
                          PRIMARY KEY (vid, type)) ");
  }
  return $ret;
}

1084
function system_update_118() {
Dries's avatar
Dries committed
1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101
  $ret = array();
  $node_types = array();
  $result = db_query('SELECT vid, nodes FROM {vocabulary}');
  while ($vocabulary = db_fetch_object($result)) {
    $node_types[$vocabulary->vid] = explode(',', $vocabulary->nodes);
  }
  foreach ($node_types as $vid => $type_array) {
    foreach ($type_array as $type) {
      db_query("INSERT INTO {vocabulary_node_types} (vid, type) VALUES (%d, '%s')", $vid, $type);
    }
  }
  if ($GLOBALS['db_type'] == 'mysql') {
    $ret[] = update_sql("ALTER TABLE {vocabulary} DROP nodes");
  }
  return $ret;
}

1102
function system_update_119() {
Dries's avatar
Dries committed
1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132
  $ret = array();

  foreach (node_get_types() as $type => $name) {
    $node_options = array();
    if (variable_get('node_status_'. $type, 1)) {
      $node_options[] = 'status';
    }
    if (variable_get('node_moderate_'. $type, 0)) {
      $node_options[] = 'moderate';
    }
    if (variable_get('node_promote_'. $type, 1)) {
      $node_options[] = 'promote';
    }
    if (variable_get('node_sticky_'. $type, 0)) {
      $node_options[] = 'sticky';
    }
    if (variable_get('node_revision_'. $type, 0)) {
      $node_options[] = 'revision';
    }
    variable_set('node_options_'. $type, $node_options);
    variable_del('node_status_'. $type);
    variable_del('node_moderate_'. $type);
    variable_del('node_promote_'. $type);
    variable_del('node_sticky_'. $type);
    variable_del('node_revision_'. $type);
  }

  return $ret;
}

1133
function system_update_120() {
Dries's avatar
Dries committed
1134 1135
  $ret = array();

1136
  // Rewrite old URL aliases. Works for both PostgreSQL and MySQL
Dries's avatar
Dries committed
1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148
  $result = db_query("SELECT pid, src FROM {url_alias} WHERE src LIKE 'blog/%%'");
  while ($alias = db_fetch_object($result)) {
    list(, $page, $op, $uid) = explode('/', $alias->src);
    if ($page == 'feed') {
      $new = "blog/$uid/feed";
      update_sql("UPDATE {url_alias} SET src = '%s' WHERE pid = '%s'", $new, $alias->pid);
    }
  }

  return $ret;
}

1149
function system_update_121() {
Dries's avatar
Dries committed
1150 1151 1152 1153 1154 1155 1156 1157
  $ret = array();

  // Remove the unused page table.
  $ret[] = update_sql('DROP TABLE {page}');

  return $ret;
}

1158
function system_update_122() {
Dries's avatar
Dries committed
1159 1160 1161 1162 1163 1164 1165

  $ret = array();
  $ret[] = update_sql("ALTER TABLE {blocks} ADD types text");
  return $ret;

}

1166
function system_update_123() {
Dries's avatar
Dries committed
1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187
  $ret = array();

  if ($GLOBALS['db_type'] == 'mysql') {
    $ret[] = update_sql("ALTER TABLE {vocabulary} ADD module varchar(255) NOT NULL default ''");
  }
  elseif ($GLOBALS['db_type'] == 'pgsql') {
    $ret[] = update_sql("ALTER TABLE {vocabulary} ADD module varchar(255)");
    $ret[] = update_sql("UPDATE {vocabulary} SET module = ''");
    $ret[] = update_sql("ALTER TABLE {vocabulary} ALTER COLUMN module SET NOT NULL");
    $ret[] = update_sql("ALTER TABLE {vocabulary} ALTER COLUMN module SET DEFAULT ''");
  }

  $ret[] = update_sql("UPDATE {vocabulary} SET module = 'taxonomy'");
  $vid = variable_get('forum_nav_vocabulary', '');
  if (!empty($vid)) {
    $ret[] = update_sql("UPDATE {vocabulary} SET module = 'forum' WHERE vid = " . $vid);
  }

  return $ret;
}

1188
function system_update_124() {
Dries's avatar
Dries committed
1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202
  $ret = array();

  if ($GLOBALS['db_type'] == 'mysql') {
    // redo update_105, correctly creating node_comment_statistics
    $ret[] = update_sql("DROP TABLE IF EXISTS {node_comment_statistics}");

    $ret[] = update_sql("CREATE TABLE {node_comment_statistics} (
      nid int(10) unsigned NOT NULL auto_increment,
      last_comment_timestamp int(11) NOT NULL default '0',
      last_comment_name varchar(60) default NULL,
      last_comment_uid int(10) NOT NULL default '0',
      comment_count int(10) unsigned NOT NULL default '0',
      PRIMARY KEY (nid),
      KEY node_comment_timestamp (last_comment_timestamp)
1203
      )");
Dries's avatar
Dries committed
1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229
  }

  else {
    // also drop incorrectly named table for PostgreSQL
    $ret[] = update_sql("DROP TABLE {node}_comment_statistics");

    $ret[] = update_sql("CREATE TABLE {node_comment_statistics} (
      nid integer NOT NULL,
      last_comment_timestamp integer NOT NULL default '0',
      last_comment_name varchar(60)  default NULL,
      last_comment_uid integer NOT NULL default '0',
      comment_count integer NOT NULL default '0',
      PRIMARY KEY (nid)
    )");

    $ret[] = update_sql("CREATE INDEX {node_comment_statistics}_timestamp_idx ON {node_comment_statistics}(last_comment_timestamp);
");
  }

  // initialize table
  $ret[] = update_sql("INSERT INTO {node_comment_statistics} (nid, last_comment_timestamp, last_comment_name, last_comment_uid, comment_count) SELECT n.nid, n.changed, NULL, 0, 0 FROM {node} n");

  // fill table
  $result = db_query("SELECT c.nid, c.timestamp, c.name, c.uid, COUNT(c.nid) as comment_count FROM {node} n LEFT JOIN {comments} c ON c.nid = n.nid WHERE c.status = 0 GROUP BY c.nid, c.timestamp, c.name, c.uid");
  while ($comment_record = db_fetch_object($result)) {
    $count = db_result(db_query('SELECT COUNT(cid) FROM {comments} WHERE nid = %d AND status = 0', $comment_record->nid));
1230
    db_query("UPDATE {node_comment_statistics} SET comment_count = %d, last_comment_timestamp = %d, last_comment_name = '%s', last_comment_uid = %d WHERE nid = %d", $count, $comment_record->timestamp, $comment_record->name, $comment_record->uid, $comment_record->nid);
Dries's avatar
Dries committed
1231 1232 1233 1234 1235
  }

  return $ret;
}

1236
function system_update_125() {
Dries's avatar
Dries committed
1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254
  // Postgres only update.
  $ret = array();

  if ($GLOBALS['db_type'] == 'pgsql') {

    $ret[] = update_sql("CREATE OR REPLACE FUNCTION if(boolean, anyelement, anyelement) RETURNS anyelement AS '
          SELECT CASE WHEN $1 THEN $2 ELSE $3 END;
        ' LANGUAGE 'sql'");

    $ret[] = update_sql("CREATE FUNCTION greatest(integer, integer, integer) RETURNS integer AS '
                          SELECT greatest($1, greatest($2, $3));
                        ' LANGUAGE 'sql'");

  }

  return $ret;
}

1255
function system_update_126() {
Dries's avatar
Dries committed
1256 1257 1258 1259 1260 1261 1262
  variable_set('forum_block_num_0', variable_get('forum_block_num', 5));
  variable_set('forum_block_num_1', variable_get('forum_block_num', 5));
  variable_del('forum_block_num');

  return array();
}

1263
function system_update_127() {
Dries's avatar
Dries committed
1264 1265 1266 1267 1268 1269 1270 1271 1272 1273
  $ret = array();
  if ($GLOBALS['db_type'] == 'pgsql') {
    $ret[] = update_sql("ALTER TABLE {poll} RENAME voters TO polled");
  }
  else if ($GLOBALS['db_type'] == 'mysql') {
    $ret[] = update_sql("ALTER TABLE {poll} CHANGE voters polled longtext");
  }
  return $ret;
}

1274
function system_update_128() {
Dries's avatar
Dries committed
1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286
  $ret = array();

  if ($GLOBALS['db_type'] == 'mysql') {
    $ret[] = update_sql('ALTER TABLE {term_node} ADD PRIMARY KEY (tid,nid)');
  }
  elseif ($GLOBALS['db_type'] == 'pgsql') {
    $ret[] = update_sql('ALTER TABLE {term_node} ADD PRIMARY KEY (tid,nid)');
  }

  return $ret;
}

1287
function system_update_129() {
Dries's avatar
Dries committed
1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299
  $ret = array();

  if ($GLOBALS['db_type'] == 'mysql') {
    $ret[] = update_sql("ALTER TABLE {vocabulary} ADD tags tinyint(3) unsigned default '0' NOT NULL");
  }
  elseif ($GLOBALS['db_type'] == 'pgsql') {
    db_add_column($ret, 'vocabulary', 'tags', 'smallint', array('default' => 0, 'not null' => TRUE));
  }

  return $ret;
}

1300
function system_update_130() {
Dries's avatar
Dries committed
1301
  $ret = array();
1302 1303 1304 1305

  // This update has been moved to update_fix_sessions in update.php because it
  // is needed for the basic functioning of the update script.

Dries's avatar
Dries committed
1306 1307 1308
  return $ret;
}

1309
function system_update_131() {
Dries's avatar
Dries committed
1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322
  $ret = array();

  if ($GLOBALS['db_type'] == 'mysql') {
    $ret[] = update_sql("ALTER TABLE {boxes} DROP INDEX title");
    // Removed recreation of the index, which is not present in the db schema
  }
  elseif ($GLOBALS['db_type'] == 'pgsql') {
    $ret[] = update_sql("ALTER TABLE {boxes} DROP CONSTRAINT {boxes}_title_key");
  }

  return $ret;
}

1323
function system_update_132() {
Dries's avatar
Dries committed
1324 1325 1326 1327 1328
  /**
   * PostgreSQL only update.
   */
  $ret = array();

1329
  if (!variable_get('update_132_done', FALSE)) {
1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342
    if ($GLOBALS['db_type'] == 'pgsql') {
      $ret[] = update_sql('DROP TABLE {search_total}');
      $ret[] = update_sql("CREATE TABLE {search_total} (
        word varchar(50) NOT NULL default '',
             count float default NULL)");
      $ret[] = update_sql('CREATE INDEX {search_total}_word_idx ON {search_total}(word)');

      /**
       * Wipe the search index
       */
      include_once './modules/search.module';
      search_wipe();
    }
Dries's avatar
Dries committed
1343

1344
    variable_del('update_132_done');
Dries's avatar
Dries committed
1345 1346 1347 1348 1349
  }

  return $ret;
}

1350
function system_update_133() {
Dries's avatar
Dries committed
1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370
  $ret = array();

  if ($GLOBALS['db_type'] == 'mysql') {
    $ret[] = update_sql("CREATE TABLE {contact} (
      subject varchar(255) NOT NULL default '',
      recipients longtext NOT NULL default '',
      reply longtext NOT NULL default ''
      )");
    $ret[] = update_sql("ALTER TABLE {users} ADD login int(11) NOT NULL default '0'");
  }
  elseif ($GLOBALS['db_type'] == 'pgsql') {
    // Table {contact} is changed in update_143() so I have moved it's creation there.
    // It was never created here for postgres because of errors.

    db_add_column($ret, 'users', 'login', 'int', array('default' => 0, 'not null' => TRUE));
  }

  return $ret;
}

1371
function system_update_134() {
Dries's avatar
Dries committed
1372
  $ret = array();
Dries's avatar
Dries committed
1373
  $ret[] = update_sql('ALTER TABLE {blocks} DROP types');
Dries's avatar
Dries committed
1374 1375 1376
  return $ret;
}

1377
function system_update_135() {
1378
  if (!variable_get('update_135_done', FALSE)) {
1379 1380 1381 1382 1383 1384 1385
    $result = db_query("SELECT delta FROM {blocks} WHERE module = 'aggregator'");
    while ($block = db_fetch_object($result)) {
      list($type, $id) = explode(':', $block->delta);
      db_query("UPDATE {blocks} SET delta = '%s' WHERE module = 'aggregator' AND delta = '%s'", $type .'-'. $id, $block->delta);
    }

    variable_del('update_135_done');
Dries's avatar
Dries committed
1386 1387 1388 1389
  }
  return array();
}

1390
function system_update_136() {
Dries's avatar
Dries committed
1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409
  $ret = array();

  switch ($GLOBALS['db_type']) {
    case 'pgsql':
      $ret[] = update_sql("DROP INDEX {users}_changed_idx"); // We drop the index first because it won't be renamed
      $ret[] = update_sql("ALTER TABLE {users} RENAME changed TO access");
      $ret[] = update_sql("CREATE INDEX {users}_access_idx on {users}(access)"); // Re-add the index
      break;
    case 'mysql':
    case 'mysqli':
      $ret[] = update_sql("ALTER TABLE {users} CHANGE COLUMN changed access int(11) NOT NULL default '0'");
      break;
  }

  $ret[] = update_sql('UPDATE {users} SET access = login WHERE login > created');
  $ret[] = update_sql('UPDATE {users} SET access = created WHERE access = 0');
  return $ret;
}

1410
function system_update_137() {
Dries's avatar
Dries committed
1411 1412
  $ret = array();

1413
  if (!variable_get('update_137_done', FALSE)) {
1414 1415 1416 1417 1418 1419 1420
    if ($GLOBALS['db_type'] == 'mysql') {
      $ret[] = update_sql("ALTER TABLE {locales_source} CHANGE location location varchar(255) NOT NULL default ''");
    }
    elseif ($GLOBALS['db_type'] == 'pgsql') {
      db_change_column($ret, 'locales_source', 'location', 'location', 'varchar(255)', array('not null' => TRUE, 'default' => "''"));
    }
    variable_del('update_137_done');
Dries's avatar
Dries committed
1421
  }
1422

Dries's avatar
Dries committed
1423 1424 1425
  return $ret;
}

1426
function system_update_138() {
Dries's avatar
Dries committed
1427 1428 1429 1430 1431 1432
  $ret = array();
  // duplicate of update_97 which never got into the default database.* files.
  $ret[] = update_sql("INSERT INTO {url_alias} (src, dst) VALUES ('node/feed', 'rss.xml')");
  return $ret;
}

1433
function system_update_139() {
Dries's avatar
Dries committed
1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447
  $ret = array();
  switch ($GLOBALS['db_type']) {
    case 'pgsql':
      db_add_column($ret, 'accesslog', 'timer', 'int', array('not null' => TRUE, 'default' => 0));
      break;
    case 'mysql':
    case 'mysqli':
      $ret[] = update_sql("ALTER TABLE {accesslog} ADD timer int(10) unsigned NOT NULL default '0'");
      break;
  }

  return $ret;
}

1448
function system_update_140() {
Dries's avatar
Dries committed
1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459
  $ret = array();

  if ($GLOBALS['db_type'] == 'mysql') {
    $ret[] = update_sql("ALTER TABLE {url_alias} ADD INDEX (src)");
  }
  elseif ($GLOBALS['db_type'] == 'pgsql') {
    $ret[] = update_sql("CREATE INDEX {url_alias}_src_idx ON {url_alias}(src)");
  }
  return $ret;
}

1460
function system_update_141() {
Dries's avatar
Dries committed
1461 1462 1463 1464 1465 1466 1467
  $ret = array();

  variable_del('upload_maxsize_total');

  return $ret;
}

1468
function system_update_142() {
Dries's avatar
Dries committed
1469
  $ret = array();
1470 1471 1472 1473

  // This update has been moved to update_fix_sessions in update.php because it
  // is needed for the basic functioning of the update script.

Dries's avatar
Dries committed
1474 1475 1476
  return $ret;
}

1477
function system_update_143() {
Dries's avatar
Dries committed
1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495
  $ret = array();

  if ($GLOBALS['db_type'] == 'mysql') {
    $ret[] = update_sql("ALTER TABLE {contact} CHANGE subject category VARCHAR(255) NOT NULL ");
    $ret[] = update_sql("ALTER TABLE {contact} ADD PRIMARY KEY (category)");
  }
  elseif ($GLOBALS['db_type'] == 'pgsql') {
    // Why the table is created here? See update_133().
    $ret[] = update_sql("CREATE TABLE {contact} (
      category varchar(255) NOT NULL default '',
      recipients text NOT NULL default '',
      reply text NOT NULL default '',
      PRIMARY KEY (category))");
  }

  return $ret;
}

1496
function system_update_144() {
Dries's avatar
Dries committed
1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512
  $ret = array();
  if ($GLOBALS['db_type'] == 'mysql') {
    $ret[] = update_sql("ALTER TABLE {node} CHANGE type type VARCHAR(32) NOT NULL");
  }
  elseif ($GLOBALS['db_type'] == 'pgsql') {
    $ret[] = update_sql("DROP INDEX {node}_type_idx"); // Drop indexes using "type" column
    $ret[] = update_sql("DROP INDEX {node}_title_idx");
    db_change_column($ret, 'node', 'type', 'type', 'varchar(32)', array('not null' => TRUE, 'default' => "''"));
    // Let's recreate the indexes
    $ret[] = update_sql("CREATE INDEX {node}_type_idx ON {node}(type)");
    $ret[] = update_sql("CREATE INDEX {node}_title_type_idx ON {node}(title,type)");
    $ret[] = update_sql("CREATE INDEX {node}_status_type_nid_idx ON {node}(status,type,nid)");
  }
  return $ret;
}

1513
function system_update_145() {
Dries's avatar
Dries committed
1514
  $default_theme = variable_get('theme_default', 'bluemarine');
1515 1516 1517 1518 1519 1520 1521

  $themes = list_themes();
  if (!array_key_exists($default_theme, $themes)) {
      variable_set('theme_default', 'bluemarine');
      $default_theme = 'bluemarine';
   }

Dries's avatar
Dries committed
1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551
  $ret = array();

  switch ($GLOBALS['db_type']) {
    case 'pgsql':
      db_change_column($ret, 'blocks', 'region', 'region', 'varchar(64)', array('default' => "'left'", 'not null' => TRUE));
      db_add_column($ret, 'blocks', 'theme', 'varchar(255)', array('not null' => TRUE, 'default' => "''"));
      break;
    case 'mysql':
    case 'mysqli':
      $ret[] = update_sql("ALTER TABLE {blocks} CHANGE region region varchar(64) default 'left' NOT NULL");
      $ret[] = update_sql("ALTER TABLE {blocks} ADD theme varchar(255) NOT NULL default ''");
      break;
  }

  // Intialize block data for default theme
  $ret[] = update_sql("UPDATE {blocks} SET region = 'left' WHERE region = '0'");
  $ret[] = update_sql("UPDATE {blocks} SET region = 'right' WHERE region = '1'");
  db_query("UPDATE {blocks} SET theme = '%s'", $default_theme);

  // Initialze block data for other enabled themes.
  $themes = list_themes();
  foreach (array_keys($themes) as $theme) {
    if (($theme != $default_theme) && $themes[$theme]->status == 1) {
      system_initialize_theme_blocks($theme);
    }
  }

  return $ret;
}

1552
function system_update_146() {
Dries's avatar
Dries committed
1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602
  $ret = array();

  if ($GLOBALS['db_type'] == 'mysql') {
    $ret[] = update_sql("CREATE TABLE {node_revisions}
                                SELECT nid, nid AS vid, uid, type, title, body, teaser, changed AS timestamp, format
                                FROM {node}");

    $ret[] = update_sql("ALTER TABLE {node_revisions} CHANGE nid nid int(10) unsigned NOT NULL default '0'");
    $ret[] = update_sql("ALTER TABLE {node_revisions} ADD log longtext");

    $ret[] = update_sql("ALTER TABLE {node} ADD vid int(10) unsigned NOT NULL default '0'");
    $ret[] = update_sql("ALTER TABLE {files} ADD vid int(10) unsigned NOT NULL default '0'");
    $ret[] = update_sql("ALTER TABLE {book} ADD vid int(10) unsigned NOT NULL default '0'");
    $ret[] = update_sql("ALTER TABLE {forum} ADD vid int(10) unsigned NOT NULL default '0'");

    $ret[] = update_sql("ALTER TABLE {book} DROP PRIMARY KEY");
    $ret[] = update_sql("ALTER TABLE {forum} DROP PRIMARY KEY");
    $ret[] = update_sql("ALTER TABLE {files} DROP PRIMARY KEY");

    $ret[] = update_sql("UPDATE {node} SET vid = nid");
    $ret[] = update_sql("UPDATE {forum} SET vid = nid");
    $ret[] = update_sql("UPDATE {book} SET vid = nid");
    $ret[] = update_sql("UPDATE {files} SET vid = nid");

    $ret[] = update_sql("ALTER TABLE {book} ADD PRIMARY KEY vid (vid)");
    $ret[] = update_sql("ALTER TABLE {forum} ADD PRIMARY KEY vid (vid)");
    $ret[] = update_sql("ALTER TABLE {node_revisions} ADD PRIMARY KEY vid (vid)");
    $ret[] = update_sql("ALTER TABLE {node_revisions} ADD KEY nid (nid)");
    $ret[] = update_sql("ALTER TABLE {node_revisions} ADD KEY uid (uid)");

    $ret[] = update_sql("CREATE TABLE {old_revisions} SELECT nid, type, revisions FROM {node} WHERE revisions != ''");

    $ret[] = update_sql("ALTER TABLE {book} ADD KEY nid (nid)");
    $ret[] = update_sql("ALTER TABLE {forum} ADD KEY nid (nid)");
    $ret[] = update_sql("ALTER TABLE {files} ADD KEY fid (fid)");
    $ret[] = update_sql("ALTER TABLE {files} ADD KEY vid (vid)");
    $vid = db_next_id('{node}_nid');
    $ret[] = update_sql("INSERT INTO {sequences} (name, id) VALUES ('{node_revisions}_vid', $vid)");
  }
  else { // pgsql
    $ret[] = update_sql("CREATE TABLE {node_revisions} (
      nid integer NOT NULL default '0',
      vid integer NOT NULL default '0',
      uid integer 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 integer NOT NULL default '0',
      format int NOT NULL default '0',
1603
      PRIMARY KEY (vid))");
1604
    $ret[] = update_sql("INSERT INTO {node_revisions} (nid, vid, uid, title, body, teaser, timestamp, format)
Dries's avatar
Dries committed
1605 1606
      SELECT nid, nid AS vid, uid, title, body, teaser, changed AS timestamp, format
      FROM {node}");
1607
    $ret[] = update_sql('CREATE INDEX {node_revisions}_nid_idx ON {node_revisions}(nid)');
Dries's avatar
Dries committed
1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626
    $ret[] = update_sql('CREATE INDEX {node_revisions}_uid_idx ON {node_revisions}(uid)');
    $vid = db_next_id('{node}_nid');
    $ret[] = update_sql("CREATE SEQUENCE {node_revisions}_vid_seq INCREMENT 1 START $vid");

    db_add_column($ret, 'node',  'vid', 'int', array('not null' => TRUE, 'default' => 0));
    db_add_column($ret, 'files', 'vid', 'int', array('not null' => TRUE, 'default' => 0));
    db_add_column($ret, 'book',  'vid', 'int', array('not null' => TRUE, 'default' => 0));
    db_add_column($ret, 'forum', 'vid', 'int', array('not null' => TRUE, 'default' => 0));

    $ret[] = update_sql("ALTER TABLE {book} DROP CONSTRAINT {book}_pkey");
    $ret[] = update_sql("ALTER TABLE {forum} DROP CONSTRAINT {forum}_pkey");
    $ret[] = update_sql("ALTER TABLE {files} DROP CONSTRAINT {files}_pkey");

    $ret[] = update_sql("UPDATE {node} SET vid = nid");
    $ret[] = update_sql("UPDATE {forum} SET vid = nid");
    $ret[] = update_sql("UPDATE {book} SET vid = nid");
    $ret[] = update_sql("UPDATE {files} SET vid = nid");

    $ret[] = update_sql("ALTER TABLE {book} ADD PRIMARY KEY (vid)");
1627
    $ret[] = update_sql("ALTER TABLE {forum} ADD PRIMARY KEY (vid)");
Dries's avatar
Dries committed
1628 1629 1630 1631

    $ret[] = update_sql("CREATE TABLE {old_revisions} AS SELECT nid, type, revisions FROM {node} WHERE revisions != ''");

    $ret[] = update_sql('CREATE INDEX {node}_vid_idx ON {node}(vid)');
1632
    $ret[] = update_sql('CREATE INDEX {forum}_nid_idx ON {forum}(nid)');
Dries's avatar
Dries committed
1633 1634 1635 1636 1637 1638 1639 1640 1641 1642
    $ret[] = update_sql('CREATE INDEX {files}_fid_idx ON {files}(fid)');
    $ret[] = update_sql('CREATE INDEX {files}_vid_idx ON {files}(vid)');
  }

  // Move logs too.
  $result = db_query("SELECT nid, log FROM {book} WHERE log != ''");
  while ($row = db_fetch_object($result)) {
    db_query("UPDATE {node_revisions} SET log = '%s' WHERE vid = %d", $row->log, $row->nid);
  }

Dries's avatar
Dries committed
1643 1644 1645 1646 1647
  $ret[] = update_sql("ALTER TABLE {book} DROP log");
  $ret[] = update_sql("ALTER TABLE {node} DROP teaser");
  $ret[] = update_sql("ALTER TABLE {node} DROP body");
  $ret[] = update_sql("ALTER TABLE {node} DROP format");
  $ret[] = update_sql("ALTER TABLE {node} DROP revisions");
Dries's avatar
Dries committed
1648 1649 1650 1651

  return $ret;
}

1652
function system_update_147() {
Dries's avatar
Dries committed
1653 1654 1655 1656 1657 1658 1659 1660 1661 1662
  $ret = array();

  // this update is mysql only, pgsql should get it right in the first try.
  if ($GLOBALS['db_type'] == 'mysql') {
    $ret[] = update_sql("ALTER TABLE {node_revisions} DROP type");
  }

  return $ret;
}

1663
function system_update_148() {
Dries's avatar
Dries committed
1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674
  $ret = array();

  // Add support for tracking users' session ids (useful for tracking anon users)