Doctrine 1.2.4
Doctrine_DataDict_Pgsql Class Reference

Inherits Doctrine_DataDict.

Public Member Functions

 getConnection ()
 
 getIntegerDeclaration ($name, $field)
 
 getModuleName ()
 
 getNativeDeclaration (array $field)
 
 getPortableDeclaration (array $field)
 
 parseBoolean ($value)
 

Static Protected Attributes

static $reservedKeyWords
 

Detailed Description

Definition at line 33 of file Pgsql.php.

Member Function Documentation

Doctrine_Connection_Module::getConnection ( )
inherited

getConnection returns the connection object this module uses

Returns
Doctrine_Connection

Definition at line 68 of file Module.php.

{
return $this->conn;
}
Doctrine_DataDict_Pgsql::getIntegerDeclaration (   $name,
  $field 
)

Obtain DBMS specific SQL code portion needed to declare an integer type field to be used in statements like CREATE TABLE.

Parameters
string$namename the field to be declared.
array$fieldassociative array with the name of the properties of the field being declared as array indexes. Currently, the types of supported field properties are as follows:

unsigned Boolean flag that indicates whether the field should be declared as unsigned integer if possible.

default Integer value to be used as default for this field.

notnull Boolean flag that indicates whether this field is constrained to not be set to null.

Returns
string DBMS specific SQL code portion that should be used to declare the specified field.

