/** * Set all sequence's current value to the lowest available field value. * * @return bool */ public function sequences() { $this->out(sprintf('%s - %s', date('H:i:s'), 'Set all sequence\'s current values')); $success = $this->connection->begin() !== false; $schema = Hash::get($this->connection->config(), 'schema') ?: 'public'; $conditions = ["table_schema = '{$schema}'"]; foreach ($this->connection->driver()->sequences($conditions) as $sequence) { $sequence['sequence'] = preg_replace('/^nextval\\(\'(.*)\'.*\\)$/', '\\1', $sequence['sequence']); $sql = "SELECT setval('{$sequence['sequence']}', COALESCE(MAX({$sequence['column']}),0)+1, false) FROM {$sequence['table']};"; $success = $success && $this->connection->query($sql)->fetchAll('assoc') !== false; } if ($success) { $success = $this->connection->commit() !== false && $success; } else { $success = $this->connection->rollback() !== false && $success; } if ($this->command === __FUNCTION__) { $this->_stop($success ? self::SUCCESS : self::ERROR); } return $success; }