cvs: pear /DB_DataObject DataObject.php package.xml /DB_DataObject/tests simple.phpt
| From: | Alan Knowles | Date: | Thu, 22 Jan 2004 02:45:34 +0000 |
| Subject: | cvs: pear /DB_DataObject DataObject.php package.xml /DB_DataObject/tests simple.phpt | ||
| Groups: | php.pear.cvs | ||
| Request: | Send a blank email to pear-cvs+get-15862@lists.php.net to get a copy of this message | ||
alan_k Wed Jan 21 21:45:34 2004 EDT
Modified files:
/pear/DB_DataObject DataObject.php package.xml
/pear/DB_DataObject/tests simple.phpt
Log:
allow option sequence_{tablename}={column}:{sequence_name} to work...
http://cvs.php.net/diff.php/pear/DB_DataObject/DataObject.php?r1=1.197&r2=1.198&ty=u Index: pear/DB_DataObject/DataObject.php diff -u pear/DB_DataObject/DataObject.php:1.197 pear/DB_DataObject/DataObject.php:1.198 --- pear/DB_DataObject/DataObject.php:1.197 Wed Jan 21 20:55:31 2004 +++ pear/DB_DataObject/DataObject.php Wed Jan 21 21:45:33 2004 @@ -20,7 +20,7 @@ * @package DB_DataObject * @category DB * - * $Id: DataObject.php,v 1.197 2004/01/22 01:55:31 alan_k Exp $ + * $Id: DataObject.php,v 1.198 2004/01/22 02:45:33 alan_k Exp $ */ /* ===================================================================================== @@ -805,7 +805,7 @@ $leftq = ''; $rightq = ''; - list($key,$useNative) = $this->sequenceKey(); + @list($key,$useNative,$seq) = $this->sequenceKey(); $dbtype = $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]->dsn["phptype"]; @@ -814,10 +814,14 @@ // big check for using sequences if (($key !== false) && !$useNative) { - if (!($seq = @$options['sequence_'. $this->__table])) { - $seq = $this->__table; + if (!$seq) { + $this->$key = $DB->nextId($this->__table); + } else { + $f = $DB->getOption('seqname_format'); + $DB->setOption('seqname_format','%s'); + $this->$key = $DB->nextId($seq); + $DB->setOption('seqname_format',$f); } - $this->$key = $DB->nextId($seq); } @@ -912,8 +916,8 @@ break; case 'pgsql': - if (!($seq = @$options['sequence_'. $this->__table])) { - $seq = $this->__table . '_seq'; + if (!$seq) { + $seq = $DB->getSequenceName($this->__table ); } $pgsql_key = $DB->getOne("SELECT last_value FROM ".$seq); if (PEAR::isError($pgsql_key)) { @@ -1583,9 +1587,10 @@ * override this to return array(false,false) if table has no real sequence key. * * @param string optional the key sequence/autoinc. key - * @param boolean optional use native increment. default false + * @param boolean optional use native increment. default false + * @param false|string optional native sequence name * @access private - * @return array (column,use_native) + * @return array (column,use_native,sequence_name) */ function sequenceKey() { @@ -1595,6 +1600,7 @@ $args = func_get_args(); if (count($args)) { $args[1] = isset($args[1]) ? $args[1] : false; + $args[2] = isset($args[2]) ? $args[2] : false; $this->_databaseSequenceKeys = $args; } if (isset($this->_databaseSequenceKeys )) { @@ -1603,7 +1609,7 @@ $keys = $this->keys(); if (!$keys) { - return array(false,false);; + return array(false,false,false);; } $table = $this->table(); $dbtype = $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]->dsn['phptype']; @@ -1612,27 +1618,31 @@ + $seqname = false; if (@$_DB_DATAOBJECT['CONFIG']['sequence_'.$this->__table]) { $usekey = $_DB_DATAOBJECT['CONFIG']['sequence_'.$this->__table]; + if (strpos($usekey,':') !== false) { + list($usekey,$seqname) = explode(':',$usekey); + } } // if the key is not an integer - then it's not a sequence or native if (!($table[$usekey] & DB_DATAOBJECT_INT)) { - return array(false,false); + return array(false,false,false); } if (@$_DB_DATAOBJECT['CONFIG']['ignore_sequence_keys']) { $ignore = $_DB_DATAOBJECT['CONFIG']['ignore_sequence_keys']; if (is_string($ignore) && (strtoupper($ignore) == 'ALL')) { - return array(false,false); + return array(false,false,$seqname); } if (is_string($ignore)) { $ignore = $_DB_DATAOBJECT['CONFIG']['ignore_sequence_keys'] = explode(',',$ignore); } if (in_array($this->__table,$ignore)) { - return array(false,false); + return array(false,false,$seqname); } } @@ -1651,7 +1661,7 @@ // multiple unique primary keys without a native sequence... if (($realkeys[$usekey] == 'K') && (count($keys) > 1)) { - return array(false,false); + return array(false,false,$seqname); } // use native sequence keys... // technically postgres native here... @@ -1661,11 +1671,11 @@ ($table[$usekey] & DB_DATAOBJECT_INT) && (@$realkeys[$usekey] == 'N') ) { - return array($usekey,true); + return array($usekey,true,$seqname); } // I assume it's going to try and be a nextval DB sequence.. (not native) - return array($usekey,false); + return array($usekey,false,$seqname); } @@ -3066,12 +3076,15 @@ return; } $class = isset($this) ? get_class($this) : __CLASS__; + if (!is_string($message)) { + $message = print_r($message,true); + } if (!ini_get('html_errors')) { echo "$class : $logtype : $message\n"; flush(); return; } - if (is_array($message)) { + if (!is_string($message)) { $message = print_r($message,true); } echo "<code><B>$class: $logtype:</B> $message</code><BR>\n"; http://cvs.php.net/diff.php/pear/DB_DataObject/package.xml?r1=1.73&r2=1.74&ty=u Index: pear/DB_DataObject/package.xml diff -u pear/DB_DataObject/package.xml:1.73 pear/DB_DataObject/package.xml:1.74 --- pear/DB_DataObject/package.xml:1.73 Tue Jan 20 03:27:13 2004 +++ pear/DB_DataObject/package.xml Wed Jan 21 21:45:33 2004 @@ -85,7 +85,7 @@ <dep type="php" rel="ge" version="4.1"/> <dep type="pkg" rel="ge" version="1.3">DB</dep> <dep type="pkg" rel="ge" version="0.1.1" optional="yes">Validate</dep> - <dep type="pkg" rel="ge" version="0.1.1" optional="yes">Date</dep> + <dep type="pkg" rel="ge" version="0.1.1">Date</dep> </deps> <changelog> http://cvs.php.net/diff.php/pear/DB_DataObject/tests/simple.phpt?r1=1.18&r2=1.19&ty=u Index: pear/DB_DataObject/tests/simple.phpt diff -u pear/DB_DataObject/tests/simple.phpt:1.18 pear/DB_DataObject/tests/simple.phpt:1.19 --- pear/DB_DataObject/tests/simple.phpt:1.18 Wed Jan 21 20:55:32 2004 +++ pear/DB_DataObject/tests/simple.phpt Wed Jan 21 21:45:34 2004 @@ -260,11 +260,61 @@ + $this->postgresTest(); + } + + + function postgresTest() { + + $options = &PEAR::getStaticProperty('DB_DataObject','options'); + //$options['schema_location'] = dirname(__FILE__); + $options['database'] = 'pgsql://@localhost/test'; + $options['debug_force_updates'] = TRUE; + $options['proxy'] = 'full'; + $options['class_prefix'] = 'MyProject_DataObject_'; + $options['sequence_seqtest'] = 'id:response_response_id_seq'; + + + $x = new DB_DataObject; + $x->query("DROP SEQUENCE response_response_id_seq"); + $x->query("DROP TABLE seqtest"); + + + $r = $x->query("CREATE SEQUENCE response_response_id_seq INCREMENT 1 START 1"); + $r = $x->query(" + CREATE TABLE seqtest ( + id INT NOT NULL UNIQUE default nextval( 'response_response_id_seq' ), + xxx varchar(32) + )"); + + + $x = DB_DataObject::factory('seqtest'); + $x->xxx = "Fred"; + var_dump($x->insert()); // will return id (based on response_response_id_seq) + $x = DB_DataObject::factory('seqtest'); + $x->xxx = "Blogs"; + $options['ignore_sequence_keys'] = 'ALL'; + var_dump($x->insert()); // will not return anything!!!! + + unset($options['ignore_sequence_keys']); + unset($options['sequence_seqtest']); + $x = DB_DataObject::factory('seqtest'); + + $x->xxx = "Jones"; + + $x->sequenceKey('id',true,'response_response_id_seq'); + $options['ignore_sequence_keys'] = 'ALL'; + var_dump($x->insert()); + } + + + + function createRecordWithName($name) { $t = new test; $t->name = $name;
http://cvs.php.net/diff.php/pear/DB_DataObject/DataObject.php?r1=1.197&r2=1.198&ty=u Index: pear/DB_DataObject/DataObject.php diff -u pear/DB_DataObject/DataObject.php:1.197 pear/DB_DataObject/DataObject.php:1.198 --- pear/DB_DataObject/DataObject.php:1.197 Wed Jan 21 20:55:31 2004 +++ pear/DB_DataObject/DataObject.php Wed Jan 21 21:45:33 2004 @@ -20,7 +20,7 @@ * @package DB_DataObject * @category DB * - * $Id: DataObject.php,v 1.197 2004/01/22 01:55:31 alan_k Exp $ + * $Id: DataObject.php,v 1.198 2004/01/22 02:45:33 alan_k Exp $ */ /* ===================================================================================== @@ -805,7 +805,7 @@ $leftq = ''; $rightq = ''; - list($key,$useNative) = $this->sequenceKey(); + @list($key,$useNative,$seq) = $this->sequenceKey(); $dbtype = $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]->dsn["phptype"]; @@ -814,10 +814,14 @@ // big check for using sequences if (($key !== false) && !$useNative) { - if (!($seq = @$options['sequence_'. $this->__table])) { - $seq = $this->__table; + if (!$seq) { + $this->$key = $DB->nextId($this->__table); + } else { + $f = $DB->getOption('seqname_format'); + $DB->setOption('seqname_format','%s'); + $this->$key = $DB->nextId($seq); + $DB->setOption('seqname_format',$f); } - $this->$key = $DB->nextId($seq); } @@ -912,8 +916,8 @@ break; case 'pgsql': - if (!($seq = @$options['sequence_'. $this->__table])) { - $seq = $this->__table . '_seq'; + if (!$seq) { + $seq = $DB->getSequenceName($this->__table ); } $pgsql_key = $DB->getOne("SELECT last_value FROM ".$seq); if (PEAR::isError($pgsql_key)) { @@ -1583,9 +1587,10 @@ * override this to return array(false,false) if table has no real sequence key. * * @param string optional the key sequence/autoinc. key - * @param boolean optional use native increment. default false + * @param boolean optional use native increment. default false + * @param false|string optional native sequence name * @access private - * @return array (column,use_native) + * @return array (column,use_native,sequence_name) */ function sequenceKey() { @@ -1595,6 +1600,7 @@ $args = func_get_args(); if (count($args)) { $args[1] = isset($args[1]) ? $args[1] : false; + $args[2] = isset($args[2]) ? $args[2] : false; $this->_databaseSequenceKeys = $args; } if (isset($this->_databaseSequenceKeys )) { @@ -1603,7 +1609,7 @@ $keys = $this->keys(); if (!$keys) { - return array(false,false);; + return array(false,false,false);; } $table = $this->table(); $dbtype = $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]->dsn['phptype']; @@ -1612,27 +1618,31 @@ + $seqname = false; if (@$_DB_DATAOBJECT['CONFIG']['sequence_'.$this->__table]) { $usekey = $_DB_DATAOBJECT['CONFIG']['sequence_'.$this->__table]; + if (strpos($usekey,':') !== false) { + list($usekey,$seqname) = explode(':',$usekey); + } } // if the key is not an integer - then it's not a sequence or native if (!($table[$usekey] & DB_DATAOBJECT_INT)) { - return array(false,false); + return array(false,false,false); } if (@$_DB_DATAOBJECT['CONFIG']['ignore_sequence_keys']) { $ignore = $_DB_DATAOBJECT['CONFIG']['ignore_sequence_keys']; if (is_string($ignore) && (strtoupper($ignore) == 'ALL')) { - return array(false,false); + return array(false,false,$seqname); } if (is_string($ignore)) { $ignore = $_DB_DATAOBJECT['CONFIG']['ignore_sequence_keys'] = explode(',',$ignore); } if (in_array($this->__table,$ignore)) { - return array(false,false); + return array(false,false,$seqname); } } @@ -1651,7 +1661,7 @@ // multiple unique primary keys without a native sequence... if (($realkeys[$usekey] == 'K') && (count($keys) > 1)) { - return array(false,false); + return array(false,false,$seqname); } // use native sequence keys... // technically postgres native here... @@ -1661,11 +1671,11 @@ ($table[$usekey] & DB_DATAOBJECT_INT) && (@$realkeys[$usekey] == 'N') ) { - return array($usekey,true); + return array($usekey,true,$seqname); } // I assume it's going to try and be a nextval DB sequence.. (not native) - return array($usekey,false); + return array($usekey,false,$seqname); } @@ -3066,12 +3076,15 @@ return; } $class = isset($this) ? get_class($this) : __CLASS__; + if (!is_string($message)) { + $message = print_r($message,true); + } if (!ini_get('html_errors')) { echo "$class : $logtype : $message\n"; flush(); return; } - if (is_array($message)) { + if (!is_string($message)) { $message = print_r($message,true); } echo "<code><B>$class: $logtype:</B> $message</code><BR>\n"; http://cvs.php.net/diff.php/pear/DB_DataObject/package.xml?r1=1.73&r2=1.74&ty=u Index: pear/DB_DataObject/package.xml diff -u pear/DB_DataObject/package.xml:1.73 pear/DB_DataObject/package.xml:1.74 --- pear/DB_DataObject/package.xml:1.73 Tue Jan 20 03:27:13 2004 +++ pear/DB_DataObject/package.xml Wed Jan 21 21:45:33 2004 @@ -85,7 +85,7 @@ <dep type="php" rel="ge" version="4.1"/> <dep type="pkg" rel="ge" version="1.3">DB</dep> <dep type="pkg" rel="ge" version="0.1.1" optional="yes">Validate</dep> - <dep type="pkg" rel="ge" version="0.1.1" optional="yes">Date</dep> + <dep type="pkg" rel="ge" version="0.1.1">Date</dep> </deps> <changelog> http://cvs.php.net/diff.php/pear/DB_DataObject/tests/simple.phpt?r1=1.18&r2=1.19&ty=u Index: pear/DB_DataObject/tests/simple.phpt diff -u pear/DB_DataObject/tests/simple.phpt:1.18 pear/DB_DataObject/tests/simple.phpt:1.19 --- pear/DB_DataObject/tests/simple.phpt:1.18 Wed Jan 21 20:55:32 2004 +++ pear/DB_DataObject/tests/simple.phpt Wed Jan 21 21:45:34 2004 @@ -260,11 +260,61 @@ + $this->postgresTest(); + } + + + function postgresTest() { + + $options = &PEAR::getStaticProperty('DB_DataObject','options'); + //$options['schema_location'] = dirname(__FILE__); + $options['database'] = 'pgsql://@localhost/test'; + $options['debug_force_updates'] = TRUE; + $options['proxy'] = 'full'; + $options['class_prefix'] = 'MyProject_DataObject_'; + $options['sequence_seqtest'] = 'id:response_response_id_seq'; + + + $x = new DB_DataObject; + $x->query("DROP SEQUENCE response_response_id_seq"); + $x->query("DROP TABLE seqtest"); + + + $r = $x->query("CREATE SEQUENCE response_response_id_seq INCREMENT 1 START 1"); + $r = $x->query(" + CREATE TABLE seqtest ( + id INT NOT NULL UNIQUE default nextval( 'response_response_id_seq' ), + xxx varchar(32) + )"); + + + $x = DB_DataObject::factory('seqtest'); + $x->xxx = "Fred"; + var_dump($x->insert()); // will return id (based on response_response_id_seq) + $x = DB_DataObject::factory('seqtest'); + $x->xxx = "Blogs"; + $options['ignore_sequence_keys'] = 'ALL'; + var_dump($x->insert()); // will not return anything!!!! + + unset($options['ignore_sequence_keys']); + unset($options['sequence_seqtest']); + $x = DB_DataObject::factory('seqtest'); + + $x->xxx = "Jones"; + + $x->sequenceKey('id',true,'response_response_id_seq'); + $options['ignore_sequence_keys'] = 'ALL'; + var_dump($x->insert()); + } + + + + function createRecordWithName($name) { $t = new test; $t->name = $name;