Always disable Rico debugging
[misc/kostenrechnung] / lib / dbClass.php
1 <?php
2
3 require_once('rico/dbClass2.php');
4
5 class dbClass_postgresql
6 {
7   var $lastQuery;
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
24       if ( isset($ph) ) {
25         $ph = "'" . pg_escape_string($ph) . "'";
26       } else {
27         $ph = "NULL" ;
28       }
29       $query = substr_replace($query, $ph, strpos($query, '?'), 1);
30     }
31     $this->lastQuery=$query;
32     return pg_query($query);
33   }
34   function GetColumnInfo($TableName) {
35     $rsMain=$this->RunQuery("SHOW COLUMNS FROM ".$TableName);
36     if (!$rsMain) return null;
37     $arColumns=array();
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];
46       else
47         $colinfo->ColLength=0;
48       $colinfo->Writeable=($row["Extra"] != 'auto_increment');
49       array_push($arColumns, $colinfo);
50     } 
51     $this->FreeResult($rsMain);
52     return $arColumns;
53   }
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;
58     $arTables=array();
59     while($this->FetchRow($rsMain,$row)) {
60       array_push($arTables, $row[0]);
61     } 
62     $this->FreeResult($rsMain);
63     return $arTables;
64   }
65   function Concat($arStrings) {
66     return "concat(".implode(",",$arStrings).")";
67   }
68   function Convert2Char($s) {
69     return $s; // implicit conversion
70   }
71   function SqlDay($s) {
72     return "dayofmonth(".$s.")";
73   }
74   function SqlMonth($s) {
75     return "month(".$s.")";
76   }
77   function SqlYear($s) {
78     return "year(".$s.")";
79   }
80   function CurrentTime() {
81     return "LOCALTIMESTAMP";
82   }
83 }
84
85 class dbClass extends dbClassRico
86 {
87
88 //********************************************************************************************************
89 // Attempts to connect to the Database. Returns true on success.
90 //********************************************************************************************************
91   function PostgreSqlLogon($DefDB,$userid,$pw)
92   {
93     $this->Dialect="PostgreSQL";
94     $this->dbDefault = $DefDB;
95
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);
99
100     if ($this->dbMain === false && $this->CheckForError("opening connection")) return false;
101     return true;
102   }
103
104 }
105
106 ?>