system.install 120 KB
Newer Older
Dries's avatar
 
Dries committed
1
<?php
2
// $Id$
3

4 5 6 7 8 9 10 11 12 13 14
define('DRUPAL_MINIMUM_PHP',    '4.3.3');
define('DRUPAL_MINIMUM_MYSQL',  '3.23.17'); // If using MySQL
define('DRUPAL_MINIMUM_PGSQL',  '7.3');  // If using PostgreSQL
define('DRUPAL_MINIMUM_APACHE', '1.3');  // If using Apache

/**
 * Test and report Drupal installation requirements.
 */
function system_requirements($phase) {
  $requirements = array();
  // Ensure translations don't break at install time
15
  $t = get_t();
16 17 18 19 20 21

  // Report Drupal version
  if ($phase == 'runtime') {
    $requirements['drupal'] = array(
      'title' => $t('Drupal'),
      'value' => VERSION,
Steven Wittens's avatar
Steven Wittens committed
22
      'severity' => REQUIREMENT_INFO
23 24 25 26
    );
  }

  // Test web server
Steven Wittens's avatar
Steven Wittens committed
27
  $software = $_SERVER['SERVER_SOFTWARE'];
28 29
  $requirements['webserver'] = array(
    'title' => $t('Web server'),
Steven Wittens's avatar
Steven Wittens committed
30
    'value' => $software
31 32
  );
  // Use server info string, if present.
Steven Wittens's avatar
Steven Wittens committed
33 34
  if ($software && preg_match('![0-9]!', $software)) {
    list($server, $version) = split('[ /]', $software);
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
    switch ($server) {
      case 'Apache':
        if (version_compare($version, DRUPAL_MINIMUM_APACHE) < 0) {
          $requirements['webserver']['description'] = $t('Your Apache server is too old. Drupal requires at least Apache %version.', array('%version' => DRUPAL_MINIMUM_APACHE));
          $requirements['webserver']['severity'] = REQUIREMENT_ERROR;
        }
        break;

      default:
        $requirements['webserver']['description'] = $t('The web server you\'re using has not been tested with Drupal and might not work properly.');
        $requirements['webserver']['severity'] = REQUIREMENT_WARNING;
        break;
    }
  }
  else {
Steven Wittens's avatar
Steven Wittens committed
50 51
    $requirements['webserver']['value'] = $software ? $software : $t('Unknown');
    $requirements['webserver']['description'] = $t('Unable to determine your web server type and version. Drupal might not work properly.');
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
    $requirements['webserver']['severity'] = REQUIREMENT_WARNING;
  }

  // Test PHP version
  $requirements['php'] = array(
    'title' => $t('PHP'),
    'value' => ($phase == 'runtime') ? l(phpversion(), 'admin/logs/status/php') : phpversion(),
  );
  if (version_compare(phpversion(), DRUPAL_MINIMUM_PHP) < 0) {
    $requirements['php']['description'] = $t('Your PHP installation is too old. Drupal requires at least PHP %version.', array('%version' => DRUPAL_MINIMUM_PHP));
    $requirements['php']['severity'] = REQUIREMENT_ERROR;
  }

  // Test DB version
  global $db_type;
  if (function_exists('db_status_report')) {
    $requirements += db_status_report($phase);
  }

  // Test settings.php file writability
  if ($phase == 'runtime') {
    if (!drupal_verify_install_file(conf_path() .'/settings.php', FILE_EXIST|FILE_READABLE|FILE_NOT_WRITABLE)) {
      $requirements['settings.php'] = array(
        'value' => $t('Not protected'),
        'severity' => REQUIREMENT_ERROR,
        'description' => $t('The file %file is not protected from modifications and poses a security risk. You must change the file\'s permissions to be non-writable.', array('%file' => conf_path() .'/settings.php')),
      );
    }
    else {
      $requirements['settings.php'] = array(
        'value' => $t('Protected'),
      );
    }
    $requirements['settings.php']['title'] = $t('Configuration file');
  }

  // Report cron status
  if ($phase == 'runtime') {
    $cron_last = variable_get('cron_last', NULL);

    if (is_numeric($cron_last)) {
      $requirements['cron']['value'] = $t('Last run !time ago', array('!time' => format_interval(time() - $cron_last)));
    }
    else {
      $requirements['cron'] = array(
        'description' => $t('Cron has not run. It appears cron jobs have not been setup on your system. Please check the help pages for <a href="@url">configuring cron jobs</a>.', array('@url' => 'http://drupal.org/cron')),
        'severity' => REQUIREMENT_ERROR,
        'value' => $t('Never run'),
      );
    }

    $requirements['cron']['description'] .= ' '. t('You can <a href="@cron">run cron manually</a>.', array('@cron' => url('admin/logs/status/run-cron')));

    $requirements['cron']['title'] = $t('Cron maintenance tasks');
  }

  // Test Unicode library
  include_once './includes/unicode.inc';
  $requirements = array_merge($requirements, unicode_requirements());

  return $requirements;
}


