Esempio n. 1
0
 /**
  * Create a new instance.
  *
  * @param      Criteria $parent The outer class (this is an "inner" class).
  * @param      ColumnMap $column A Column object to help escaping the value
  * @param      mixed $value
  * @param      string $comparison, among ModelCriteria::MODEL_CLAUSE
  * @param      string $clause A simple pseudo-SQL clause, e.g. 'foo.BAR LIKE ?'
  */
 public function __construct(Criteria $outer, $column, $value = null, $comparison = ModelCriteria::MODEL_CLAUSE, $clause)
 {
     $this->value = $value;
     if ($column instanceof ColumnMap) {
         $this->column = $column->getName();
         $this->table = $column->getTable()->getName();
     } else {
         $dotPos = strrpos($column, '.');
         if ($dotPos === false) {
             // no dot => aliased column
             $this->table = null;
             $this->column = $column;
         } else {
             $this->table = substr($column, 0, $dotPos);
             $this->column = substr($column, $dotPos + 1, strlen($column));
         }
     }
     $this->comparison = $comparison === null ? Criteria::EQUAL : $comparison;
     $this->clause = $clause;
     $this->init($outer);
 }
Esempio n. 2
0
 /**
  * Add a pre-created column to this table. It will replace any
  * existing column.
  *
  * @param ColumnMap $cmap A ColumnMap.
  *
  * @return ColumnMap The added column map.
  */
 public function addConfiguredColumn($cmap)
 {
     $this->columns[$cmap->getName()] = $cmap;
     return $cmap;
 }
Esempio n. 3
0
 protected function getColumnNameAndOptions(ColumnMap $column)
 {
     $name = strtolower($column->getName());
     $relation = $column->getRelation();
     $options = array('label' => $relation ? $relation->getName() : ucfirst(str_replace("_", " ", $name)), 'id' => 'table-' . str_replace('_', '-', $column->getTableName()) . '-column-' . str_replace("_", "-", $name) . rand());
     return array($name, $options);
 }
Esempio n. 4
0
 protected function getColumnName(\ColumnMap $column)
 {
     return strtolower($column->getName());
 }
Esempio n. 5
0
 /**
  * Gets value for row table
  * 
  * Swaps foreign creator_node_id values for their unique FQDN value. Note that the other
  * part(s) to a primary or foreign key is set by the creator and is the same in all nodes,
  * so may be hashed without causing difference problems between nodes.
  * 
  * @todo Better node table detection required (should use known prefix)
  * @todo Fix column name hardwiring
  * 
  * @param MeshingBaseObject $object
  * @param ColumnMap $columnMap
  * @return mixed 
  */
 protected function getRowValue(MeshingBaseObject $object, ColumnMap $columnMap)
 {
     // Get value for this column
     $columnName = $columnMap->getName();
     $value = $object->getByName($columnName, BasePeer::TYPE_RAW_COLNAME);
     // If the related table name ends with '_known_node' then we assume this is a
     // FK to a creator node ID.
     if ($columnMap->isForeignKey()) {
         $match = '_known_node';
         $isNodeTable = $match == substr($columnMap->getRelatedTableName(), -strlen($match));
         if ($isNodeTable && $columnMap->getRelatedColumnName() == 'ID') {
             $nodePeerName = $columnMap->getRelation()->getForeignTable()->getPeerClassname();
             $node = call_user_func(array($nodePeerName, 'retrieveByPK'), $value, $this->con);
             // If there is no related node, we really do have problems!
             if (!$node) {
                 $primaryKey = $object->getPrimaryKey();
                 if (is_array($primaryKey)) {
                     $primaryKey = '{' . implode(',', $primaryKey) . '}';
                 }
                 $type = get_class($object);
                 throw new Exception("Row {$primaryKey} in table '{$type}' points to a non-existent node row");
             }
             $value = $node->getFqdn();
         }
     }
     return $value;
 }