2 class PostgresField
implements Field
{
3 private $name, $tablename, $type, $nullable, $max_length, $deferred, $deferrable, $conname,
4 $has_default, $default;
7 * @param DatabasePostgres $db
10 * @return null|PostgresField
12 static function fromText( DatabasePostgres
$db, $table, $field ) {
15 attnotnull, attlen, conname AS conname,
18 COALESCE(condeferred, 'f') AS deferred,
19 COALESCE(condeferrable, 'f') AS deferrable,
20 CASE WHEN typname = 'int2' THEN 'smallint'
21 WHEN typname = 'int4' THEN 'integer'
22 WHEN typname = 'int8' THEN 'bigint'
23 WHEN typname = 'bpchar' THEN 'char'
24 ELSE typname END AS typname
26 JOIN pg_namespace n ON (n.oid = c.relnamespace)
27 JOIN pg_attribute a ON (a.attrelid = c.oid)
28 JOIN pg_type t ON (t.oid = a.atttypid)
29 LEFT JOIN pg_constraint o ON (o.conrelid = c.oid AND a.attnum = ANY(o.conkey) AND o.contype = 'f')
30 LEFT JOIN pg_attrdef d on c.oid=d.adrelid and a.attnum=d.adnum
37 $table = $db->remappedTableName( $table );
40 $db->addQuotes( $db->getCoreSchema() ),
41 $db->addQuotes( $table ),
42 $db->addQuotes( $field )
45 $row = $db->fetchObject( $res );
49 $n = new PostgresField
;
50 $n->type
= $row->typname
;
51 $n->nullable
= ( $row->attnotnull
== 'f' );
53 $n->tablename
= $table;
54 $n->max_length
= $row->attlen
;
55 $n->deferrable
= ( $row->deferrable
== 't' );
56 $n->deferred
= ( $row->deferred
== 't' );
57 $n->conname
= $row->conname
;
58 $n->has_default
= ( $row->atthasdef
=== 't' );
59 $n->default = $row->adsrc
;
68 function tableName() {
69 return $this->tablename
;
76 function isNullable() {
77 return $this->nullable
;
80 function maxLength() {
81 return $this->max_length
;
84 function is_deferrable() {
85 return $this->deferrable
;
88 function is_deferred() {
89 return $this->deferred
;
93 return $this->conname
;
100 function defaultValue() {
101 if ( $this->has_default
) {
102 return $this->default;