Index: trunk/kernel/include/adodb/adodb-ibase.inc.php =================================================================== diff -u -N --- trunk/kernel/include/adodb/adodb-ibase.inc.php (revision 13) +++ trunk/kernel/include/adodb/adodb-ibase.inc.php (revision 0) @@ -1,331 +0,0 @@ - - changed transaction handling and added experimental blob stuff - - Docs to interbase at the website - http://www.synectics.co.za/php3/tutorial/IB_PHP3_API.html - - To use gen_id(), see - http://www.volny.cz/iprenosil/interbase/ip_ib_code.htm#_code_creategen - - $rs = $conn->Execute('select gen_id(adodb,1) from rdb$database'); - $id = $rs->fields[0]; - $conn->Execute("insert into table (id, col1,...) values ($id, $val1,...)"); -*/ - -class ADODB_ibase extends ADODBConnection { - var $databaseType = "ibase"; - var $replaceQuote = "\'"; // string to use to replace quotes - var $fmtDate = "'Y-m-d'"; - var $fmtTimeStamp = "'Y-m-d, H:i:s'"; - var $concat_operator='||'; - var $_transactionID; - var $metaTablesSQL = "select rdb\$relation_name from rdb\$relations where rdb\$relation_name not like 'RDB\$%'"; - var $metaColumnsSQL = "select a.rdb\$field_name,b.rdb\$field_type,b.rdb\$field_length from rdb\$relation_fields a join rdb\$fields b on a.rdb\$field_source=b.rdb\$field_name where rdb\$relation_name ='%s'"; - var $ibasetrans = IBASE_DEFAULT; - var $hasGenID = true; - - // note the generator starts from 0, unlike others which start from 1 - var $_genIDSQL = "SELECT Gen_ID(%s,1) FROM RDB\$DATABASE"; - var $_genSeqSQL = "INSERT INTO RDB\$GENERATORS (RDB\$GENERATOR_NAME) VALUES (UPPER('%s'))"; - - function ADODB_ibase() - { - ibase_timefmt('%Y-%m-%d'); - } - - function BeginTrans() - { - //return false; // currently not working properly - - $this->autoCommit = false; - $this->_transactionID = $this->_connectionID;//ibase_trans($this->ibasetrans, $this->_connectionID); - return $this->_transactionID; - } - - function CommitTrans() - { - $ret = false; - $this->autoCommit = true; - if ($this->_transactionID) { - //print ' commit '; - $ret = ibase_commit($this->_transactionID); - } - $this->_transactionID = false; - return $ret; - } - - function RollbackTrans() - { - $ret = false; - $this->autoCommit = true; - if ($this->_transactionID) - $ret = ibase_rollback($this->_transactionID); - $this->_transactionID = false; - - return $ret; - } - - function SelectDB($dbName) { - return false; - } - - function _handleerror() - { - $this->_errorMsg = ibase_errmsg($this->_connectionID); - } - - function ErrorNo() { - if (preg_match('/error code = ([\-0-9]*)/i', $this->_errorMsg,$arr)) return (integer) $arr[1]; - else return 0; - } - - function ErrorMsg() { - return $this->_errorMsg; - } - - // returns true or false - function _connect($argHostname, $argUsername, $argPassword, $argDatabasename) - { - if ($this->charSet) - $this->_connectionID = ibase_connect($argHostname,$argUsername,$argPassword,$this->charSet); - else - $this->_connectionID = ibase_connect($argHostname,$argUsername,$argPassword); - - if ($this->_connectionID === false) { - $this->_handleerror(); - return false; - } - - return true; - } - // returns true or false - function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) - { - if ($this->charSet) - $this->_connectionID = ibase_pconnect($argHostname,$argUsername,$argPassword,$this->charSet); - else - $this->_connectionID = ibase_pconnect($argHostname,$argUsername,$argPassword); - - if ($this->_connectionID === false) { - $this->_handleerror(); - return false; - } - - return true; - } - - // returns query ID if successful, otherwise false - function _query($sql,$inputarr) - { - if (!$this->autoCommit && $this->_transactionID) { - $ret = ibase_query($this->_transactionID,$sql); - } else { - $ret = ibase_query($this->_connectionID,$sql); - if ($ret === true) ibase_commit($this->_connectionID); - } - $this->_handleerror(); - return $ret; - } - - // returns true or false - function _close() - { - if ($this->autoCommit) ibase_commit($this->_connectionID); - else ibase_rollback($this->_connectionID); - - return @ibase_close($this->_connectionID); - } - - // returns array of ADODBFieldObjects for current table - function &MetaColumns($table) - { - - if ($this->metaColumnsSQL) { - - $rs = $this->Execute(sprintf($this->metaColumnsSQL,strtoupper($table))); - if ($rs === false) return false; - - $retarr = array(); - while (!$rs->EOF) { //print_r($rs->fields); - $fld = new ADODBFieldObject(); - $fld->name = $rs->fields[0]; - $tt = $rs->fields[1]; - switch($tt) - { - case 7: - case 8: - case 9:$tt = 'INTEGER'; break; - case 10: - case 27: - case 11:$tt = 'FLOAT'; break; - default: - case 40: - case 14:$tt = 'CHAR'; break; - case 35:$tt = 'DATE'; break; - case 37:$tt = 'VARCHAR'; break; - case 261:$tt = 'BLOB'; break; - case 13: - case 35:$tt = 'TIMESTAMP'; break; - } - $fld->type = $tt; - $fld->max_length = $rs->fields[2]; - $retarr[strtoupper($fld->name)] = $fld; - - $rs->MoveNext(); - } - $rs->Close(); - return $retarr; - } - return false; - } - - // warning - this code is experimental and might not be available in the future - function &BlobEncode( &$blob ) - { - $blobid = ibase_blob_create( $this->_connectionID); - ibase_blob_add( $blobid, $blob ); - $blobidstr = ibase_blob_close( $blobid ); - - return( $blobidstr ); - } - - // warning - this code is experimental and might not be available in the future - function &BlobDecode( &$blob ) - { - $blobid = ibase_blob_open( $blob ); - $realblob = ibase_blob_get( $blobid,99999); // 2nd param is max size of blob -- Kevin Boillet - ibase_blob_close( $blobid ); - - return( $realblob ); - } - - /* - Insert a null into the blob field of the table first. - Then use UpdateBlob to store the blob. - - Usage: - - $conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)'); - $conn->UpdateBlob('blobtable','blobcol',$blob,'id=1'); - */ - function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB') - { - $blob_id = ibase_blob_create($this->_connectionID); - ibase_blob_add($blob_id, $val); - $blob_id_str = ibase_blob_close($blob_id); - return ibase_query("UPDATE $table SET $column=(?) WHERE $where", $blob_id_str) != false; - } -} - -/*-------------------------------------------------------------------------------------- - Class Name: Recordset ---------------------------------------------------------------------------------------*/ - -class ADORecordset_ibase extends ADORecordSet -{ - - var $databaseType = "ibase"; - var $bind=false; - - function ADORecordset_ibase($id) - { - return $this->ADORecordSet($id); - } - - /* Returns: an object containing field information. - Get column information in the Recordset object. fetchField() can be used in order to obtain information about - fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retrieved by - fetchField() is retrieved. */ - - function &FetchField($fieldOffset = -1) - { - $fld = new ADODBFieldObject; - $ibf = ibase_field_info($this->_queryID,$fieldOffset); - $fld->name = $ibf['name']; - if (empty($fld->name)) $fld->name = $ibf['alias']; - $fld->type = $ibf['type']; - $fld->max_length = $ibf['length']; - if ($this->debug) print_r($fld); - return $fld; - } - - function _initrs() - { - $this->_numOfRows = -1; - $this->_numOfFields = @ibase_num_fields($this->_queryID); - } - - function _seek($row) - { - return false; - } - - function _fetch($ignore_fields=false) { - - $f = ibase_fetch_row($this->_queryID); - if ($f === false) return false; - $this->fields = $f; - return true; - } - - /* Use associative array to get fields array */ - function Fields($colname) - { - if (!$this->bind) { - $this->bind = array(); - for ($i=0; $i < $this->_numOfFields; $i++) { - $o = $this->FetchField($i); - $this->bind[strtoupper($o->name)] = $i; - } - } - - return $this->fields[$this->bind[strtoupper($colname)]]; - - } - - - function _close() - { - return @ibase_free_result($this->_queryID); - } - - function MetaType($t,$len=-1) - { - switch (strtoupper($t)) { - case 'CHAR': - return 'C'; - - - case 'TEXT': - case 'VARCHAR': - case 'VARYING': - if ($len <= $this->blobSize) return 'C'; - return 'X'; - case 'BLOB': - return 'B'; - - case 'TIMESTAMP': - case 'DATE': return 'D'; - - //case 'T': return 'T'; - - //case 'L': return 'L'; - case 'INT': - case 'SHORT': - case 'INTEGER': return 'I'; - default: return 'N'; - } - } -} -?>