public function testResetSequence() { $model = new Article(); $table = $this->Dbo->fullTableName($model, false); $fields = array('id', 'user_id', 'title', 'body', 'published'); $values = array(array(1, 1, 'test', 'first post', false), array(2, 1, 'test 2', 'second post post', false)); $this->Dbo->insertMulti($table, $fields, $values); $sequence = $this->Dbo->getSequence($table); $result = $this->Dbo->rawQuery("SELECT nextval('{$sequence}')"); $original = $result->fetch(PDO::FETCH_ASSOC); $this->assertTrue($this->Dbo->resetSequence($table, 'id')); $result = $this->Dbo->rawQuery("SELECT currval('{$sequence}')"); $new = $result->fetch(PDO::FETCH_ASSOC); $this->assertTrue($new['currval'] > $original['nextval'], 'Sequence did not update'); }
/** * Run before each tests is executed, should return a set of SQL statements to insert records for the table * of this fixture could be executed successfully. * * @param DboSource $db An instance of the database into which the records will be inserted * @return boolean on success or if there are no records to insert, or false on failure */ public function insert($db) { if (!isset($this->_insert)) { $values = array(); if (isset($this->records) && !empty($this->records)) { $fields = array(); foreach ($this->records as $record) { $fields = array_merge($fields, array_keys(array_intersect_key($record, $this->fields))); } $fields = array_unique($fields); $default = array_fill_keys($fields, null); foreach ($this->records as $record) { $fields = array_keys($record); $values[] = array_values(array_merge($default, $record)); } $nested = $db->useNestedTransactions; $db->useNestedTransactions = false; $result = $db->insertMulti($this->table, $fields, $values); if ($this->primaryKey && in_array($this->fields[$this->primaryKey]['type'], array('integer', 'biginteger'))) { $db->resetSequence($this->table, $this->primaryKey); } $db->useNestedTransactions = $nested; return $result; } return true; } }
/** * Run before each tests is executed, should return a set of SQL statements to insert records for the table * of this fixture could be executed successfully. * * @param DboSource $db An instance of the database into which the records will be inserted * @return bool on success or if there are no records to insert, or false on failure * @throws CakeException if counts of values and fields do not match. */ public function insert($db) { if (!isset($this->_insert)) { $values = array(); if (isset($this->records) && !empty($this->records)) { $fields = array(); foreach ($this->records as $record) { $fields = array_merge($fields, array_keys(array_intersect_key($record, $this->fields))); } $fields = array_unique($fields); $default = array_fill_keys($fields, null); foreach ($this->records as $record) { $merge = array_values(array_merge($default, $record)); if (count($fields) !== count($merge)) { throw new CakeException('Fixture invalid: Count of fields does not match count of values in ' . get_class($this)); } $values[] = $merge; } $nested = $db->useNestedTransactions; $db->useNestedTransactions = false; $result = $db->insertMulti($this->table, $fields, $values); if ($this->primaryKey && isset($this->fields[$this->primaryKey]['type']) && in_array($this->fields[$this->primaryKey]['type'], array('integer', 'biginteger'))) { $db->resetSequence($this->table, $this->primaryKey); } $db->useNestedTransactions = $nested; return $result; } return true; } }
/** * Run before each tests is executed, should return a set of SQL statements to insert records for the table * of this fixture could be executed successfully. * * @param DboSource $db An instance of the database into which the records will be inserted * * @return bool on success or if there are no records to insert, or false on failure * @throws CakeException if counts of values and fields do not match. */ public function insert($db) { if (!isset($this->_insert)) { $values = array(); if (isset($this->records) && !empty($this->records)) { $fields = array(); foreach ($this->records as $record) { $fields = array_merge($fields, array_keys(array_intersect_key($record, $this->fields))); } $fields = array_unique($fields); $default = array_fill_keys($fields, NULL); foreach ($this->records as $record) { $mergeData = array_merge($default, $record); $merge = array_values($mergeData); if (count($fields) !== count($merge)) { $mergeFields = array_diff_key(array_keys($mergeData), $fields); $message = 'Fixture invalid: Count of fields does not match count of values in ' . get_class($this) . "\n"; foreach ($mergeFields as $field) { $message .= "The field '" . $field . "' is in the data fixture but not in the schema." . "\n"; } throw new CakeException($message); } $values[] = $merge; } $nested = $db->useNestedTransactions; $db->useNestedTransactions = FALSE; $result = $db->insertMulti($this->table, $fields, $values); if ($this->primaryKey && isset($this->fields[$this->primaryKey]['type']) && in_array($this->fields[$this->primaryKey]['type'], array('integer', 'biginteger'))) { $db->resetSequence($this->table, $this->primaryKey); } $db->useNestedTransactions = $nested; return $result; } return TRUE; } }