resetSequence() public method

This method should be implemented by datasources that require sequences to be used.
public resetSequence ( string $table, string $column ) : boolean | void
$table string The name of the table to update.
$column string The column to use when resetting the sequence value.
return boolean | void success.
 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;
     }
 }
Example #4
0
 /**
  * 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;
     }
 }