RES: [PEAR-DEV] DataObjects insert() for pgsql

From: Date: Tue, 07 Oct 2003 15:09:11 +0000
Subject: RES: [PEAR-DEV] DataObjects insert() for pgsql
Groups: php.pear.dev 
Request: Send a blank email to pear-dev+get-22452@lists.php.net to get a copy of this message
The sql bellow returns the sequence name of a collumn! But the sequence name must be parsed! If you want the next value, you must use $__DB->nextId($sequence_name). SELECT adef.adsrc as sequence FROM pg_catalog.pg_attribute a LEFT JOIN pg_catalog.pg_attrdef adef ON a.attrelid=adef.adrelid AND a.attnum=adef.adnum WHERE a.atthasdef = 't' AND a.attname = '%s' AND a.attrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='%s' AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname = '%s')) AND a.attnum > 0 AND NOT a.attisdropped -----Mensagem original----- De: Alan Knowles [mailto:alan@akbkhome.com] Enviada em: terça-feira, 7 de outubro de 2003 05:15 Para: Rezende Rodrigo Cc: pear-dev@lists.php.net; Matsushita Wagner Assunto: Re: [PEAR-DEV] DataObjects insert() for pgsql I presume this uses a table defined like. create table xxx ( id int default next_val(some_seqence),......); could you try attaching as a .txt file, so it doesnt get messed up.. and just try and explain how exploding a tablename, would give you a schema/tablename.. ? If this goes in.. - I would prefer something like: define(DB_DATAOBJECT_PGSQL_NEXTVAL_QUERY," SELECT a.attname as attname, adef.adsrc as sequence FROM pg_catalog.pg_attribute a LEFT JOIN pg_catalog.pg_attrdef adef ON a.attrelid=adef.adrelid AND a.attnum=adef.adnum WHERE a.atthasdef = 't' AND a.attname = '%s' AND a.attrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='%s' AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname = '%s')) AND a.attnum > 0 AND NOT a.attisdropped "); then use $__DB->getRow(sprintf(DB_DATAOBJECT_PGSQL_NEXTVAL_QUERY,$tablename.....); rather than flood the method with too much data.. Regards Alan > { > if (!($seq = @$options['sequence_'. $this->__table])) { > > $dummy = explode('.',$this->__table); > $schema_name = $dummy[0]; > $table_name = $dummy[1]; > > $sql_seq = " > SELECT > a.attname as attname, adef.adsrc as sequence > FROM > pg_catalog.pg_attribute a LEFT JOIN > pg_catalog.pg_attrdef adef > ON a.attrelid=adef.adrelid > AND a.attnum=adef.adnum > WHERE > a.atthasdef = 't' AND > a.attname = '$key' AND > a.attrelid = (SELECT oid FROM pg_catalog.pg_class > WHERE relname='$table_name' > AND relnamespace = (SELECT oid FROM > pg_catalog.pg_namespace WHERE > nspname = '$schema_name')) > AND a.attnum > 0 AND NOT a.attisdropped > ; > "; > $r = $__DB->getRow($sql_seq,DB_FETCHMODE_ASSOC); > $attrname_seq = $r['attname']; > $sequence_name = explode('\'',$r['sequence']); > $sequence_name = > (isset($sequence_name[1]))?$sequence_name[1]:''; > $seq = $sequence_name; > } > $this->$key = $__DB->nextId($seq); > } > > foreach($items as $k => $v) { > if (!isset($this->$k) || $this->$k == '' || $this->$k === > 'null') { > continue; > } > > if ($leftq) { > $leftq .= ', '; > $rightq .= ', '; > } > $leftq .= "$k "; > > if (strtolower($this->$k) === 'null') { > $rightq .= " NULL "; > continue; > } > if ($v & DB_DATAOBJECT_STR) { > $rightq .= $__DB->quote($this->$k) . " "; > continue; > } > > > if (is_numeric($this->$k)) { > $rightq .=" {$this->$k} "; > continue; > } > // at present we only cast to integers > // - V2 may store additional data about float/int > $rightq .= ' ' . intval($this->$k) . ' '; > > } > if ($leftq) { > $r = $this->_query("INSERT INTO {$this->__table} ($leftq) VALUES > ($rightq) "); > if (PEAR::isError($r)) { > DB_DataObject::raiseError($r); > return false; > } > if ($r < 1) { > DB_DataObject::raiseError('No Data Affected By > insert',DB_DATAOBJECT_ERROR_NOAFFECTEDROWS); > return false; > } > > if ($key && > ($items[$key] & DB_DATAOBJECT_INT) && > ($dbtype == 'mysql') && > (@$options['ignore_sequence_keys'] != 'ALL') && > ( > !@$options['ignore_sequence_keys'] || > (is_array(@$options['ignore_sequence_keys']) && > > in_array($this->__table,@$options['ignore_sequence_keys'])) > ) > ) > { > $this->$key = > mysql_insert_id($_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]->co > nnection); > } > > $this->_clear_cache(); > if ($key) { > return $this->$key; > } > return true; > } > DB_DataObject::raiseError("insert: No Data specifed for query", > DB_DATAOBJECT_ERROR_NODATA); > return false; > } > -- Can you help out? Need Consulting Services or Know of a Job? http://www.akbkhome.com -- PEAR Development Mailing List (http://pear.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php

« previous php.pear.dev (#22452) next »