3 require_once('rico/dbClass2.php');
5 class dbClass_postgresql
8 function dbClass_postgresql($conn) { $this->conn=$conn; }
9 function HasError() { return pg_last_error() !== ''; }
10 function ErrorMsg() { return pg_last_error(); }
11 function Close() { return pg_close(); }
12 function FreeResult($rsLookUp) { return pg_free_result($rsLookUp); }
13 function RunQuery($sqltext) { $this->lastQuery=$sqltext; return pg_query($sqltext); }
14 function NumFields($rsMain) { return pg_num_fields($rsMain); }
15 function NumRows($rsMain) { return pg_num_rows($rsMain); }
16 function FieldType($rsMain,$i) { return pg_field_type($rsMain,$i); }
17 function FetchRow($rsMain,&$result) { $result=pg_fetch_row($rsMain); return ($result==false) ? false : true; }
18 function FetchAssoc($rsMain,&$result) { $result=pg_fetch_assoc($rsMain); return ($result==false) ? false : true; }
19 function FetchArray($rsMain,&$result) { $result=pg_fetch_array($rsMain,MYSQL_NUM); return ($result==false) ? false : true; }
20 function AffectedRows($rsMain) { return pg_affected_rows($this->conn); }
21 function Seek($rsMain,$offset) { error_log("mysql_data_seek($rsMain,$offset);"); return false; }
22 function RunParamQuery($query, $phs = array()) {
23 foreach ($phs as $ph) { // from php.net
25 $ph = "'" . pg_escape_string($ph) . "'";
29 $query = substr_replace($query, $ph, strpos($query, '?'), 1);
31 $this->lastQuery=$query;
32 $result = pg_query($query);
33 return ($result===false) ? false : true;
35 function GetColumnInfo($TableName) {
36 $rsMain=$this->RunQuery("SHOW COLUMNS FROM ".$TableName);
37 if (!$rsMain) return null;
39 while($this->FetchAssoc($rsMain,$row)) {
40 $colinfo=new dbColumn;
41 $colinfo->IsPKey=($row["Key"]=="PRI");
42 $colinfo->ColName=$row["Field"];
43 $colinfo->ColType=$row["Type"];
44 $colinfo->Nullable=($row["Null"]=="YES");
45 if (preg_match("/\((\d+)\)/", $row["Type"], $matches))
46 $colinfo->ColLength=$matches[1];
48 $colinfo->ColLength=0;
49 $colinfo->Writeable=($row["Extra"] != 'auto_increment');
50 array_push($arColumns, $colinfo);
52 $this->FreeResult($rsMain);
55 function GetTableList($TableType) {
56 if ($TableType!='VIEW') $TableType='BASE TABLE';
57 $rsMain=$this->RunQuery("SHOW FULL TABLES WHERE Table_type='".$TableType."'");
58 if (!$rsMain) return null;
60 while($this->FetchRow($rsMain,$row)) {
61 array_push($arTables, $row[0]);
63 $this->FreeResult($rsMain);
66 function Concat($arStrings) {
67 return "concat(".implode(",",$arStrings).")";
69 function Convert2Char($s) {
70 return $s; // implicit conversion
73 return "dayofmonth(".$s.")";
75 function SqlMonth($s) {
76 return "month(".$s.")";
78 function SqlYear($s) {
79 return "year(".$s.")";
81 function CurrentTime() {
82 return "LOCALTIMESTAMP";
86 class dbClass extends dbClassRico
89 //********************************************************************************************************
90 // Attempts to connect to the Database. Returns true on success.
91 //********************************************************************************************************
92 function PostgreSqlLogon($DefDB,$userid,$pw)
94 $this->Dialect="PostgreSQL";
95 $this->dbDefault = $DefDB;
97 $dsn = sprintf('host=%s dbname=%s user=%s password=%s',DBHOST,$DefDB,$userid,$pw);
98 $this->dbMain = pg_connect($dsn);
99 $this->db =& new dbClass_postgresql($this->dbMain);
101 if ($this->dbMain === false && $this->CheckForError("opening connection")) return false;