* CREATE TABLE test * ( id integer unsigned not null auto_increment, PRIMARY KEY (id )); * * * For none auto_increment databases: * * CREATE TABLE test ( id integer unsigned not null, PRIMARY KEY (id )); * CREATE SEQUENCE test_seq START 1; * * * This class reads the parameters: * - sequence - The name of the database sequence keeping track of the ID. This field should be ommited for databases * supporting auto_increment. * * @package PersistentObject * @access private */ class ezcPersistentSequenceGenerator extends ezcPersistentIdentifierGenerator { /** * This method does not do anything. * * @param ezcPersistentObjectDefinition $def * @param ezcDbHandler $db * @param ezcQueryInsert $q * @return void */ public function preSave( ezcPersistentObjectDefinition $def, ezcDbHandler $db, ezcQueryInsert $q ) { if ( ( $db->getName() == 'pgsql' || $db->getName() == 'oracle' ) && array_key_exists( 'sequence', $def->idProperty->generator->params ) ) { $seq = $def->idProperty->generator->params['sequence']; $q->set( $def->idProperty->columnName, "nextval('{$seq}')" ); } } /** * Returns the integer value of the generated identifier for the new object. * * Called right after execution of the insert query. * * @param ezcPersistentObjectDefinition $def * @param ezcDbHandler $db * @return int */ public function postSave( ezcPersistentObjectDefinition $def, ezcDbHandler $db ) { $id = null; if ( array_key_exists( 'sequence', $def->idProperty->generator->params ) && $def->idProperty->generator->params['sequence'] !== null ) { $id = (int)$db->lastInsertId( $def->idProperty->generator->params['sequence'] ); } else { $id = (int)$db->lastInsertId(); } // check that the value was in fact successfully received. if ( $db->errorCode() != 0 ) { return null; } return $id; } } ?>