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