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); return ($result==false) ? false : true; }
20 function AffectedRows($rsMain) { return pg_affected_rows($this->conn); }
21 function Seek($rsMain,$offset) { return pg_result_seek($rsMain,$offset); }
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 return pg_query($query);
34 function GetColumnInfo($TableName) {
35 $rsMain=$this->RunQuery("SHOW COLUMNS FROM ".$TableName);
36 if (!$rsMain) return null;
38 while($this->FetchAssoc($rsMain,$row)) {
39 $colinfo=new dbColumn;
40 $colinfo->IsPKey=($row["Key"]=="PRI");
41 $colinfo->ColName=$row["Field"];
42 $colinfo->ColType=$row["Type"];
43 $colinfo->Nullable=($row["Null"]=="YES");
44 if (preg_match("/\((\d+)\)/", $row["Type"], $matches))
45 $colinfo->ColLength=$matches[1];
47 $colinfo->ColLength=0;
48 $colinfo->Writeable=($row["Extra"] != 'auto_increment');
49 array_push($arColumns, $colinfo);
51 $this->FreeResult($rsMain);
54 function GetTableList($TableType) {
55 if ($TableType!='VIEW') $TableType='BASE TABLE';
56 $rsMain=$this->RunQuery("SHOW FULL TABLES WHERE Table_type='".$TableType."'");
57 if (!$rsMain) return null;
59 while($this->FetchRow($rsMain,$row)) {
60 array_push($arTables, $row[0]);
62 $this->FreeResult($rsMain);
65 function Concat($arStrings) {
66 return "concat(".implode(",",$arStrings).")";
68 function Convert2Char($s) {
69 return $s; // implicit conversion
72 return "dayofmonth(".$s.")";
74 function SqlMonth($s) {
75 return "month(".$s.")";
77 function SqlYear($s) {
78 return "year(".$s.")";
80 function CurrentTime() {
81 return "LOCALTIMESTAMP";
85 class dbClass extends dbClassRico
88 //********************************************************************************************************
89 // Attempts to connect to the Database. Returns true on success.
90 //********************************************************************************************************
91 function PostgreSqlLogon($DefDB,$userid,$pw)
93 $this->Dialect="PostgreSQL";
94 $this->dbDefault = $DefDB;
96 $dsn = sprintf('host=%s dbname=%s user=%s password=%s',DBHOST,$DefDB,$userid,$pw);
97 $this->dbMain = pg_connect($dsn);
98 $this->db = new dbClass_postgresql($this->dbMain);
100 if ($this->dbMain === false && $this->CheckForError("opening connection")) return false;