예제 #1
0
 function update($pageid, $title, $text)
 {
     ## We don't want to index older revisions
     $SQL = "UPDATE pagecontent SET textvector = NULL WHERE old_id IN " . "(SELECT rev_text_id FROM revision WHERE rev_page = " . intval($pageid) . " ORDER BY rev_text_id DESC OFFSET 1)";
     $this->db->query($SQL);
     return true;
 }
예제 #2
0
 function query($sql, $fname = '', $tempIgnore = false)
 {
     /* ugh! */
     $chk = "ALTER TABLE interwiki ";
     $csz = strlen($chk);
     if (substr($sql, 0, $csz) == $chk) {
         $sql = "ALTER TABLE public.plugin_mediawiki_interwiki " . substr($sql, $csz);
     }
     return DatabasePostgres::query($sql, $fname, $tempIgnore);
 }
예제 #3
0
 protected function checkIpbAdress()
 {
     if ($this->db->indexExists('ipblocks', 'ipb_address')) {
         $this->output("Removing deprecated index 'ipb_address'...\n");
         $this->db->query('DROP INDEX ipb_address');
     }
     if ($this->db->indexExists('ipblocks', 'ipb_address_unique')) {
         $this->output("...have ipb_address_unique\n");
     } else {
         $this->output("Adding ipb_address_unique index\n");
         $this->applyPatch('patch-ipb_address_unique.sql');
     }
 }
 protected function checkIndex($index, $should_be, $good_def)
 {
     $pu = $this->db->indexAttributes($index);
     if (!empty($pu) && $pu != $should_be) {
         $this->output("Dropping obsolete version of index '{$index}'\n");
         $this->db->query("DROP INDEX \"" . $index . "\"");
         $pu = array();
     } else {
         $this->output("...no need to drop index '{$index}'\n");
     }
     if (empty($pu)) {
         $this->output("Creating index '{$index}'\n");
         $this->db->query($good_def);
     } else {
         $this->output("...index '{$index}' exists\n");
     }
 }
예제 #5
0
    /**
     * @param DatabasePostgres $db
     * @param string $table
     * @param string $field
     * @return null|PostgresField
     */
    static function fromText(DatabasePostgres $db, $table, $field)
    {
        $q = <<<SQL
SELECT
 attnotnull, attlen, conname AS conname,
 atthasdef,
 adsrc,
 COALESCE(condeferred, 'f') AS deferred,
 COALESCE(condeferrable, 'f') AS deferrable,
 CASE WHEN typname = 'int2' THEN 'smallint'
  WHEN typname = 'int4' THEN 'integer'
  WHEN typname = 'int8' THEN 'bigint'
  WHEN typname = 'bpchar' THEN 'char'
 ELSE typname END AS typname
FROM pg_class c
JOIN pg_namespace n ON (n.oid = c.relnamespace)
JOIN pg_attribute a ON (a.attrelid = c.oid)
JOIN pg_type t ON (t.oid = a.atttypid)
LEFT JOIN pg_constraint o ON (o.conrelid = c.oid AND a.attnum = ANY(o.conkey) AND o.contype = 'f')
LEFT JOIN pg_attrdef d on c.oid=d.adrelid and a.attnum=d.adnum
WHERE relkind = 'r'
AND nspname=%s
AND relname=%s
AND attname=%s;
SQL;
        $table = $db->remappedTableName($table);
        $res = $db->query(sprintf($q, $db->addQuotes($db->getCoreSchema()), $db->addQuotes($table), $db->addQuotes($field)));
        $row = $db->fetchObject($res);
        if (!$row) {
            return null;
        }
        $n = new PostgresField();
        $n->type = $row->typname;
        $n->nullable = $row->attnotnull == 'f';
        $n->name = $field;
        $n->tablename = $table;
        $n->max_length = $row->attlen;
        $n->deferrable = $row->deferrable == 't';
        $n->deferred = $row->deferred == 't';
        $n->conname = $row->conname;
        $n->has_default = $row->atthasdef === 't';
        $n->default = $row->adsrc;
        return $n;
    }