MediaWiki master
PostgresField.php
Go to the documentation of this file.
1<?php
2
3namespace Wikimedia\Rdbms;
4
5class PostgresField implements Field {
6 private $name, $tablename, $type, $nullable, $max_length, $deferred, $deferrable, $conname,
7 $has_default, $default;
8
15 public static function fromText( DatabasePostgres $db, $table, $field ) {
16 $q = <<<SQL
17SELECT
18 attnotnull, attlen, conname AS conname,
19 atthasdef,
20 pg_get_expr(adbin, adrelid) AS adsrc,
21 COALESCE(condeferred, FALSE) AS deferred,
22 COALESCE(condeferrable, FALSE) AS deferrable,
23 CASE WHEN typname = 'int2' THEN 'smallint'
24 WHEN typname = 'int4' THEN 'integer'
25 WHEN typname = 'int8' THEN 'bigint'
26 WHEN typname = 'bpchar' THEN 'char'
27 ELSE typname END AS typname
28FROM pg_class c
29JOIN pg_namespace n ON (n.oid = c.relnamespace)
30JOIN pg_attribute a ON (a.attrelid = c.oid)
31JOIN pg_type t ON (t.oid = a.atttypid)
32LEFT JOIN pg_constraint o ON (o.conrelid = c.oid AND a.attnum = ANY(o.conkey) AND o.contype = 'f')
33LEFT JOIN pg_attrdef d on c.oid=d.adrelid and a.attnum=d.adnum
34WHERE relkind = 'r'
35AND nspname=%s
36AND relname=%s
37AND attname=%s;
38SQL;
39
40 foreach ( $db->getCoreSchemas() as $schema ) {
41 $res = $db->query(
42 sprintf( $q,
43 $db->addQuotes( $schema ),
44 $db->addQuotes( $table ),
45 $db->addQuotes( $field )
46 ),
47 __METHOD__
48 );
49 $row = $res->fetchObject();
50 if ( !$row ) {
51 continue;
52 }
53 $n = new PostgresField;
54 $n->type = $row->typname;
55 $n->nullable = !$row->attnotnull;
56 $n->name = $field;
57 $n->tablename = $table;
58 $n->max_length = $row->attlen;
59 $n->deferrable = (bool)$row->deferrable;
60 $n->deferred = (bool)$row->deferred;
61 $n->conname = $row->conname;
62 $n->has_default = (bool)$row->atthasdef;
63 $n->default = $row->adsrc;
64
65 return $n;
66 }
67
68 return null;
69 }
70
71 public function name() {
72 return $this->name;
73 }
74
75 public function tableName() {
76 return $this->tablename;
77 }
78
79 public function type() {
80 return $this->type;
81 }
82
83 public function isNullable() {
84 return $this->nullable;
85 }
86
87 public function maxLength() {
88 return $this->max_length;
89 }
90
91 public function is_deferrable() {
92 return $this->deferrable;
93 }
94
95 public function is_deferred() {
96 return $this->deferred;
97 }
98
99 public function conname() {
100 return $this->conname;
101 }
102
107 public function defaultValue() {
108 if ( $this->has_default ) {
109 return $this->default;
110 } else {
111 return false;
112 }
113 }
114}
Postgres database abstraction layer.
getCoreSchemas()
Return schema names for temporary tables and core application tables.
addQuotes( $s)
Escape and quote a raw value string for use in a SQL query.
query( $sql, $fname=__METHOD__, $flags=0)
Run an SQL query statement and return the result.
Definition Database.php:631
tableName()
Name of table this field belongs to.
isNullable()
Whether this field can store NULL values.
static fromText(DatabasePostgres $db, $table, $field)
Base for all database-specific classes representing information about database fields.
Definition Field.php:9