116 117 118
/**
 * Implementation of hook_install().
 */
119 120 121 122 123
function system_install() {
  switch ($GLOBALS['db_type']) {
    case 'mysql':
    case 'mysqli':
      db_query("CREATE TABLE {access} (
124
        aid tinyint NOT NULL auto_increment,
125 126
        mask varchar(255) NOT NULL default '',
        type varchar(255) NOT NULL default '',
127
        status tinyint NOT NULL default '0',
128 129 130 131
        PRIMARY KEY (aid)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {authmap} (
132 133
        aid int unsigned NOT NULL auto_increment,
        uid int NOT NULL default '0',
134 135 136 137 138 139 140 141 142 143
        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 '',
144 145
        status tinyint DEFAULT '0' NOT NULL,
        weight tinyint DEFAULT '0' NOT NULL,
146
        region varchar(64) DEFAULT 'left' NOT NULL,
147 148 149
        custom tinyint DEFAULT '0' NOT NULL,
        throttle tinyint DEFAULT '0' NOT NULL,
        visibility tinyint DEFAULT '0' NOT NULL,
150 151
        pages text DEFAULT '' NOT NULL,
        title varchar(64) DEFAULT '' NOT NULL
152 153 154
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {boxes} (
155
        bid tinyint NOT NULL auto_increment,
156 157
        body longtext,
        info varchar(128) NOT NULL default '',
158
        format int NOT NULL default '0',
159 160 161 162 163 164 165
        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,
166 167
        expire int NOT NULL default '0',
        created int NOT NULL default '0',
168 169 170 171
        headers text,
        PRIMARY KEY (cid),
        INDEX expire (expire)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
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
      db_query("CREATE TABLE {cache_filter} (
        cid varchar(255) NOT NULL default '',
        data longblob,
        expire int NOT NULL default '0',
        created int NOT NULL default '0',
        headers text,
        PRIMARY KEY (cid),
        INDEX expire (expire)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
      db_query("CREATE TABLE {cache_menu} (
        cid varchar(255) NOT NULL default '',
        data longblob,
        expire int NOT NULL default '0',
        created int NOT NULL default '0',
        headers text,
        PRIMARY KEY (cid),
        INDEX expire (expire)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
      db_query("CREATE TABLE {cache_page} (
        cid varchar(255) NOT NULL default '',
        data longblob,
        expire int NOT NULL default '0',
        created int NOT NULL default '0',
        headers text,
        PRIMARY KEY (cid),
        INDEX expire (expire)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
199 200

      db_query("CREATE TABLE {comments} (
201 202 203 204
        cid int NOT NULL auto_increment,
        pid int NOT NULL default '0',
        nid int NOT NULL default '0',
        uid int NOT NULL default '0',
205 206 207
        subject varchar(64) NOT NULL default '',
        comment longtext NOT NULL,
        hostname varchar(128) NOT NULL default '',
208 209 210 211
        timestamp int NOT NULL default '0',
        score mediumint NOT NULL default '0',
        status tinyint unsigned NOT NULL default '0',
        format int NOT NULL default '0',
212 213 214 215 216 217 218 219 220 221
        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} (
222 223
        nid int unsigned NOT NULL auto_increment,
        last_comment_timestamp int NOT NULL default '0',
224
        last_comment_name varchar(60) default NULL,
225 226
        last_comment_uid int NOT NULL default '0',
        comment_count int unsigned NOT NULL default '0',
227 228 229 230 231
        PRIMARY KEY (nid),
        KEY node_comment_timestamp (last_comment_timestamp)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {files} (
232 233
        fid int unsigned NOT NULL default 0,
        nid int unsigned NOT NULL default 0,
234 235 236
        filename varchar(255) NOT NULL default '',
        filepath varchar(255) NOT NULL default '',
        filemime varchar(255) NOT NULL default '',
237
        filesize int unsigned NOT NULL default 0,
238 239 240 241
        PRIMARY KEY (fid)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {file_revisions} (
242 243
        fid int unsigned NOT NULL default 0,
        vid int unsigned NOT NULL default 0,
244
        description varchar(255) NOT NULL default '',
245
        list tinyint unsigned NOT NULL default 0,
246 247 248 249
        PRIMARY KEY (fid, vid)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {filter_formats} (
250
        format int NOT NULL auto_increment,
251 252
        name varchar(255) NOT NULL default '',
        roles varchar(255) NOT NULL default '',
253
        cache tinyint NOT NULL default '0',
254 255 256 257 258
        PRIMARY KEY (format),
        UNIQUE KEY (name)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {filters} (
259
        format int NOT NULL default '0',
260
        module varchar(64) NOT NULL default '',
261 262
        delta tinyint DEFAULT '0' NOT NULL,
        weight tinyint DEFAULT '0' NOT NULL,
263 264 265 266 267 268
        INDEX (weight)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {flood} (
        event varchar(64) NOT NULL default '',
        hostname varchar(128) NOT NULL default '',
269
        timestamp int NOT NULL default '0'
270 271 272
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {history} (
273 274 275
        uid int NOT NULL default '0',
        nid int NOT NULL default '0',
        timestamp int NOT NULL default '0',
276 277 278 279
        PRIMARY KEY (uid,nid)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {menu} (
280 281
        mid int unsigned NOT NULL default '0',
        pid int unsigned NOT NULL default '0',
282 283 284
        path varchar(255) NOT NULL default '',
        title varchar(255) NOT NULL default '',
        description varchar(255) NOT NULL default '',
285 286
        weight tinyint NOT NULL default '0',
        type int unsigned NOT NULL default '0',
287 288 289 290 291
        PRIMARY KEY (mid)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");


      db_query("CREATE TABLE {node} (
292 293
        nid int unsigned NOT NULL auto_increment,
        vid int unsigned NOT NULL default '0',
294 295
        type varchar(32) NOT NULL default '',
        title varchar(128) NOT NULL default '',
296 297 298 299 300 301 302 303
        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',
304 305 306 307 308 309 310 311 312 313 314 315 316 317 318
        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} (
319 320
        nid int unsigned NOT NULL default '0',
        gid int unsigned NOT NULL default '0',
321
        realm varchar(255) NOT NULL default '',
322 323 324
        grant_view tinyint unsigned NOT NULL default '0',
        grant_update tinyint unsigned NOT NULL default '0',
        grant_delete tinyint unsigned NOT NULL default '0',
325 326 327 328
        PRIMARY KEY (nid,gid,realm)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {node_revisions} (
329 330 331
        nid int unsigned NOT NULL,
        vid int unsigned NOT NULL,
        uid int NOT NULL default '0',
332 333 334 335
        title varchar(128) NOT NULL default '',
        body longtext NOT NULL default '',
        teaser longtext NOT NULL default '',
        log longtext NOT NULL default '',
336 337
        timestamp int NOT NULL default '0',
        format int NOT NULL default '0',
338 339 340 341 342
        PRIMARY KEY  (vid),
        KEY nid (nid),
        KEY uid (uid)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

343 344 345 346 347 348
      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,
349
        has_title tinyint unsigned NOT NULL,
350
        title_label varchar(255) NOT NULL default '',
351
        has_body tinyint unsigned NOT NULL,
352
        body_label varchar(255) NOT NULL default '',
353 354 355 356
        min_word_count smallint unsigned NOT NULL,
        custom tinyint NOT NULL DEFAULT '0',
        modified tinyint NOT NULL DEFAULT '0',
        locked tinyint NOT NULL DEFAULT '0',
357 358 359 360
        orig_type varchar(255) NOT NULL default '',
        PRIMARY KEY (type)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

361
      db_query("CREATE TABLE {url_alias} (
362
        pid int unsigned NOT NULL auto_increment,
363 364 365 366 367 368 369 370
        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} (
371
        rid int unsigned NOT NULL default '0',
372
        perm longtext,
373
        tid int unsigned NOT NULL default '0',
374 375 376 377
        KEY rid (rid)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {role} (
378
        rid int unsigned NOT NULL auto_increment,
379 380 381 382 383 384 385 386
        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,
387
        rid int unsigned NOT NULL,
388 389 390 391
        PRIMARY KEY (module, delta, rid)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {sessions} (
392
        uid int unsigned NOT NULL,
393 394
        sid varchar(32) NOT NULL default '',
        hostname varchar(128) NOT NULL default '',
395 396
        timestamp int NOT NULL default '0',
        cache int NOT NULL default '0',
397 398 399 400 401 402 403 404
        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 '',
405
        id int unsigned NOT NULL default '0',
406 407 408 409
        PRIMARY KEY (name)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {node_counter} (
410 411 412 413
        nid int NOT NULL default '0',
        totalcount bigint unsigned NOT NULL default '0',
        daycount mediumint unsigned NOT NULL default '0',
        timestamp int unsigned NOT NULL default '0',
414 415 416 417 418 419 420 421 422 423 424
        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 '',
425 426 427 428 429
        status int NOT NULL default '0',
        throttle tinyint DEFAULT '0' NOT NULL,
        bootstrap int NOT NULL default '0',
        schema_version smallint NOT NULL default -1,
        weight int NOT NULL default '0',
430 431 432 433 434
        PRIMARY KEY (filename),
        KEY (weight)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {term_data} (
435 436
        tid int unsigned NOT NULL auto_increment,
        vid int unsigned NOT NULL default '0',
437 438
        name varchar(255) NOT NULL default '',
        description longtext,
439
        weight tinyint NOT NULL default '0',
440 441 442 443 444
        PRIMARY KEY (tid),
        KEY vid (vid)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {term_hierarchy} (
445 446
        tid int unsigned NOT NULL default '0',
        parent int unsigned NOT NULL default '0',
447 448 449 450 451 452
        KEY tid (tid),
        KEY parent (parent),
        PRIMARY KEY (tid, parent)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {term_node} (
453 454
        nid int unsigned NOT NULL default '0',
        tid int unsigned NOT NULL default '0',
455 456 457 458 459 460
        KEY nid (nid),
        KEY tid (tid),
        PRIMARY KEY (tid,nid)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {term_relation} (
461 462
        tid1 int unsigned NOT NULL default '0',
        tid2 int unsigned NOT NULL default '0',
463 464 465 466 467
        KEY tid1 (tid1),
        KEY tid2 (tid2)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {term_synonym} (
468
        tid int unsigned NOT NULL default '0',
469 470 471 472 473 474
        name varchar(255) NOT NULL default '',
        KEY tid (tid),
        KEY name (name(3))
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      db_query("CREATE TABLE {users} (
475
        uid int unsigned NOT NULL default '0',
476 477 478
        name varchar(60) NOT NULL default '',
        pass varchar(32) NOT NULL default '',
        mail varchar(64) default '',
479 480 481
        mode tinyint NOT NULL default '0',
        sort tinyint default '0',
        threshold tinyint default '0',
482 483
        theme varchar(255) NOT NULL default '',
        signature varchar(255) NOT NULL default '',
484 485 486 487
        created int NOT NULL default '0',
        access int NOT NULL default '0',
        login int NOT NULL default '0',
        status tinyint NOT NULL default '0',
488 489 490 491 492 493 494 495 496 497 498
        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} (
499 500
        uid int unsigned NOT NULL default '0',
        rid int unsigned NOT NULL default '0',
501 502 503 504 505 506 507 508 509 510
        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} (
511
        vid int unsigned NOT NULL auto_increment,
512 513 514
        name varchar(255) NOT NULL default '',
        description longtext,
        help varchar(255) NOT NULL default '',
515 516 517 518 519
        relations tinyint unsigned NOT NULL default '0',
        hierarchy tinyint unsigned NOT NULL default '0',
        multiple tinyint unsigned NOT NULL default '0',
        required tinyint unsigned NOT NULL default '0',
        tags tinyint unsigned NOT NULL default '0',
520
        module varchar(255) NOT NULL default '',
521
        weight tinyint NOT NULL default '0',
522 523 524 525
        PRIMARY KEY (vid)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

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

      db_query("CREATE TABLE {watchdog} (
532 533
        wid int NOT NULL auto_increment,
        uid int NOT NULL default '0',
534 535
        type varchar(16) NOT NULL default '',
        message longtext NOT NULL,
536
        severity tinyint unsigned NOT NULL default '0',
537 538 539 540
        link varchar(255) NOT NULL default '',
        location varchar(128) NOT NULL default '',
        referer varchar(128) NOT NULL default '',
        hostname varchar(128) NOT NULL default '',
541
        timestamp int NOT NULL default '0',
542 543 544 545 546
        PRIMARY KEY (wid)
      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");

      break;
    case 'pgsql':
547
      /* create unsigned types */
548 549 550
      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)");
551 552 553 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 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599

      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)
      )");
600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623
      db_query("CREATE TABLE {cache_filter} (
        cid varchar(255) NOT NULL default '',
        data bytea,
        expire int NOT NULL default '0',
        created int NOT NULL default '0',
        headers text,
        PRIMARY KEY (cid)
      )");
      db_query("CREATE TABLE {cache_menu} (
        cid varchar(255) NOT NULL default '',
        data bytea,
        expire int NOT NULL default '0',
        created int NOT NULL default '0',
        headers text,
        PRIMARY KEY (cid)
      )");
      db_query("CREATE TABLE {cache_page} (
        cid varchar(255) NOT NULL default '',
        data bytea,
        expire int NOT NULL default '0',
        created int NOT NULL default '0',
        headers text,
        PRIMARY KEY (cid)
      )");
624
      db_query("CREATE INDEX {cache}_expire_idx ON {cache} (expire)");
625 626 627
      db_query("CREATE INDEX {cache_filter}_expire_idx ON {cache_filter} (expire)");
      db_query("CREATE INDEX {cache_menu}_expire_idx ON {cache_menu} (expire)");
      db_query("CREATE INDEX {cache_page}_expire_idx ON {cache_page} (expire)");
628 629 630 631 632 633 634 635 636 637 638

      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',
639
        status smallint_unsigned NOT NULL default '0',
640 641 642 643 644 645 646 647 648 649 650 651 652 653 654
        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',
655
        comment_count int_unsigned NOT NULL default '0',
656 657 658 659 660
        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} (
661 662
        fid int_unsigned NOT NULL default 0,
        nid int_unsigned NOT NULL default 0,
663 664 665
        filename varchar(255) NOT NULL default '',
        filepath varchar(255) NOT NULL default '',
        filemime varchar(255) NOT NULL default '',
666
        filesize int_unsigned NOT NULL default 0,
667 668
        PRIMARY KEY (fid)
      )");
669

670
      db_query("CREATE TABLE {file_revisions} (
671 672
        fid int_unsigned NOT NULL default 0,
        vid int_unsigned NOT NULL default 0,
673
        description varchar(255) NOT NULL default '',
674
        list smallint_unsigned NOT NULL default 0,
675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709
        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),
710
        pid int_unsigned NOT NULL default '0',
711 712 713 714
        path varchar(255) NOT NULL default '',
        title varchar(255) NOT NULL default '',
        description varchar(255) NOT NULL default '',
        weight smallint NOT NULL default '0',
715
        type int_unsigned NOT NULL default '0',
716 717 718 719 720 721
        PRIMARY KEY (mid)
      )");
      db_query("ALTER SEQUENCE {menu}_mid_seq MINVALUE 2 RESTART 2");

      db_query("CREATE TABLE {node} (
        nid serial CHECK (nid >= 0),
722
        vid int_unsigned NOT NULL default '0',
723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747
        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} (
748 749
        nid int_unsigned NOT NULL default '0',
        gid int_unsigned NOT NULL default '0',
750
        realm varchar(255) NOT NULL default '',
751 752 753
        grant_view smallint_unsigned NOT NULL default '0',
        grant_update smallint_unsigned NOT NULL default '0',
        grant_delete smallint_unsigned NOT NULL default '0',
754 755 756 757
        PRIMARY KEY (nid,gid,realm)
      )");

      db_query("CREATE TABLE {node_revisions} (
758
        nid int_unsigned NOT NULL,
759
        vid serial CHECK (vid >= 0),
760 761 762 763 764 765 766 767 768 769 770 771
        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)");

772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789
      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)
      )");

790 791 792 793 794 795 796 797 798 799
      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} (
800
        rid int_unsigned NOT NULL default '0',
801
        perm text,
802
        tid int_unsigned NOT NULL default '0'
803 804 805 806 807 808 809 810 811 812 813 814 815
      )");
      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,
816
        rid int_unsigned NOT NULL,
817 818 819 820
        PRIMARY KEY (module, delta, rid)
      )");

      db_query("CREATE TABLE {sessions} (
821
        uid int_unsigned NOT NULL,
822 823 824 825 826 827 828 829 830 831 832 833 834
        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 '',
835
        id int_unsigned NOT NULL default '0',
836 837 838 839 840
        PRIMARY KEY (name)
      )"); */

      db_query("CREATE TABLE {node_counter} (
        nid int NOT NULL default '0',
841 842 843
        totalcount bigint_unsigned NOT NULL default '0',
        daycount int_unsigned NOT NULL default '0',
        timestamp int_unsigned NOT NULL default '0',
844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865
        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),
866
        vid int_unsigned NOT NULL default '0',
867 868 869 870 871 872 873 874
        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} (
875 876
        tid int_unsigned NOT NULL default '0',
        parent int_unsigned NOT NULL default '0',
877 878 879 880 881 882
        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} (
883 884
        nid int_unsigned NOT NULL default '0',
        tid int_unsigned NOT NULL default '0',
885 886 887 888 889 890
        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} (
891 892
        tid1 int_unsigned NOT NULL default '0',
        tid2 int_unsigned NOT NULL default '0'
893 894 895 896 897
      )");
      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} (
898
        tid int_unsigned NOT NULL default '0',
899 900 901 902 903 904
        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} (
905
        uid serial CHECK (uid >= 0),
906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928
        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 TABLE {users_roles} (
929 930
        uid int_unsigned NOT NULL default '0',
        rid int_unsigned NOT NULL default '0',
931 932 933 934 935 936 937 938 939 940 941 942 943 944
        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 '',
945 946 947 948 949
        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',
950 951 952 953 954 955
        module varchar(255) NOT NULL default '',
        weight smallint NOT NULL default '0',
        PRIMARY KEY (vid)
      )");

      db_query("CREATE TABLE {vocabulary_node_types} (
956
        vid int_unsigned NOT NULL DEFAULT '0',
957 958 959 960 961 962 963 964 965
        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,
966
        severity smallint_unsigned NOT NULL default '0',
967 968 969 970 971 972 973 974
        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;
975
  }
976

977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994
  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)");

995 996
  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')");
997 998 999
  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)");
1000 1001 1002 1003 1004

  db_query("INSERT INTO {filters} VALUES (1,'filter',3,0)");
  db_query("INSERT INTO {filters} VALUES (1,'filter',0,1)");
  db_query("INSERT INTO {filters} VALUES (1,'filter',2,2)");

1005
  db_query("INSERT INTO {filters} VALUES (2,'filter',1,0)");
1006 1007 1008 1009

  db_query("INSERT INTO {filters} VALUES (3,'filter',3,0)");
  db_query("INSERT INTO {filters} VALUES (3,'filter',2,1)");

1010 1011
  db_query("INSERT INTO {variable} (name,value) VALUES ('filter_html_1','i:1;')");

1012
  db_query("INSERT INTO {variable} (name, value) VALUES ('node_options_forum', '%s')", 'a:1:{i:0;s:6:"status";}');
1013

1014
  db_query("INSERT INTO {menu} (mid, pid, path, title, description, weight, type) VALUES (2, 0, '', 'Primary links', '', 0, 115)");
1015 1016 1017 1018 1019
  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
1020

1021
function system_update_110() {
1022 1023 1024 1025
  $ret = array();

  // TODO: needs PGSQL version
  if ($GLOBALS['db_type'] == 'mysql') {
1026 1027 1028 1029
    /*
    ** Search
    */

1030 1031 1032
    $ret[] = update_sql('DROP TABLE {search_index}');
    $ret[] = update_sql("CREATE TABLE {search_index} (
      word varchar(50) NOT NULL default '',
1033
      sid int unsigned NOT NULL default '0',
1034
      type varchar(16) default NULL,
1035
      fromsid int unsigned NOT NULL default '0',
1036
      fromtype varchar(16) default NULL,
1037
      score int unsigned default NULL,
1038
      KEY sid (sid),
1039
      KEY fromsid (fromsid),
1040
      KEY word (word)
1041
      )");
1042 1043 1044

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

1049 1050 1051 1052 1053 1054

    /*
    ** Blocks
    */

    $ret[] = update_sql('ALTER TABLE {blocks} DROP path');
1055
    $ret[] = update_sql('ALTER TABLE {blocks} ADD visibility tinyint NOT NULL');
1056
    $ret[] = update_sql('ALTER TABLE {blocks} ADD pages text NOT NULL');
1057
  }
Dries's avatar
 
Dries committed
1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079
  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
      )");

1080

Dries's avatar
 
Dries committed
1081 1082 1083 1084 1085 1086 1087
    /*
    ** 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
1088
    $ret[] = update_sql("ALTER TABLE {blocks} ALTER COLUMN visibility set default 0");
Dries's avatar
 
Dries committed
1089 1090 1091
    $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');
1092
    $ret[] = update_sql("ALTER TABLE {blocks} ALTER COLUMN pages set default ''");
Dries's avatar
 
Dries committed
1093 1094 1095 1096 1097 1098
    $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'");
1099

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

1102 1103
  return $ret;
}
1104

1105
function system_update_111() {
Dries's avatar
 
Dries committed
1106 1107
  $ret = array();

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

Dries's avatar
 
Dries committed
1110 1111 1112
  if ($GLOBALS['db_type'] == 'mysql') {
    $ret[] = update_sql('ALTER TABLE {sessions} ADD PRIMARY KEY sid (sid)');
  }
Dries's avatar
 
Dries committed
1113 1114 1115
  elseif ($GLOBALS['db_type'] == 'pgsql') {
    $ret[] = update_sql('ALTER TABLE {sessions} ADD UNIQUE(sid)');
  }
Dries's avatar
 
Dries committed
1116 1117 1118 1119

  return $ret;
}

1120
function system_update_112() {
Dries's avatar
 
Dries committed
1121 1122
  $ret = array();

Dries's avatar
 
Dries committed
1123 1124 1125 1126
  if ($GLOBALS['db_type'] == 'mysql') {
    $ret[] = update_sql("CREATE TABLE {flood} (
      event varchar(64) NOT NULL default '',
      hostname varchar(128) NOT NULL default '',
1127
      timestamp int NOT NULL default '0'
Dries's avatar
 
Dries committed
1128 1129 1130 1131 1132 1133 1134 1135 1136
     );");
  }
  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
1137 1138 1139 1140

  return $ret;
}

1141
function system_update_113() {
1142 1143 1144
  $ret = array();

  if ($GLOBALS['db_type'] == 'mysql') {
1145
    $ret[] = update_sql('ALTER TABLE {accesslog} ADD aid int NOT NULL auto_increment, ADD PRIMARY KEY (aid)');
1146
  }
Dries's avatar
 
Dries committed
1147 1148 1149 1150
  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} (
1151
      aid serial,
Dries's avatar
 
Dries committed
1152 1153
      title varchar(255) default NULL,
      path varchar(255) default NULL,
Dries's avatar
Dries committed
1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171
      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;
}

1172
function system_update_114() {
Dries's avatar
Dries committed
1173 1174 1175
  $ret = array();
  if ($GLOBALS['db_type'] == 'mysql') {
    $ret[] = update_sql("CREATE TABLE {queue} (
1176 1177 1178
      nid int unsigned NOT NULL,
      uid int unsigned NOT NULL,
      vote int NOT NULL default '0',
Dries's avatar
Dries committed
1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225
      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;
}

1226
function system_update_115() {
Dries's avatar
Dries committed
1227
  $ret = array();
1228 1229 1230 1231

  // 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
1232 1233 1234
  return $ret;
}

1235
function system_update_116() {
Dries's avatar
Dries committed
1236 1237 1238
  return array(update_sql("DELETE FROM {system} WHERE name = 'admin'"));
}

1239
function system_update_117() {
Dries's avatar
Dries committed
1240 1241 1242
  $ret = array();
  if ($GLOBALS['db_type'] == 'mysql') {
    $ret[] = update_sql("CREATE TABLE {vocabulary_node_types} (
1243
                         vid int NOT NULL default '0',
Dries's avatar
Dries committed
1244 1245 1246 1247