public function set($key, $value = null, $types = [])
{
if (empty($this->_parts['set'])) {
$this->_parts['set'] = $this->newExpr()->tieWith(',');
}
if ($this->_parts['set']->isCallable($key)) {
$exp = $this->newExpr()->tieWith(',');
$this->_parts['set']->add($key($exp));
return $this;
}
if (is_array($key) || $key instanceof ExpressionInterface) {
$types = (array) $value;
$this->_parts['set']->add($key, $types);
return $this;
}
if (is_string($types) && is_string($key)) {
$types = [$key => $types];
}
$this->_parts['set']->eq($key, $value, $types);
return $this;
}