namespace pq\Gateway;
-use \pq\Query\Expr;
+use \pq\Query\Expressible;
-class Cell
+class Cell extends Expressible
{
/**
* @var \pq\Gateway\Row
protected $name;
/**
- * @var mixed
+ * @var bool
*/
- protected $data;
+ protected $dirty;
/**
* @param \pq\Gateway\Row $row
* @param string $name
* @param mixed $data
+ * @param bool $dirty
*/
- function __construct(Row $row, $name, $data) {
+ function __construct(Row $row, $name, $data, $dirty = false) {
+ parent::__construct($data);
$this->row = $row;
$this->name = $name;
- $this->data = $data;
+ $this->dirty = $dirty;
}
/**
- * Get value as string
- * @return string
- */
- function __toString() {
- return (string) $this->data;
- }
-
- /**
- * Test whether the value is an unevaluated expression
+ * Check whether the cell has been modified
* @return bool
*/
- function isExpr() {
- return $this->data instanceof Expr;
+ function isDirty() {
+ return $this->dirty;
}
/**
- * Get value
- * @return mixed
- */
- function get() {
- return $this->data;
- }
-
- /**
- * Modify the value in this cell
+ * Set the value
* @param mixed $data
- * @param string $op a specific operator
* @return \pq\Gateway\Cell
*/
- function mod($data, $op = null) {
- if (!($this->data instanceof Expr)) {
- if (!isset($this->data)) {
- $this->data = new Expr($this->name);
- } elseif (is_numeric($this->data)) {
- $this->data = new Expr($this->data);
- } else {
- $this->data = new Expr("%s", $this->row->getTable()->getConnection()->quote($this->data));
- }
+ function set($data) {
+ if ($data instanceof Row) {
+ $this->row->__set($data->getTable()->getName() . "_id", $data->id);
+ $this->row->__unset($this->name);
+ return $this;
}
-
- if ($data instanceof Expr) {
- $this->data->add($data);
- } elseif (!isset($op) && is_numeric($data)) {
- $this->data->add(new Expr("+ $data"));
- } else {
- $data = $this->row->getTable()->getConnection()->quote($data);
- $this->data->add(new Expr("%s %s"), isset($op) ? $op : "||", $data);
+ if ($data instanceof Cell) {
+ $data = $data->get();
}
+ parent::set($data);
+ $this->dirty = true;
return $this;
}
/**
- * Set the value in this cell
+ * Modify the value in this cell
* @param mixed $data
+ * @param string $op a specific operator
* @return \pq\Gateway\Cell
*/
- function set($data) {
- $this->data = $data;
+ function mod($data, $op = null) {
+ parent::mod($data, $op);
+ $this->dirty = true;
return $this;
}
+
}