Example #1
0
 protected function buildJoins($val, $inner = FALSE)
 {
     $driver = $this->selection->getConnection()->getSupplementalDriver();
     $reflection = $this->selection->getConnection()->getDatabaseReflection();
     $joins = array();
     preg_match_all('~\\b([a-z][\\w.:]*[.:])([a-z]\\w*|\\*)(\\s+IS\\b|\\s*<=>)?~i', $val, $matches);
     foreach ($matches[1] as $names) {
         $parent = $this->selection->getName();
         if ($names !== "{$parent}.") {
             // case-sensitive
             preg_match_all('~\\b([a-z][\\w]*|\\*)([.:])~i', $names, $matches, PREG_SET_ORDER);
             foreach ($matches as $match) {
                 list(, $name, $delimiter) = $match;
                 if ($delimiter === ':') {
                     list($table, $primary) = $reflection->getHasManyReference($parent, $name);
                     $column = $reflection->getPrimary($parent);
                 } else {
                     list($table, $column) = $reflection->getBelongsToReference($parent, $name);
                     $primary = $reflection->getPrimary($table);
                 }
                 $joins[$name] = ' ' . (!isset($joins[$name]) && $inner && !isset($match[3]) ? 'INNER' : 'LEFT') . ' JOIN ' . $driver->delimite($table) . ($table !== $name ? ' AS ' . $driver->delimite($name) : '') . ' ON ' . $driver->delimite($parent) . '.' . $driver->delimite($column) . ' = ' . $driver->delimite($name) . '.' . $driver->delimite($primary);
                 $parent = $name;
             }
         }
     }
     return $joins;
 }
Example #2
0
 protected function getReference($table, $column)
 {
     if (array_key_exists($column, $this->data)) {
         $this->access($column);
         $value = $this->data[$column];
         $value = $value instanceof TableRow ? $value->getPrimary() : $value;
         $referenced = $this->table->getReferencedTable($table, $column, !empty($this->modified[$column]));
         $referenced = isset($referenced[$value]) ? $referenced[$value] : NULL;
         // referenced row may not exist
         if (!empty($this->modified[$column])) {
             // cause saving changed column and prevent regenerating referenced table for $column
             $this->modified[$column] = 0;
             // 0 fails on empty, pass on isset
         }
         return $referenced;
     }
     return FALSE;
 }
Example #3
0
 public function delete()
 {
     $builder = $this->sqlBuilder;
     $this->sqlBuilder = new SqlBuilder($this);
     $this->where($this->column, $this->active);
     $return = parent::delete();
     $this->sqlBuilder = $builder;
     return $return;
 }