- optimiced db::row() to use the ADODB fetchmode (via db::next_record())

- new param strip for db::row() to strip off common column-prefixes
This commit is contained in:
Ralf Becker 2004-11-07 14:33:24 +00:00
parent 26dee37d3e
commit f8ee85dc81

View File

@ -399,15 +399,22 @@
/** /**
* Move to the next row in the results set * Move to the next row in the results set
* *
* Specifying a fetch_mode only works for newly fetched rows, the first row always gets fetched by query!!!
*
* @param int $fetch_mode ADODB_FETCH_BOTH = numerical+assoc keys (eGW default), ADODB_FETCH_ASSOC or ADODB_FETCH_NUM
* @return bool was another row found? * @return bool was another row found?
*/ */
function next_record() function next_record($fetch_mode=ADODB_FETCH_BOTH)
{ {
if (!$this->Query_ID) if (!$this->Query_ID)
{ {
$this->halt('next_record called with no query pending.'); $this->halt('next_record called with no query pending.');
return 0; return 0;
} }
if ($this->Link_ID->fetchMode != $fetch_mode)
{
$this->Link_ID->SetFetchMode($fetch_mode);
}
if ($this->Row) // first row is already fetched if ($this->Row) // first row is already fetched
{ {
$this->Query_ID->MoveNext(); $this->Query_ID->MoveNext();
@ -429,6 +436,32 @@
// add a numeric version // add a numeric version
$this->Record[] = $value; $this->Record[] = $value;
} }
if (!function_exists('array_change_key_case'))
{
define('CASE_LOWER',0);
define('CASE_UPPER',1);
function array_change_key_case($arr,$mode=CASE_LOWER)
{
foreach($arr as $key => $val)
{
$changed[$mode == CASE_LOWER ? strtolower($key) : strtoupper($key)] = $val;
}
return $changed;
}
}
switch($fetch_mode)
{
case ADODB_FETCH_ASSOC:
$this->Record = array_change_key_case($this->Record);
break;
case ADODB_FETCH_NUM:
$this->Record = array_values($this->Record);
break;
default:
$this->Record = array_change_key_case($this->Record);
$this->Record += array_values($this->Record);
break;
}
} }
return True; return True;
} }
@ -623,11 +656,12 @@
* Returns a query-result-row as an associative array (no numerical keys !!!) * Returns a query-result-row as an associative array (no numerical keys !!!)
* *
* @param bool $do_next_record should next_record() be called or not (default not) * @param bool $do_next_record should next_record() be called or not (default not)
* @param string $strip string to strip of the column-name, default ''
* @return array/bool the associative array or False if no (more) result-row is availible * @return array/bool the associative array or False if no (more) result-row is availible
*/ */
function row($do_next_record=False) function row($do_next_record=False,$strip='')
{ {
if ($do_next_record && !$this->next_record() || !is_array($this->Record)) if ($do_next_record && !$this->next_record(ADODB_FETCH_ASSOC) || !is_array($this->Record))
{ {
return False; return False;
} }
@ -636,7 +670,7 @@
{ {
if (!is_numeric($column)) if (!is_numeric($column))
{ {
if ($this->Type == 'sapdb') $column = strtolower($column); if ($strip) $column = str_replace($strip,'',$column);
$result[$column] = $value; $result[$column] = $value;
} }