}
-
+ // since roo does not support autojoin yet..
+ if (!isset($q['_distinct'])) {
+ $this->autoJoinExtra();
+ }
}
-
-
- function autoJoin()
+
+ function autoJoinExtra()
{
- parent::autoJoin();
+ //$ret = parent::autoJoin();
+ // 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}
- ON {$tn}.person_id = join_person_table_{$tbl}
- AND {$tn}.person_table = '{$tbl}'
-
-
+ LEFT JOIN {$tbl} AS join_person_table_{$tbl}
+ ON {$tn}.person_id = join_person_table_{$tbl}.id
+ AND $cond
";
}
foreach($cols as $col=>$whens) {
as person_table_{$col}"
);
}
-
-
-
+ //return $ret;
+
}