}
// since roo does not support autojoin yet..
- $this->autoJoinExtra();
+ if (!isset($q['_distinct'])) {
+ $this->autoJoinExtra();
+ }
}
-
-
+
function autoJoinExtra()
{
//$ret = parent::autoJoin();
- DB_DataObject::debugLevel(1);
+ // DB_DataObject::debugLevel(1);
// now try and magically join person_table to the right table..
+ return;
+ // this does not work on postgres..
$tn = $this->tableName();
$pt = DB_DataObject::Factory($this->tableName());
$pt->selectAdD();
$pt->selectAdD('distinct(person_table) as person_table');
$pt->whereAdd('person_table IS NOT NULL AND LENGTH(person_table) > 0');
$tbls = $pt->fetchAll('person_table');
+ $pers = DB_DataObject::Factory('Person');
+ $ptbl = $pers->tableName();
+ if (!in_array($ptbl,$tbls)) {
+ $tbls[] = $ptbl;
+
+ }
foreach($tbls as $tbl) {
// find all the columns from the joined table..
$st = DB_DataObject::Factory($tbl);
$tcols = array_keys($st->table());
+
+ $cond = "{$tn}.person_table = '{$tbl}'";
+ if ($tbl == $ptbl) {
+ $cond = "( $cond OR {$tn}.person_table = '')";
+ }
+
foreach($tcols as $col) {
if ($col == 'passwd') {
continue;
}
$cols[$col] = isset($cols[$col] ) ? $cols[$col] : array();
- $cols[$col][] = "WHEN {$tn}.person_table = '$tbl' THEN join_person_table_{$tbl}.{$col}";
+ $cols[$col][] = "WHEN $cond THEN join_person_table_{$tbl}.{$col}";
}
// id's are hard coded...
+
$this->_join .= "
- LEFT JOIN {$tbl} join_person_table_{$tbl}
+ LEFT JOIN {$tbl} AS join_person_table_{$tbl}
ON {$tn}.person_id = join_person_table_{$tbl}.id
- AND {$tn}.person_table = '{$tbl}'
-
+ AND $cond
";
}
foreach($cols as $col=>$whens) {