* PostgreSQL: fix SQL error opening ProjectManager

caused by exploding SQL expression by comma --> keep colums as array, to not have the need to explode it
This commit is contained in:
Ralf Becker 2020-09-01 10:24:26 +02:00
parent b43f51b52e
commit eb812dad01

View File

@ -831,7 +831,7 @@ class Base
* "LEFT JOIN table2 ON (x=y AND z=o)", Note: there's no quoting done on $join, you are responsible for it!!! * "LEFT JOIN table2 ON (x=y AND z=o)", Note: there's no quoting done on $join, you are responsible for it!!!
* @param boolean $need_full_no_count =false If true an unlimited query is run to determine the total number of rows, default false * @param boolean $need_full_no_count =false If true an unlimited query is run to determine the total number of rows, default false
* @todo return an interator instead of an array * @todo return an interator instead of an array
* @return array|NULL array of matching rows (the row is an array of the cols) or NULL * @return array|NULL|true array of matching rows (the row is an array of the cols), NULL (nothing matched) or true (multiple union queries)
*/ */
function &search($criteria,$only_keys=True,$order_by='',$extra_cols='',$wildcard='',$empty=False,$op='AND',$start=false,$filter=null,$join='',$need_full_no_count=false) function &search($criteria,$only_keys=True,$order_by='',$extra_cols='',$wildcard='',$empty=False,$op='AND',$start=false,$filter=null,$join='',$need_full_no_count=false)
{ {
@ -921,29 +921,21 @@ class Base
} }
elseif (!$only_keys) elseif (!$only_keys)
{ {
$colums = '*'; $colums = ['*'];
} }
else else
{ {
$colums = $only_keys; $colums = explode(',', $only_keys);
} }
if ($extra_cols) if ($extra_cols)
{ {
if (!is_array($colums)) $colums = array_merge($colums, is_array($extra_cols) ? $extra_cols : explode(',', $extra_cols));
{
$colums .= ','.(is_array($extra_cols) ? implode(',', $extra_cols) : $extra_cols);
}
else
{
$colums = array_merge($colums, is_array($extra_cols) ? $extra_cols : explode(',', $extra_cols));
}
} }
// add table-name to otherwise ambiguous id over which we join (incl. "AS id" to return it with the right name) // add table-name to otherwise ambiguous id over which we join (incl. "AS id" to return it with the right name)
if ($join && $this->autoinc_id) if ($join && $this->autoinc_id)
{ {
if (!is_array($colums) && strpos($colums, '*') !== false) $colums = explode(',', $colums); if (($key = array_search('*', $colums)) !== false)
if (is_array($colums) && ($key = array_search('*', $colums)) !== false)
{ {
unset($colums[$key]); unset($colums[$key]);
// don't add colums already existing incl. aliased colums (AS $name) // don't add colums already existing incl. aliased colums (AS $name)
@ -961,14 +953,10 @@ class Base
} }
} }
} }
if (is_array($colums) && ($key = array_search($this->autoinc_id, $colums)) !== false) if (($key = array_search($this->autoinc_id, $colums)) !== false)
{ {
$colums[$key] = $this->table_name.'.'.$this->autoinc_id.' AS '.$this->autoinc_id; $colums[$key] = $this->table_name.'.'.$this->autoinc_id.' AS '.$this->autoinc_id;
} }
elseif (!is_array($colums) && strpos($colums,$this->autoinc_id) !== false)
{
$colums = preg_replace('/(?<! AS)([ ,]+)'.preg_quote($this->autoinc_id, '/').'([ ,]+)/','\\1'.$this->table_name.'.'.$this->autoinc_id.' AS '.$this->autoinc_id.'\\2',$colums);
}
} }
$num_rows = 0; // as spec. in max_matches in the user-prefs $num_rows = 0; // as spec. in max_matches in the user-prefs
if (is_array($start)) list($start,$num_rows) = $start; if (is_array($start)) list($start,$num_rows) = $start;
@ -1003,7 +991,7 @@ class Base
{ {
$union_cols = $this->_get_columns($only_keys,$extra_cols); $union_cols = $this->_get_columns($only_keys,$extra_cols);
} }
return true; // waiting for further calls, before running the union-query $ret = true; return $ret; // waiting for further calls, before running the union-query
} }
// running the union query now // running the union query now
if ($start !== false) // need to get the total too, saved in $this->total if ($start !== false) // need to get the total too, saved in $this->total
@ -1068,7 +1056,8 @@ class Base
$arr[] = $this->db2data($data); $arr[] = $this->db2data($data);
$n++; $n++;
} }
return $n ? $arr : null; if (!$n) $arr = null;
return $arr;
} }
/** /**