summaryrefslogtreecommitdiff
path: root/framework/Data/ActiveRecord/Vendor/TPgsqlColumnMetaData.php
blob: a51c435d7d5e14fc1f5b3e79e783d57c76aafc83 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<?php
/**
 * TPgsqlColumnMetaData class file.
 *
 * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
 * @link http://www.pradosoft.com/
 * @copyright Copyright &copy; 2005-2007 PradoSoft
 * @license http://www.pradosoft.com/license/
 * @version $Id$
 * @package System.Data.ActiveRecord.Vendor
 */

/**
 * Column meta data for Postgre 7.3 or later.
 *
 * @author Wei Zhuo <weizho[at]gmail[dot]com>
 * @version $Id$
 * @package System.Data.ActiveRecord.Vendor
 * @since 3.1
 */
class TPgsqlColumnMetaData extends TComponent
{
	private $_name;
	private $_type;
	private $_sequenceName;
	private $_default;
	private $_length;
	private $_notNull=true;
	private $_property;

	private $_isPrimary=null;

	/**
	 * Initialize column meta data.
	 *
	 * @param string column name.
	 * @param string column data type.
	 * @param string column data length.
	 * @param boolean column can not be null.
	 * @param string serial name.
	 * @param string default value.
	 */
	public function __construct($property,$name,$type,$length,$notNull,$serial,$default)
	{
		$this->_property=$property;
		$this->_name=$name;
		$this->_type=$type;
		$this->_length=$length;
		$this->_notNull=$notNull;
		$this->_sequenceName=$serial;
		$this->_default=$default;
	}

	/**
	 * @return string quoted column name.
	 */
	public function getName()
	{
		return $this->_name;
	}

	/**
	 * @return string column name, used as active record property name
	 */
	public function getProperty()
	{
		return $this->_property;
	}

	public function getPHPType()
	{
		switch(strtolower($this->_type))
		{
			case 'bit': case 'bit varying': case 'real': case 'serial': case 'int': case 'integer':
				return 'integer';
			case 'boolean':
				return 'boolean';
			case 'bigint': case 'bigserial': case 'double precision': case 'money': case 'numeric':
				return 'float';
			default:
				return 'string';
		}
	}

	/**
	 * @return boolean true if column is a sequence, false otherwise.
	 */
	public function hasSequence()
	{
		return $this->_sequenceName != null;
	}

	/**
	 * @return string sequence name, only applicable if column is a sequence.
	 */
	public function getSequenceName()
	{
		return $this->_sequenceName;
	}

	/**
	 * Set the column as primary key
	 */
	public function setIsPrimaryKey($value)
	{
		if($this->_isPrimary===null)
			$this->_isPrimary=$value;
		else
			throw new TActiveRecordException('ar_column_meta_data_read_only');
	}

	/**
	 * @return boolean true if the column is a primary key, or part of a composite primary key.
	 */
	public function getIsPrimaryKey()
	{
		return $this->_isPrimary===null? false : $this->_isPrimary;
	}

	public function getType()
	{
		return $this->_type;
	}

	public function getLength()
	{
		return $this->_length;
	}

	public function getNotNull()
	{
		return $this->_notNull;
	}

	/**
	 * @return boolean true if column has default value, false otherwise.
	 */
	public function hasDefault()
	{
		return $this->_default !== null;
	}

	public function getDefaultValue()
	{
		return $this->_default;
	}
}

?>