postgresql primarykeys foreignkeys tablenames screenfieldlength

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Any suggestions or improvements to the following code would be much
appreciated. Please send me an email:

	function kgtables () 
		{
		if ($this->connection) 
			{
			$tablelist = "";
			$sql = "SELECT " . 
						"ic.relname " .
					"FROM " .
						"pg_class ic " .
					"WHERE " .
						"ic.relname not like 'pg%' " .
						"AND ic.relname not like '%pk' " .
						"AND ic.relname not like '%idx' ";
			$tablelist = pg_query ($this->connection, $sql);
			$this->num_tables = pg_num_rows($tablelist);
			for ($i=0; $i < $this->num_tables; $i++) 
				{
				$r = pg_fetch_row($tablelist);
				$obj->{$i + 1} = $r[0];
				}
			pg_free_result ($tablelist);
			return $obj;
			}
		else 
			{
			echo 'Error: failed to name the tables <br />';
			return 0;
			}
		}

	function kgprimarykeys ($tablename = "") 
		{
		if ( $this->connection && $tablename != "" ) 
			{
			$keylist = "";
			$sql = "SELECT " . 
						"ic.relname AS index_name, " .
						"bc.relname AS tab_name, " . 
						"ta.attname AS column_name, " .
						"i.indisunique AS unique_key, " .
						"i.indisprimary AS primary_key " .
					"FROM " .
						"pg_class bc, " .
						"pg_class ic, " .
						"pg_index i, " .
						"pg_attribute ta, " .
						"pg_attribute ia " .
					"WHERE " .
						"bc.oid = i.indrelid " .
						"AND ic.oid = i.indexrelid " .
						"AND ia.attrelid = i.indexrelid " .
						"AND ta.attrelid = bc.oid " .
						"AND bc.relname = '" . $tablename . "' " .
						"AND ta.attrelid = i.indrelid " .
						"AND ta.attnum = i.indkey[ia.attnum-1] " .
					"ORDER BY " .
						"index_name, tab_name, column_name";
			$keylist = pg_query ($this->connection, $sql);
			$this->num_primarykeys = pg_num_rows($keylist);
			$j = 1;
			for ($i=0; $i < $this->num_primarykeys; $i++) 
				{
				$r = pg_fetch_row($keylist);
//				echo "Primary Key: $r[0], $r[1], $r[2], $r[3], $r[4], </br>";
				if ( $r[4] == TRUE)
					{
					$obj->{$j} = $r[2];
					$j++;
					}
				}
			pg_free_result ($keylist);
			return $obj;
			}
		else 
			{
			echo 'Error: failed to name the primary keys in ' . $tablename . '<br
/>';
			return 0;
			}
		}

	function kgforeignkeys ($tablename = "" ) 
		{
		if ( $this->connection && $tablename != "" ) 
			{
			$keylist = "";
			$sql = "SELECT conname,
  pg_catalog.pg_get_constraintdef(oid) as condef 
						FROM pg_catalog.pg_constraint r
						WHERE r.conrelid = (SELECT c.oid
							FROM pg_catalog.pg_class c
						    LEFT JOIN pg_catalog.pg_namespace n 
							ON n.oid = c.relnamespace
							WHERE pg_catalog.pg_table_is_visible(c.oid)
      							AND c.relname ~ '^" . $tablename . "$' )
						AND r.contype = 'f'";

			$keylist = pg_query ($this->connection, $sql);
			$num_rows = pg_num_rows($keylist);
			for ($i=0; $i < $num_rows; $i++) 
				{
				$r = pg_fetch_row($keylist);
//				echo "Field: $r[0], $r[1] </br>";
				$phrase = split("\(|\)", $r[1]);
				echo "Phrase: $phrase[0], $phrase[1], $phrase[2], $phrase[3],
$phrase[4] </br>";
//				$obj->{$i} = $len[1];
				$kgArr[$i][0][0] = $tablename;
				$word1 = split(",", $phrase[1]);
				echo (count($word1));
				echo "Word: $word1[0]; $word1[1] </br>";
				for ($j=1; $j <= count($word1); $j++)
					{
					$kgArr[$i][0][$j] = trim($word1[$j - 1]);
					}
				$kgArr[$i][1][0] = trim(Substr($phrase[2], strrpos($phrase[2], "
")));
				$word2 = split(",", $phrase[3]);
				echo (count($word2));
				echo "Word: $word2[0]; $word2[1] </br>";
				for ($j=1; $j <= count($word2); $j++)
					{
					$kgArr[$i][1][$j] = trim($word2[$j - 1]);
					}
				}
			pg_free_result ($keylist);
			return $kgArr;
			}
		else 
			{
			echo 'Error: failed to obtain the foreign keys in ' . $tablename .
'<br />';
			return 0;
			}
		}

	function kgfield_length ($field_name = "", $tablename = "" ) 
		{
		if ( $this->connection && $tablename != "" ) 
			{
			$keylist = "";
			$sql = "SELECT a.attname, pg_catalog.format_type(a.atttypid,
a.atttypmod) 
						FROM pg_catalog.pg_attribute a
						WHERE a.attrelid = (SELECT c.oid
							FROM pg_catalog.pg_class c
						    LEFT JOIN pg_catalog.pg_namespace n 
							ON n.oid = c.relnamespace
							WHERE pg_catalog.pg_table_is_visible(c.oid)
      							AND c.relname ~ '^" . $tablename . "$' )
						AND a.attnum > 0 
						AND NOT a.attisdropped
						ORDER BY a.attnum";
			$keylist = pg_query ($this->connection, $sql);
			$this->num_fields = pg_num_rows($keylist);
			for ($i=0; $i < $this->num_fields; $i++) 
				{
				$tempLen = 0;
				$r = pg_fetch_row($keylist);
//				echo "Field: $r[0], $r[1] </br>";
				$len = split("\(|\)", $r[1]);
				echo "Length: $len[0], $len[1], $len[2], $len[3] </br>";
				if (trim($len[0]) == "character" || trim($len[0]) == "character
varying")
					{
					$tempLen = $len[1];
					}
				else
					{
					switch (trim($len[0]))
						{
						case "text":
							$tempLen = 64;
							break;
						case "boolean":
							$tempLen = 1;
							break;
						case "smallint":
							$tempLen = 6;
							break;
						case "integer":
							$tempLen = 10;
							break;
						case "bigint":
							$tempLen = 18;
							break;
						case "timestamp without time zone":
							$tempLen = 20;
							break;
						case "timestamp with time zone":
							$tempLen = 32;
							break;
						case "interval":
							$tempLen = 10;
							break;
						case "date":
							$tempLen = 10;
							break;
						case "numeric":
							$tempLen = trim(Substr($len[1], 0, strpos($len[1], ",")));
							echo $tempLen;
							break;
						case "decimal":
							$tempLen = trim(Substr($len[1], 0, strpos($len[1], ",")));
							break;
						case "real":
							$tempLen = 10;
							break;
						case "double precision":
							$tempLen = 20;
							break;
						}
					}
				$obj->{$r[0]} = $tempLen;
				}
			pg_free_result ($keylist);
			return $obj;
			}
		else 
			{
			echo 'Error: failed to obtain the field length in ' . $tablename .
'<br />';
			return 0;
			}
		}





-- 
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [PHP Users]     [Postgresql Discussion]     [Kernel Newbies]     [Postgresql]     [Yosemite News]

  Powered by Linux