]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - lib/WikiDB/adodb/drivers/adodb-csv.inc.php
new ADODB library 4.22 with multiple drivers (not only mysql as before), major change...
[SourceForge/phpwiki.git] / lib / WikiDB / adodb / drivers / adodb-csv.inc.php
1 <?php\r
2 /*\r
3 V4.22 15 Apr 2004  (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.\r
4   Released under both BSD license and Lesser GPL library license. \r
5   Whenever there is any discrepancy between the two licenses, \r
6   the BSD license will take precedence.\r
7   Set tabs to 4.\r
8   \r
9   Currently unsupported: MetaDatabases, MetaTables and MetaColumns, and also inputarr in Execute.\r
10   Native types have been converted to MetaTypes.\r
11   Transactions not supported yet.\r
12 */ \r
13 \r
14 if (! defined("_ADODB_CSV_LAYER")) {\r
15  define("_ADODB_CSV_LAYER", 1 );\r
16 \r
17 include_once(ADODB_DIR.'/adodb-csvlib.inc.php');\r
18  \r
19 class ADODB_csv extends ADOConnection {\r
20         var $databaseType = 'csv';\r
21         var $databaseProvider = 'csv';\r
22         var $hasInsertID = true;\r
23         var $hasAffectedRows = true;    \r
24         var $fmtTimeStamp = "'Y-m-d H:i:s'";\r
25         var $_affectedrows=0;\r
26         var $_insertid=0;\r
27         var $_url;\r
28         var $replaceQuote = "''"; // string to use to replace quotes\r
29         var $hasTransactions = false;\r
30         var $_errorNo = false;\r
31         \r
32         function ADODB_csv() \r
33         {               \r
34         }\r
35         \r
36         function _insertid()\r
37         {\r
38                         return $this->_insertid;\r
39         }\r
40         \r
41         function _affectedrows()\r
42         {\r
43                         return $this->_affectedrows;\r
44         }\r
45   \r
46         function &MetaDatabases()\r
47         {\r
48                 return false;\r
49         }\r
50 \r
51         \r
52         // returns true or false\r
53         function _connect($argHostname, $argUsername, $argPassword, $argDatabasename)\r
54         {\r
55                 if (strtolower(substr($argHostname,0,7)) !== 'http://') return false;\r
56                 $this->_url = $argHostname;\r
57                 return true;    \r
58         }\r
59         \r
60         // returns true or false\r
61         function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename)\r
62         {\r
63                 if (strtolower(substr($argHostname,0,7)) !== 'http://') return false;\r
64                 $this->_url = $argHostname;\r
65                 return true;\r
66         }\r
67         \r
68         function &MetaColumns($table) \r
69         {\r
70                 return false;\r
71         }\r
72                 \r
73                 \r
74         // parameters use PostgreSQL convention, not MySQL\r
75         function &SelectLimit($sql,$nrows=-1,$offset=-1)\r
76         {\r
77         global $ADODB_FETCH_MODE;\r
78         \r
79                 $url = $this->_url.'?sql='.urlencode($sql)."&nrows=$nrows&fetch=".\r
80                         (($this->fetchMode !== false)?$this->fetchMode : $ADODB_FETCH_MODE).\r
81                         "&offset=$offset";\r
82                 $err = false;\r
83                 $rs = csv2rs($url,$err,false);\r
84                 \r
85                 if ($this->debug) print "$url<br><i>$err</i><br>";\r
86 \r
87                 $at = strpos($err,'::::');\r
88                 if ($at === false) {\r
89                         $this->_errorMsg = $err;\r
90                         $this->_errorNo = (integer)$err;\r
91                 } else {\r
92                         $this->_errorMsg = substr($err,$at+4,1024);\r
93                         $this->_errorNo = -9999;\r
94                 }\r
95                 if ($this->_errorNo) \r
96                         if ($fn = $this->raiseErrorFn) {\r
97                                 $fn($this->databaseType,'EXECUTE',$this->ErrorNo(),$this->ErrorMsg(),$sql,'');\r
98                         }\r
99                         \r
100                 if (is_object($rs)) {   \r
101                 \r
102                         $rs->databaseType='csv';                \r
103                         $rs->fetchMode = ($this->fetchMode !== false) ?  $this->fetchMode : $ADODB_FETCH_MODE;\r
104                         $rs->connection = &$this;\r
105                 }\r
106                 return $rs;\r
107         }\r
108         \r
109         // returns queryID or false\r
110         function &_Execute($sql,$inputarr=false)\r
111         {\r
112         global $ADODB_FETCH_MODE;\r
113         \r
114                 if (!$this->_bindInputArray && $inputarr) {\r
115                         $sqlarr = explode('?',$sql);\r
116                         $sql = '';\r
117                         $i = 0;\r
118                         foreach($inputarr as $v) {\r
119 \r
120                                 $sql .= $sqlarr[$i];\r
121                                 if (gettype($v) == 'string')\r
122                                         $sql .= $this->qstr($v);\r
123                                 else if ($v === null)\r
124                                         $sql .= 'NULL';\r
125                                 else\r
126                                         $sql .= $v;\r
127                                 $i += 1;\r
128         \r
129                         }\r
130                         $sql .= $sqlarr[$i];\r
131                         if ($i+1 != sizeof($sqlarr))    \r
132                                 print "Input Array does not match ?: ".htmlspecialchars($sql);\r
133                         $inputarr = false;\r
134                 }\r
135                 \r
136                 $url =  $this->_url.'?sql='.urlencode($sql)."&fetch=".\r
137                         (($this->fetchMode !== false)?$this->fetchMode : $ADODB_FETCH_MODE);\r
138                 $err = false;\r
139                 \r
140                 \r
141                 $rs = csv2rs($url,$err,false);\r
142                 if ($this->debug) print urldecode($url)."<br><i>$err</i><br>";\r
143                 $at = strpos($err,'::::');\r
144                 if ($at === false) {            \r
145                         $this->_errorMsg = $err;\r
146                         $this->_errorNo = (integer)$err;\r
147                 } else {\r
148                         $this->_errorMsg = substr($err,$at+4,1024);\r
149                         $this->_errorNo = -9999;\r
150                 }\r
151                 \r
152                 if ($this->_errorNo) \r
153                         if ($fn = $this->raiseErrorFn) {\r
154                                 $fn($this->databaseType,'EXECUTE',$this->ErrorNo(),$this->ErrorMsg(),$sql,$inputarr);\r
155                         }\r
156                 if (is_object($rs)) {\r
157                         $rs->fetchMode = ($this->fetchMode !== false) ?  $this->fetchMode : $ADODB_FETCH_MODE;\r
158                         \r
159                         $this->_affectedrows = $rs->affectedrows;\r
160                         $this->_insertid = $rs->insertid;\r
161                         $rs->databaseType='csv';\r
162                         $rs->connection = &$this;\r
163                 }\r
164                 return $rs;\r
165         }\r
166 \r
167         /*      Returns: the last error message from previous database operation        */      \r
168         function ErrorMsg() \r
169         {\r
170                         return $this->_errorMsg;\r
171         }\r
172         \r
173         /*      Returns: the last error number from previous database operation */      \r
174         function ErrorNo() \r
175         {\r
176                 return $this->_errorNo;\r
177         }\r
178         \r
179         // returns true or false\r
180         function _close()\r
181         {\r
182                 return true;\r
183         }\r
184 } // class\r
185 \r
186 class ADORecordset_csv extends ADORecordset {\r
187         function ADORecordset_csv($id,$mode=false)\r
188         {\r
189                 $this->ADORecordset($id,$mode);\r
190         }\r
191         \r
192         function _close()\r
193         {\r
194                 return true;\r
195         }\r
196 }\r
197 \r
198 } // define\r
199         \r
200 ?>