1 | <?php
|
---|
2 | /*
|
---|
3 | V4.94 23 Jan 2007 (c) 2000-2007 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 | ?> |
---|