RE: [PEAR-CVS] cvs: pear /DB/DB ibase.php

From: Date: Tue, 10 Jun 2003 16:44:01 +0000
Subject: RE: [PEAR-CVS] cvs: pear /DB/DB ibase.php
References: 1  Groups: php.pear.dev 
Request: Send a blank email to pear-dev+get-17263@lists.php.net to get a copy of this message
Lorenzo, are there any changes you think should also go into the MDB ibase driver? Regards, Lukas > From: Tomas V.V.Cox [mailto:cox@php.net] > Sent: Saturday, June 07, 2003 8:30 PM > To: pear-cvs@lists.php.net > Subject: [PEAR-CVS] cvs: pear /DB/DB ibase.php > > cox Sat Jun 7 14:29:59 2003 EDT > > Modified files: > /pear/DB/DB ibase.php > Log: > Fix for "sync error" message > Fix limitQuery() when 'firebird' syntax is passed > Return mismatch error when the placeholder '&' is found > Use the new ibase_fetch_assoc() if avaible for DB_FETCHMOD_ASSOC > Fix SKIP param starting at 1 when should start at 0 > > > Index: pear/DB/DB/ibase.php > diff -u pear/DB/DB/ibase.php:1.9 pear/DB/DB/ibase.php:1.10 > --- pear/DB/DB/ibase.php:1.9 Wed May 7 12:58:28 2003 > +++ pear/DB/DB/ibase.php Sat Jun 7 14:29:59 2003 > @@ -16,11 +16,14 @@ > // | Author: Sterling Hughes <sterling@php.net> > | > // +--------------------------------------------------------------------- > -+ > // > -// $Id: ibase.php,v 1.9 2003/05/07 16:58:28 mj Exp $ > +// $Id: ibase.php,v 1.10 2003/06/07 18:29:59 cox Exp $ > // > // Database independent query interface definition for PHP's Interbase > // extension. > -// > +// > +// Bugs: > +// - If dbsyntax is not firebird, the limitQuery may fail > +// - The palceholders '&' and '!' don't work here > > require_once 'DB/common.php'; > > @@ -47,7 +50,7 @@ > 'pconnect' => true, > 'transactions' => true, > 'limit' => false > - ); > + ); > // just a few of the tons of Interbase error codes listed in the > // Language Reference section of the Interbase manual > $this->errorcode_map = array( > @@ -117,7 +120,10 @@ > if (!$conn) { > return $this->ibaseRaiseError(DB_ERROR_CONNECT_FAILED); > } > - $this->connection = $conn; > + $this->connection = $conn; > + if ($this->dsn['dbsyntax'] == 'firebird') { > + $this->features['limit'] = 'alter'; > + } > return DB_OK; > } > > @@ -138,8 +144,8 @@ > { > $ismanip = DB::isManip($query); > $this->last_query = $query; > - $query = $this->modifyQuery($query); > - $result = @ibase_query($this->connection, $query); > + $query = $this->modifyQuery($query); > + $result = ibase_query($this->connection, $query); > if (!$result) { > return $this->ibaseRaiseError(); > } > @@ -171,7 +177,8 @@ > function modifyLimitQuery($query, $from, $count) > { > if ($this->dsn['dbsyntax'] == 'firebird') { > - $from++; // SKIP starts from 1, ie SKIP 1 starts from the > first record > + //$from++; // SKIP starts from 1, ie SKIP 1 starts from the > first record > + // (cox) Seems that SKIP starts in 0 > $query = preg_replace('/^\s*select\s(.*)$/is', > "SELECT FIRST $count SKIP $from $1", > $query); > } > @@ -201,22 +208,26 @@ > // {{{ fetchInto() > > function fetchInto($result, &$ar, $fetchmode, $rownum = null) > - { > + { > if ($rownum !== NULL) { > return $this->ibaseRaiseError(DB_ERROR_NOT_CAPABLE); > } > - if ($fetchmode & DB_FETCHMODE_ASSOC) { > - $ar = get_object_vars(ibase_fetch_object($result)); > + if ($fetchmode & DB_FETCHMODE_ASSOC) { > + if (function_exists('ibase_fetch_assoc')) { > + $ar = ibase_fetch_assoc($result); > + } else { > + $ar = get_object_vars(ibase_fetch_object($result)); > + } > if ($ar && $this->options['optimize'] == > 'portability') { > $ar = array_change_key_case($ar, CASE_LOWER); > - } > + } > } else { > $ar = ibase_fetch_row($result); > - } > + } > if (!$ar) { > if ($errmsg = ibase_errmsg()) { > return $this->ibaseRaiseError(null, $errmsg); > - } else { > + } else { > return null; > } > } > @@ -264,9 +275,12 @@ > // {{{ prepare() > > function prepare($query) > - { > + { > + if (strpos($query, '&') !== false) { > + return $this->raiseError(null, "Placeholder '&' not > supported"); > + } > $this->last_query = $query; > - $query = $this->modifyQuery($query); > + $query = $this->modifyQuery($query); > $stmt = ibase_prepare($query); > $this->manip_query[(int)$stmt] = DB::isManip($query); > return $stmt; > @@ -276,8 +290,12 @@ > // {{{ execute() > > function execute($stmt, $data = false) > - { > - $result = ibase_execute($stmt, $data); > + { > + if (!sizeof($data)) { > + return $this->raiseError(DB_ERROR_MISMATCH); > + } > + $data = array_merge(array($stmt), $data); > + $result = call_user_func_array('ibase_execute', $data); > if (!$result) { > return $this->ibaseRaiseError(); > } > @@ -340,7 +358,7 @@ > do { > $this->pushErrorHandling(PEAR_ERROR_RETURN); > $result = $this->query("SELECT GEN_ID(${sqn}_SEQ, 1) FROM > RDB\$GENERATORS" > - ." WHERE > RDB\$GENERATOR_NAME='${sqn}_SEQ'"); > + ." WHERE > RDB\$GENERATOR_NAME='${sqn}_SEQ'"); > $this->popErrorHandling(); > if ($ondemand && DB::isError($result)) { > $repeat = 1; > @@ -353,7 +371,7 @@ > } > } while ($repeat); > if (DB::isError($result)) { > - return $result; > + return $this->raiseError($result); > } > $arr = $result->fetchRow(DB_FETCHMODE_ORDERED); > $result->free(); > @@ -605,7 +623,7 @@ > if ($errno === null) { > $ibase_errno = (int)$m[2]; > // try to interpret Interbase error code (that's why we > need ibase_errno() > - // in the interbase module to return the real error code) > + // in the interbase module to return the real error code) > switch ($ibase_errno) { > case -204: > if (is_int(strpos($m[3], 'Table unknown'))) { > @@ -618,7 +636,7 @@ > } > $errmsg = $m[2] . ' ' . $m[3]; > } > - > + > return $this->raiseError($errno, null, null, $errmsg, > $this->last_query); > } > > > > -- > PEAR CVS Mailing List (http://pear.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php

« previous php.pear.dev (#17263) next »