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