/** * Return request sql. * * @param \Zend\Db\Sql\SqlInterface $request * * @return string */ public function printSql(\Zend\Db\Sql\SqlInterface $request) { return $request->getSqlString($this->tableGateway->getAdapter()->getPlatform()); }
public function getQueryAsSqlString(SqlInterface $query) { return $query->getSqlString($this->getPlatform()); }
public function execute(\Zend\Db\Sql\SqlInterface $query) { /* recycle? */ if ($query instanceof Sql\Recycle) { /* get recycle target data */ if ($target = $query->getSqlString()) { /* init */ $count = $target->set->count(); $saved = 0; /* table, primary, flag field exists? */ if ($target->table && $target->primary && $target->flag) { /* any data to save? */ if ($count > 0) { /* select existing */ $select = $this->select()->from($target->table, array($target->primary, $target->flag))->where($target->where); if ($existing = $this->fetchAll($select)) { /* loop existing and update */ foreach ($existing as $row) { /* all new record saved? */ if ($saved >= $count) { /* flag remaining records to unused */ $update = $this->update()->table($target->table)->set(array($target->flag => $query::FLAG_UNUSED))->where(array($target->primary => $row[$target->primary])); $this->execute($update); } else { /* overwrite existing record with new data */ $update = $this->update()->table($target->table)->set(array_merge($target->set->item($saved)->pull(array_merge(array($target->primary, $target->flag), $target->exclude)), array($target->flag => $query::FLAG_USED)))->where(array($target->primary => $row[$target->primary])); if ($this->execute($update)) { /* assign new id to updated item */ $target->set->item($saved)->push(array($target->primary => $row[$target->primary])); } /* increment saved */ $saved++; } //all saved } //each existing } //fetch /* any remaining unsaved records? */ if ($saved < $count) { for ($index = $saved; $index < $count; $index++) { /* insert remaining record */ $insert = $this->insert()->into($target->table)->values(array_merge($target->set->item($index)->pull(array_merge(array($target->primary, $target->flag), $target->exclude)), array($target->flag => $query::FLAG_USED))); if ($id = $this->execute($insert)) { /* assign new id to set item */ $target->set->item($index)->push(array($target->primary => $id)); } } //each remaining record } //remaining? /* return! */ return $saved > 0; } else { /* flag related existing record to unused */ $update = $this->update()->table($target->table)->set(array($target->flag => $query::FLAG_UNUSED))->where($target->where); return $this->execute($update); } //any data to save } //target primary check } //get data /* default return false */ return false; /* store statement */ } elseif ($query instanceof Sql\Store) { /* get store data */ $target = $query->getSqlString(); $values = $target->values; /* get id if any */ $id = null; if (isset($values[$target->primary])) { $id = $values[$target->primary]; } /* have id? update */ if ($id) { /* unset id */ unset($values[$target->primary]); /* generate update statement */ $update = $this->update()->table($target->into)->set($values)->where(array($target->primary => $id)); /* execute update! */ if ($this->execute($update)) { return $id; } /* no id, insert */ } else { /* unset id if its an autoincrement */ if ($target->auto == true) { unset($values[$target->primary]); } /* generate insert */ $insert = $this->insert()->into($target->into)->values($values); /* execute insert */ return $this->execute($insert); } /* return false as default */ return false; /* other normal statement */ } else { /* prepare & execute */ $statement = $this->_sql->prepareStatementForSqlObject($query); $result = $statement->execute(); /* insert, return last generated value (auto increment) */ if ($result && $query instanceof Sql\Insert) { /* oci8? */ if ($this->_driver == self::DRIVER_OCI8) { /* has ai field? */ if (($field = $query->hasAutoincrement()) !== false) { if ($id = $query->{$field}) { return $id; } } } else { /* others - mysql */ if ($id = $this->_db->getDriver()->getLastGeneratedValue()) { return $id; } } } /* return result */ return $result; } //recycle or not }