if ( ! empty($field['unsigned'])) { $this->conn->warnings[] = "unsigned integer field \"$name" is being declared as signed integer"; }

TODO: is this needed ? elseif (empty($field['notnull'])) { $default = ' DEFAULT NULL'; }

Definition at line 639 of file Pgsql.php.

{
/**
if ( ! empty($field['unsigned'])) {
$this->conn->warnings[] = "unsigned integer field \"$name\" is being declared as signed integer";
}
*/
if ( ! empty($field['autoincrement'])) {
$name = $this->conn->quoteIdentifier($name, true);
return $name . ' ' . $this->getNativeDeclaration($field);
}
$default = '';
if (array_key_exists('default', $field)) {
if ($field['default'] === '') {
$field['default'] = empty($field['notnull']) ? null : 0;
}
$default = ' DEFAULT ' . (is_null($field['default'])
? 'NULL'
: $this->conn->quote($field['default'], $field['type']));
}
/**
TODO: is this needed ?
elseif (empty($field['notnull'])) {
$default = ' DEFAULT NULL';
}
*/
$notnull = empty($field['notnull']) ? '' : ' NOT NULL';
$name = $this->conn->quoteIdentifier($name, true);
return $name . ' ' . $this->getNativeDeclaration($field) . $default . $notnull;
}
Doctrine_Connection_Module::getModuleName ( )
inherited

getModuleName returns the name of this module

Returns
string the name of this module

Definition at line 79 of file Module.php.

{
return $this->moduleName;
}
Doctrine_DataDict_Pgsql::getNativeDeclaration ( array  $field)

Obtain DBMS specific SQL code portion needed to declare an text type field to be used in statements like CREATE TABLE.

Parameters
array$fieldassociative array with the name of the properties of the field being declared as array indexes. Currently, the types of supported field properties are as follows:

length Integer value that determines the maximum length of the text field. If this argument is missing the field should be declared to have the longest length allowed by the DBMS.

default Text value to be used as default for this field.

notnull Boolean flag that indicates whether this field is constrained to not be set to null.

Returns
string DBMS specific SQL code portion that should be used to declare the specified field.

Definition at line 360 of file Pgsql.php.

{
if ( ! isset($field['type'])) {
throw new Doctrine_DataDict_Exception('Missing column type.');
}
// Postgres enum type by name containing enum
if (strpos($field['type'], 'enum') !== false){
$field['type'] = 'enum';
}
switch ($field['type']) {
case 'enum':
$field['length'] = isset($field['length']) && $field['length'] ? $field['length']:255;
case 'char':
case 'string':
case 'array':
case 'object':
case 'varchar':
case 'gzip':
// TODO: what is the maximum VARCHAR length in pgsql ?
$length = (isset($field['length']) && $field['length'] && $field['length'] < 10000) ? $field['length'] : null;
$fixed = ((isset($field['fixed']) && $field['fixed']) || $field['type'] == 'char') ? true : false;
return $fixed ? ($length ? 'CHAR(' . $length . ')' : 'CHAR('.$this->conn->varchar_max_length.')')
: ($length ? 'VARCHAR(' .$length . ')' : 'TEXT');
case 'clob':
return 'TEXT';
case 'blob':
return 'BYTEA';
case 'integer':
case 'int':
if ( ! empty($field['autoincrement'])) {
if ( ! empty($field['length'])) {
$length = $field['length'];
if ($length > 4) {
return 'BIGSERIAL';
}
}
return 'SERIAL';
}
if ( ! empty($field['length'])) {
$length = $field['length'];
if ($length <= 2) {
return 'SMALLINT';
} elseif ($length == 3 || $length == 4) {
return 'INT';
} elseif ($length > 4) {
return 'BIGINT';
}
}
return 'INT';
case 'inet':
return 'INET';
case 'bit':
case 'varbit':
return 'VARBIT';
case 'boolean':
return 'BOOLEAN';
case 'date':
return 'DATE';
case 'time':
return 'TIME';
case 'timestamp':
return 'TIMESTAMP';
case 'float':
case 'double':
return 'FLOAT';
case 'decimal':
$length = !empty($field['length']) ? $field['length'] : 18;
$scale = !empty($field['scale']) ? $field['scale'] : $this->conn->getAttribute(Doctrine_Core::ATTR_DECIMAL_PLACES);
return 'NUMERIC('.$length.','.$scale.')';
}
return $field['type'] . (isset($field['length']) ? '('.$field['length'].')':null);
}
Doctrine_DataDict_Pgsql::getPortableDeclaration ( array  $field)

Maps a native array description of a field to a portable Doctrine datatype and length

Parameters
array$fieldnative field description
Returns
array containing the various possible types, length, sign, fixed

Definition at line 445 of file Pgsql.php.

{
$length = (isset($field['length'])) ? $field['length'] : null;
if ($length == '-1' && isset($field['atttypmod'])) {
$length = $field['atttypmod'] - 4;
}
if ((int)$length <= 0) {
$length = null;
}
$type = array();
$unsigned = $fixed = null;
if ( ! isset($field['name'])) {
$field['name'] = '';
}
$dbType = strtolower($field['type']);
// Default from field for enum support
$default = isset($field['default']) ? $field['default'] : null;
$enumName = null;
if (strpos($dbType, 'enum') !== false){
$enumName = $dbType;
$dbType = 'enum';
}
switch ($dbType) {
case 'inet':
$type[] = 'inet';
break;
case 'bit':
case 'varbit':
$type[] = 'bit';
break;
case 'smallint':
case 'int2':
$type[] = 'integer';
$unsigned = false;
$length = 2;
if ($length == '2') {
$type[] = 'boolean';
if (preg_match('/^(is|has)/', $field['name'])) {
$type = array_reverse($type);
}
}
break;
case 'int':
case 'int4':
case 'integer':
case 'serial':
case 'serial4':
$type[] = 'integer';
$unsigned = false;
$length = 4;
break;
case 'bigint':
case 'int8':
case 'bigserial':
case 'serial8':
$type[] = 'integer';
$unsigned = false;
$length = 8;
break;
case 'bool':
case 'boolean':
$type[] = 'boolean';
$length = 1;
break;
case 'text':
case 'varchar':
case 'interval':
case '_varchar':
$fixed = false;
case 'tsvector':
case 'unknown':
case 'char':
case 'character':
case 'bpchar':
$type[] = 'string';
if ($length == '1') {
$type[] = 'boolean';
if (preg_match('/^(is|has)/', $field['name'])) {
$type = array_reverse($type);
}
} elseif (strstr($dbType, 'text')) {
$type[] = 'clob';
}
if ($fixed !== false) {
$fixed = true;
}
break;
case 'enum':
$type[] = 'enum';
$length = $length ? $length :255;
if($default) {
$default = preg_replace('/\'(\w+)\'.*/', '${1}', $default);
}
break;
case 'date':
$type[] = 'date';
$length = null;
break;
case 'datetime':
case 'timestamp':
case 'timetz':
case 'timestamptz':
$type[] = 'timestamp';
$length = null;
break;
case 'time':
$type[] = 'time';
$length = null;
break;
case 'float':
case 'float4':
case 'float8':
case 'double':
case 'double precision':
case 'real':
$type[] = 'float';
break;
case 'decimal':
case 'money':
case 'numeric':
$type[] = 'decimal';
break;
case 'tinyblob':
case 'mediumblob':
case 'longblob':
case 'blob':
case 'bytea':
case 'geometry':
case 'geometrycollection':
case 'point':
case 'multipoint':
case 'linestring':
case 'multilinestring':
case 'polygon':
case 'multipolygon':
$type[] = 'blob';
$length = null;
break;
case 'oid':
$type[] = 'blob';
$type[] = 'clob';
$length = null;
break;
case 'year':
$type[] = 'integer';
$type[] = 'date';
$length = null;
break;
default:
$type[] = $field['type'];
$length = isset($field['length']) ? $field['length']:null;
}
$ret = array('type' => $type,
'length' => $length,
'unsigned' => $unsigned,
'fixed' => $fixed);
// If this is postgresql enum type we will have non-null values here
if ($default !== null) {
$ret['default'] = $default;
}
if ($enumName !== null) {
$ret['enumName'] = $enumName;
}
return $ret;
}
Doctrine_DataDict_Pgsql::parseBoolean (   $value)

parseBoolean parses a literal boolean value and returns proper sql equivalent

Parameters
string$valueboolean value to be parsed
Returns
string parsed boolean value

Definition at line 682 of file Pgsql.php.

{
return $value;
}

Field Documentation

Doctrine_DataDict_Pgsql::$reservedKeyWords
staticprotected
Parameters
array$reservedKeyWordsan array of reserved keywords by pgsql

Definition at line 38 of file Pgsql.php.


The documentation for this class was generated from the following file: