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'";
52 return $this->GetOne(
'select @@identity');
57 return $this->GetOne(
'select @@rowcount');
64 if ($this->transOff)
return true;
67 $this->Execute(
'BEGIN TRAN');
73 if ($this->transOff)
return true;
78 $this->Execute(
'COMMIT TRAN');
84 if ($this->transOff)
return true;
86 $this->Execute(
'ROLLBACK TRAN');
91 function RowLock($tables,$where,$col=
'top 1 null as ignore')
94 $tables = str_replace(
',',
' HOLDLOCK,',$tables);
95 return $this->GetOne(
"select $col from $tables HOLDLOCK where $where");
101 $this->database = $dbName;
102 $this->databaseName = $dbName; # obsolete, retained
for compat with older adodb versions
103 if ($this->_connectionID) {
104 return @sybase_select_db($dbName);
115 if ($this->_logsql)
return $this->_errorMsg;
116 if (function_exists(
'sybase_get_last_message'))
117 $this->_errorMsg = sybase_get_last_message();
119 $this->_errorMsg = isset($php_errormsg) ? $php_errormsg :
'SYBASE error messages not supported on this platform';
120 return $this->_errorMsg;
124 function _connect($argHostname, $argUsername, $argPassword, $argDatabasename)
126 if (!function_exists(
'sybase_connect'))
return null;
133 if ($this->charSet) {
134 $this->_connectionID = sybase_connect($argHostname,$argUsername,$argPassword, $this->charSet);
136 $this->_connectionID = sybase_connect($argHostname,$argUsername,$argPassword);
139 if ($this->_connectionID ===
false)
return false;
140 if ($argDatabasename)
return $this->
SelectDB($argDatabasename);
145 function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
147 if (!function_exists(
'sybase_connect'))
return null;
154 if ($this->charSet) {
155 $this->_connectionID = sybase_pconnect($argHostname,$argUsername,$argPassword, $this->charSet);
157 $this->_connectionID = sybase_pconnect($argHostname,$argUsername,$argPassword);
160 if ($this->_connectionID ===
false)
return false;
161 if ($argDatabasename)
return $this->
SelectDB($argDatabasename);
168 global $ADODB_COUNTRECS;
170 if ($ADODB_COUNTRECS ==
false && ADODB_PHPVER >= 0x4300)
171 return sybase_unbuffered_query(
$sql,$this->_connectionID);
173 return sybase_query(
$sql,$this->_connectionID);
179 if ($secs2cache > 0) {
180 $rs = ADOConnection::SelectLimit(
$sql,$nrows,$offset,$inputarr,$secs2cache);
184 $nrows = (integer) $nrows;
185 $offset = (integer) $offset;
187 $cnt = ($nrows >= 0) ? $nrows : 999999999;
188 if ($offset > 0 && $cnt) $cnt += $offset;
190 $this->Execute(
"set rowcount $cnt");
191 $rs = ADOConnection::SelectLimit(
$sql,$nrows,$offset,$inputarr,0);
192 $this->Execute(
"set rowcount 0");
200 return @sybase_close($this->_connectionID);
215 # Added 2003-10-05 by Chris Phillipson 216 # 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 217 # to convert similar Microsoft SQL*Server (mssql) API into Sybase compatible version 221 if (!$col) $col = $this->sysTimeStamp;
225 for ($i=0; $i < $len; $i++) {
231 $s .=
"datename(yy,$col)";
234 $s .=
"convert(char(3),$col,0)";
237 $s .=
"str_replace(str(month($col),2),' ','0')";
241 $s .=
"datename(qq,$col)";
245 $s .=
"str_replace(str(datepart(dd,$col),2),' ','0')";
248 $s .=
"substring(convert(char(14),$col,0),13,2)";
252 $s .=
"str_replace(str(datepart(hh,$col),2),' ','0')";
256 $s .=
"str_replace(str(datepart(mi,$col),2),' ','0')";
259 $s .=
"str_replace(str(datepart(ss,$col),2),' ','0')";
263 $s .=
"substring(convert(char(19),$col,0),18,2)";
269 $ch = substr($fmt,$i,1);
271 $s .= $this->qstr($ch);
278 # Added 2003-10-07 by Chris Phillipson 279 # 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 280 # to convert similar Microsoft SQL*Server (mssql) API into Sybase compatible version 283 $sql =
"SELECT c.column_name " .
284 "FROM syscolumn c, systable t " .
285 "WHERE t.table_name='$table' AND c.table_id=t.table_id " .
286 "AND t.table_type='BASE' " .
287 "AND c.pkey = 'Y' " .
288 "ORDER BY c.column_id";
290 $a = $this->GetCol(
$sql);
291 if ($a &&
sizeof($a)>0)
return $a;
300 $ADODB_sybase_mths = array(
301 'JAN'=>1,
'FEB'=>2,
'MAR'=>3,
'APR'=>4,
'MAY'=>5,
'JUN'=>6,
302 'JUL'=>7,
'AUG'=>8,
'SEP'=>9,
'OCT'=>10,
'NOV'=>11,
'DEC'=>12);
309 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);
313 if ($mode ===
false) {
314 global $ADODB_FETCH_MODE;
315 $mode = $ADODB_FETCH_MODE;
317 if (!$mode) $this->fetchMode = ADODB_FETCH_ASSOC;
318 else $this->fetchMode = $mode;
319 $this->ADORecordSet($id,$mode);
328 if ($fieldOffset != -1) {
329 $o = @sybase_fetch_field($this->_queryID, $fieldOffset);
331 else if ($fieldOffset == -1) {
332 $o = @sybase_fetch_field($this->_queryID);
335 if ($o && !isset($o->type)) $o->type = ($o->numeric) ?
'float' :
'varchar';
341 global $ADODB_COUNTRECS;
342 $this->_numOfRows = ($ADODB_COUNTRECS)? @sybase_num_rows($this->_queryID):-1;
343 $this->_numOfFields = @sybase_num_fields($this->_queryID);
348 return @sybase_data_seek($this->_queryID, $row);
353 if ($this->fetchMode == ADODB_FETCH_NUM) {
354 $this->fields = @sybase_fetch_row($this->_queryID);
355 }
else if ($this->fetchMode == ADODB_FETCH_ASSOC) {
356 $this->fields = @sybase_fetch_assoc($this->_queryID);
358 if (is_array($this->fields)) {
359 $this->fields = $this->GetRowAssoc(ADODB_ASSOC_CASE);
364 $this->fields = @sybase_fetch_array($this->_queryID);
366 if ( is_array($this->fields)) {
376 return @sybase_free_result($this->_queryID);
394 $this->ADORecordSet_array($id);
403 if (!preg_match(
"/([A-Za-z]{3})[-/\. ]+([0-9]{1,2})[-/\. ]+([0-9]{4})/" 404 ,$v, $rr))
return parent::UnixDate($v);
406 if ($rr[3] <= TIMESTAMP_FIRST_YEAR)
return 0;
408 $themth = substr(strtoupper($rr[1]),0,3);
409 $themth = $ADODB_sybase_mths[$themth];
410 if ($themth <= 0)
return false;
420 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})/" 421 ,$v, $rr))
return parent::UnixTimeStamp($v);
422 if ($rr[3] <= TIMESTAMP_FIRST_YEAR)
return 0;
424 $themth = substr(strtoupper($rr[1]),0,3);
425 $themth = $ADODB_sybase_mths[$themth];
426 if ($themth <= 0)
return false;
428 switch (strtoupper($rr[6])) {
430 if ($rr[4]<12) $rr[4] += 12;
433 if ($rr[4]==12) $rr[4] = 0;
439 return adodb_mktime($rr[4],$rr[5],0,$themth,$rr[2],$rr[3]);
SelectLimit($sql, $nrows=-1, $offset=-1, $inputarr=false, $secs2cache=0)
if(isset($_REQUEST['nrows'])) else $rs
FetchField($fieldOffset=-1)
_pconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
RowLock($tables, $where, $col='top 1 null as ignore')
_connect($argHostname, $argUsername, $argPassword, $argDatabasename)
SQLDate($fmt, $col=false)
_fetch($ignore_fields=false)
ADORecordSet_array_sybase($id=-1)
global $ADODB_sybase_mths
adodb_mktime($hr, $min, $sec, $mon=false, $day=false, $year=false, $is_dst=false, $is_gmt=false)
_query($sql, $inputarr=false)
ADORecordset_sybase($id, $mode=false)