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
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
14 if (! defined("_ADODB_CSV_LAYER")) {
\r
15 define("_ADODB_CSV_LAYER", 1 );
\r
17 include_once(ADODB_DIR.'/adodb-csvlib.inc.php');
\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
28 var $replaceQuote = "''"; // string to use to replace quotes
\r
29 var $hasTransactions = false;
\r
30 var $_errorNo = false;
\r
32 function ADODB_csv()
\r
36 function _insertid()
\r
38 return $this->_insertid;
\r
41 function _affectedrows()
\r
43 return $this->_affectedrows;
\r
46 function &MetaDatabases()
\r
52 // returns true or false
\r
53 function _connect($argHostname, $argUsername, $argPassword, $argDatabasename)
\r
55 if (strtolower(substr($argHostname,0,7)) !== 'http://') return false;
\r
56 $this->_url = $argHostname;
\r
60 // returns true or false
\r
61 function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
\r
63 if (strtolower(substr($argHostname,0,7)) !== 'http://') return false;
\r
64 $this->_url = $argHostname;
\r
68 function &MetaColumns($table)
\r
74 // parameters use PostgreSQL convention, not MySQL
\r
75 function &SelectLimit($sql,$nrows=-1,$offset=-1)
\r
77 global $ADODB_FETCH_MODE;
\r
79 $url = $this->_url.'?sql='.urlencode($sql)."&nrows=$nrows&fetch=".
\r
80 (($this->fetchMode !== false)?$this->fetchMode : $ADODB_FETCH_MODE).
\r
83 $rs = csv2rs($url,$err,false);
\r
85 if ($this->debug) print "$url<br><i>$err</i><br>";
\r
87 $at = strpos($err,'::::');
\r
88 if ($at === false) {
\r
89 $this->_errorMsg = $err;
\r
90 $this->_errorNo = (integer)$err;
\r
92 $this->_errorMsg = substr($err,$at+4,1024);
\r
93 $this->_errorNo = -9999;
\r
95 if ($this->_errorNo)
\r
96 if ($fn = $this->raiseErrorFn) {
\r
97 $fn($this->databaseType,'EXECUTE',$this->ErrorNo(),$this->ErrorMsg(),$sql,'');
\r
100 if (is_object($rs)) {
\r
102 $rs->databaseType='csv';
\r
103 $rs->fetchMode = ($this->fetchMode !== false) ? $this->fetchMode : $ADODB_FETCH_MODE;
\r
104 $rs->connection = &$this;
\r
109 // returns queryID or false
\r
110 function &_Execute($sql,$inputarr=false)
\r
112 global $ADODB_FETCH_MODE;
\r
114 if (!$this->_bindInputArray && $inputarr) {
\r
115 $sqlarr = explode('?',$sql);
\r
118 foreach($inputarr as $v) {
\r
120 $sql .= $sqlarr[$i];
\r
121 if (gettype($v) == 'string')
\r
122 $sql .= $this->qstr($v);
\r
123 else if ($v === null)
\r
130 $sql .= $sqlarr[$i];
\r
131 if ($i+1 != sizeof($sqlarr))
\r
132 print "Input Array does not match ?: ".htmlspecialchars($sql);
\r
136 $url = $this->_url.'?sql='.urlencode($sql)."&fetch=".
\r
137 (($this->fetchMode !== false)?$this->fetchMode : $ADODB_FETCH_MODE);
\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
148 $this->_errorMsg = substr($err,$at+4,1024);
\r
149 $this->_errorNo = -9999;
\r
152 if ($this->_errorNo)
\r
153 if ($fn = $this->raiseErrorFn) {
\r
154 $fn($this->databaseType,'EXECUTE',$this->ErrorNo(),$this->ErrorMsg(),$sql,$inputarr);
\r
156 if (is_object($rs)) {
\r
157 $rs->fetchMode = ($this->fetchMode !== false) ? $this->fetchMode : $ADODB_FETCH_MODE;
\r
159 $this->_affectedrows = $rs->affectedrows;
\r
160 $this->_insertid = $rs->insertid;
\r
161 $rs->databaseType='csv';
\r
162 $rs->connection = &$this;
\r
167 /* Returns: the last error message from previous database operation */
\r
168 function ErrorMsg()
\r
170 return $this->_errorMsg;
\r
173 /* Returns: the last error number from previous database operation */
\r
174 function ErrorNo()
\r
176 return $this->_errorNo;
\r
179 // returns true or false
\r
186 class ADORecordset_csv extends ADORecordset {
\r
187 function ADORecordset_csv($id,$mode=false)
\r
189 $this->ADORecordset($id,$mode);
\r