19 if (!defined(
'ADODB_DIR')) die();
31 var
$metaColumnsSQL =
"SELECT c.column_name, c.column_type, c.width FROM syscolumn c, systable t WHERE t.table_name='%s' AND c.table_id=t.table_id AND t.table_type='BASE'";
50 return $this->GetOne(
'select @@identity');
55 return $this->GetOne(
'select @@rowcount');
62 if ($this->transOff)
return true;
65 $this->Execute(
'BEGIN TRAN');
71 if ($this->transOff)
return true;
76 $this->Execute(
'COMMIT TRAN');
82 if ($this->transOff)
return true;
84 $this->Execute(
'ROLLBACK TRAN');
93 return $this->GetOne(
"select $col from $tables HOLDLOCK where $where");
99 $this->database = $dbName;
100 $this->databaseName = $dbName; # obsolete, retained
for compat with older adodb versions
101 if ($this->_connectionID) {
102 return @sybase_select_db($dbName);
113 if ($this->_logsql)
return $this->_errorMsg;
114 if (function_exists(
'sybase_get_last_message'))
115 $this->_errorMsg = sybase_get_last_message();
117 $this->_errorMsg = isset($php_errormsg) ? $php_errormsg :
'SYBASE error messages not supported on this platform';
118 return $this->_errorMsg;
122 function _connect($argHostname, $argUsername, $argPassword, $argDatabasename)
124 if (!function_exists(
'sybase_connect'))
return null;
126 if ($this->charSet) {
127 $this->_connectionID = sybase_connect($argHostname,$argUsername,$argPassword, $this->charSet);
129 $this->_connectionID = sybase_connect($argHostname,$argUsername,$argPassword);
132 if ($this->_connectionID ===
false)
return false;
133 if ($argDatabasename)
return $this->
SelectDB($argDatabasename);
138 function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
140 if (!function_exists(
'sybase_connect'))
return null;
142 if ($this->charSet) {
143 $this->_connectionID = sybase_pconnect($argHostname,$argUsername,$argPassword, $this->charSet);
145 $this->_connectionID = sybase_pconnect($argHostname,$argUsername,$argPassword);
148 if ($this->_connectionID ===
false)
return false;
149 if ($argDatabasename)
return $this->
SelectDB($argDatabasename);
156 global $ADODB_COUNTRECS;
158 if ($ADODB_COUNTRECS ==
false && ADODB_PHPVER >= 0x4300)
159 return sybase_unbuffered_query($sql,$this->_connectionID);
161 return sybase_query($sql,$this->_connectionID);
165 function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=
false,$secs2cache=0)
167 if ($secs2cache > 0) {
168 $rs = ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache);
172 $nrows = (integer) $nrows;
173 $offset = (integer) $offset;
175 $cnt = ($nrows >= 0) ? $nrows : 999999999;
176 if ($offset > 0 &&
$cnt)
$cnt += $offset;
178 $this->Execute(
"set rowcount $cnt");
179 $rs = ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,0);
180 $this->Execute(
"set rowcount 0");
188 return @sybase_close($this->_connectionID);
203 # Added 2003-10-05 by Chris Phillipson
204 # Used ASA SQL Reference Manual -- http://sybooks.sybase.com/onlinebooks/group-aw/awg0800e/dbrfen8/@ebt-link;pt=16756?target=%25N%15_12018_START_RESTART_N%25
205 # to convert similar Microsoft SQL*Server (mssql) API into Sybase compatible version
209 if (!$col) $col = $this->sysTimeStamp;
213 for ($i=0; $i < $len; $i++) {
219 $s .=
"datename(yy,$col)";
222 $s .=
"convert(char(3),$col,0)";
225 $s .=
"str_replace(str(month($col),2),' ','0')";
229 $s .=
"datename(qq,$col)";
233 $s .=
"str_replace(str(datepart(dd,$col),2),' ','0')";
236 $s .=
"substring(convert(char(14),$col,0),13,2)";
240 $s .=
"str_replace(str(datepart(hh,$col),2),' ','0')";
244 $s .=
"str_replace(str(datepart(mi,$col),2),' ','0')";
247 $s .=
"str_replace(str(datepart(ss,$col),2),' ','0')";
251 $s .=
"substring(convert(char(19),$col,0),18,2)";
257 $ch = substr($fmt,$i,1);
259 $s .= $this->qstr($ch);
266 # Added 2003-10-07 by Chris Phillipson
267 # Used ASA SQL Reference Manual -- http://sybooks.sybase.com/onlinebooks/group-aw/awg0800e/dbrfen8/@ebt-link;pt=5981;uf=0?target=0;window=new;showtoc=true;book=dbrfen8
268 # to convert similar Microsoft SQL*Server (mssql) API into Sybase compatible version
271 $sql =
"SELECT c.column_name " .
272 "FROM syscolumn c, systable t " .
273 "WHERE t.table_name='$table' AND c.table_id=t.table_id " .
274 "AND t.table_type='BASE' " .
275 "AND c.pkey = 'Y' " .
276 "ORDER BY c.column_id";
278 $a = $this->GetCol($sql);
279 if (
$a &&
sizeof(
$a)>0)
return $a;
288 $ADODB_sybase_mths = array(
289 'JAN'=>1,
'FEB'=>2,
'MAR'=>3,
'APR'=>4,
'MAY'=>5,
'JUN'=>6,
290 'JUL'=>7,
'AUG'=>8,
'SEP'=>9,
'OCT'=>10,
'NOV'=>11,
'DEC'=>12);
297 var
$_mths = array(
'JAN'=>1,
'FEB'=>2,
'MAR'=>3,
'APR'=>4,
'MAY'=>5,
'JUN'=>6,
'JUL'=>7,
'AUG'=>8,
'SEP'=>9,
'OCT'=>10,
'NOV'=>11,
'DEC'=>12);
301 if ($mode ===
false) {
302 global $ADODB_FETCH_MODE;
303 $mode = $ADODB_FETCH_MODE;
305 if (!$mode) $this->fetchMode = ADODB_FETCH_ASSOC;
306 else $this->fetchMode = $mode;
307 $this->ADORecordSet($id,$mode);
316 if ($fieldOffset != -1) {
317 $o = @sybase_fetch_field($this->_queryID, $fieldOffset);
319 else if ($fieldOffset == -1) {
320 $o = @sybase_fetch_field($this->_queryID);
323 if ($o && !isset($o->type)) $o->type = ($o->numeric) ?
'float' :
'varchar';
329 global $ADODB_COUNTRECS;
330 $this->_numOfRows = ($ADODB_COUNTRECS)? @sybase_num_rows($this->_queryID):-1;
331 $this->_numOfFields = @sybase_num_fields($this->_queryID);
336 return @sybase_data_seek($this->_queryID, $row);
341 if ($this->fetchMode == ADODB_FETCH_NUM) {
342 $this->fields = @sybase_fetch_row($this->_queryID);
343 }
else if ($this->fetchMode == ADODB_FETCH_ASSOC) {
344 $this->fields = @sybase_fetch_row($this->_queryID);
345 if (is_array($this->fields)) {
346 $this->fields = $this->GetRowAssoc(ADODB_ASSOC_CASE);
351 $this->fields = @sybase_fetch_array($this->_queryID);
353 if ( is_array($this->fields)) {
363 return @sybase_free_result($this->_queryID);
381 $this->ADORecordSet_array($id);
390 if (!preg_match(
"/([A-Za-z]{3})[-/\. ]+([0-9]{1,2})[-/\. ]+([0-9]{4})/"
391 ,$v, $rr))
return parent::UnixDate($v);
393 if ($rr[3] <= TIMESTAMP_FIRST_YEAR)
return 0;
395 $themth = substr(strtoupper($rr[1]),0,3);
396 $themth = $ADODB_sybase_mths[$themth];
397 if ($themth <= 0)
return false;
407 if (!preg_match(
"/([A-Za-z]{3})[-/\. ]([0-9 ]{1,2})[-/\. ]([0-9]{4}) +([0-9]{1,2}):([0-9]{1,2}) *([apAP]{0,1})/"
408 ,$v, $rr))
return parent::UnixTimeStamp($v);
409 if ($rr[3] <= TIMESTAMP_FIRST_YEAR)
return 0;
411 $themth = substr(strtoupper($rr[1]),0,3);
412 $themth = $ADODB_sybase_mths[$themth];
413 if ($themth <= 0)
return false;
415 switch (strtoupper($rr[6])) {
417 if ($rr[4]<12) $rr[4] += 12;
420 if ($rr[4]==12) $rr[4] = 0;
426 return adodb_mktime($rr[4],$rr[5],0,$themth,$rr[2],$rr[3]);