public function add(Identifiable $object) { return $this->inject(OSQL::insert(), $object->setId(DBPool::getByDao($this)->obtainSequence($this->getSequence()))); }
protected function doInject(InsertOrUpdateQuery $query, Identifiable $object) { $db = DBPool::getByDao($this); if (!$db->isQueueActive()) { $preUncacher = is_scalar($object->getId()) ? $this->getUncacherById($object->getId()) : null; $count = $db->queryCount($query); $uncacher = $this->getUncacherById($object->getId()); if ($preUncacher) { $uncacher->merge($uncacher); } $uncacher->uncache(); if ($count !== 1) { throw new WrongStateException($count . ' rows affected: racy or insane inject happened: ' . $query->toDialectString($db->getDialect())); } } else { $preUncacher = is_scalar($object->getId()) ? $this->getUncacherById($object->getId()) : null; $db->queryNull($query); $uncacher = $this->getUncacherById($object->getId()); if ($preUncacher) { $uncacher->merge($uncacher); } $uncacher->uncache(); } // clean out Identifier, if any return $this->addObjectToMap($object->setId($object->getId())); }