Subversion Repositories svnkaklik

Rev

Details | Last modification | View Log

Rev Author Line No. Line
36 kaklik 1
<?php
2
/*
3
V4.80 8 Mar 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
?>