+// for PostgreSQL server\r
+class dbClass_postgresql\r
+{\r
+ var $lastQuery;\r
+ function dbClass_postgresql($conn) { $this->conn=$conn; }\r
+ function HasError() { return pg_last_error() !== ''; }\r
+ function ErrorMsg() { return pg_last_error(); }\r
+ function Close() { return pg_close(); }\r
+ function FreeResult($rsLookUp) { return pg_free_result($rsLookUp); }\r
+ function RunQuery($sqltext) { $this->lastQuery=$sqltext; return pg_query($sqltext); }\r
+ function NumFields($rsMain) { return pg_num_fields($rsMain); }\r
+ function NumRows($rsMain) { return pg_num_rows($rsMain); }\r
+ function FieldType($rsMain,$i) { return pg_field_type($rsMain,$i); }\r
+ function FetchRow($rsMain,&$result) { $result=pg_fetch_row($rsMain); return ($result==false) ? false : true; }\r
+ function FetchAssoc($rsMain,&$result) { $result=pg_fetch_assoc($rsMain); return ($result==false) ? false : true; }\r
+ function FetchArray($rsMain,&$result) { $result=pg_fetch_array($rsMain); return ($result==false) ? false : true; }\r
+ function AffectedRows($rsMain) { return pg_affected_rows($this->conn); }\r
+ function Seek($rsMain,$offset) { return pg_result_seek($rsMain,$offset); }\r
+ function RunParamQuery($query, $phs = array()) {\r
+ foreach ($phs as $ph) { // from php.net\r
+ if ( isset($ph) ) {\r
+ $ph = "'" . pg_escape_string($ph) . "'";\r
+ } else {\r
+ $ph = "NULL" ;\r
+ }\r
+ $query = substr_replace($query, $ph, strpos($query, '?'), 1);\r
+ }\r
+ $this->lastQuery=$query;\r
+ return pg_query($query);\r
+ }\r
+ function GetColumnInfo($TableName) {\r
+ $rsMain=$this->RunQuery("SHOW COLUMNS FROM ".$TableName);\r
+ if (!$rsMain) return null;\r
+ $arColumns=array();\r
+ while($this->FetchAssoc($rsMain,$row)) {\r
+ $colinfo=new dbColumn;\r
+ $colinfo->IsPKey=($row["Key"]=="PRI");\r
+ $colinfo->ColName=$row["Field"];\r
+ $colinfo->ColType=$row["Type"];\r
+ $colinfo->Nullable=($row["Null"]=="YES");\r
+ if (preg_match("/\((\d+)\)/", $row["Type"], $matches))\r
+ $colinfo->ColLength=$matches[1];\r
+ else\r
+ $colinfo->ColLength=0;\r
+ $colinfo->Writeable=($row["Extra"] != 'auto_increment');\r
+ array_push($arColumns, $colinfo);\r
+ } \r
+ $this->FreeResult($rsMain);\r
+ return $arColumns;\r
+ }\r
+ function GetTableList($TableType) {\r
+ if ($TableType!='VIEW') $TableType='BASE TABLE';\r
+ $rsMain=$this->RunQuery("SHOW FULL TABLES WHERE Table_type='".$TableType."'");\r
+ if (!$rsMain) return null;\r
+ $arTables=array();\r
+ while($this->FetchRow($rsMain,$row)) {\r
+ array_push($arTables, $row[0]);\r
+ } \r
+ $this->FreeResult($rsMain);\r
+ return $arTables;\r
+ }\r
+ function Concat($arStrings) {\r
+ return "concat(".implode(",",$arStrings).")";\r
+ }\r
+ function Convert2Char($s) {\r
+ return $s; // implicit conversion\r
+ }\r
+ function SqlDay($s) {\r
+ return "dayofmonth(".$s.")";\r
+ }\r
+ function SqlMonth($s) {\r
+ return "month(".$s.")";\r
+ }\r
+ function SqlYear($s) {\r
+ return "year(".$s.")";\r
+ }\r
+ function CurrentTime() {\r
+ return "LOCALTIMESTAMP";\r
+ }\r
+}\r