/** * adds sequence name formatting to a sequence name * * @param string name of the sequence * * @return string formatted sequence name * * @access public */ function getSequenceName($sqn) { if (false === $this->options['disable_smart_seqname']) { if (strpos($sqn, '_') !== false) { list($table, $field) = explode('_', $sqn, 2); } $schema_list = $this->queryOne("SELECT array_to_string(current_schemas(false), ',')"); if (PEAR::isError($schema_list) || empty($schema_list) || count($schema_list) < 2) { $order_by = ' a.attnum'; $schema_clause = ' AND n.nspname=current_schema()'; } else { $schemas = explode(',', $schema_list); $schema_clause = ' AND n.nspname IN (' . $schema_list . ')'; $counter = 1; $order_by = ' CASE '; foreach ($schemas as $schema) { $order_by .= ' WHEN n.nspname=' . $schema . ' THEN ' . $counter++; } $order_by .= ' ELSE ' . $counter . ' END, a.attnum'; } $query = "SELECT substring((SELECT substring(pg_get_expr(d.adbin, d.adrelid) for 128)\r\n \t FROM pg_attrdef d\r\n \t WHERE d.adrelid = a.attrelid\r\n \t AND d.adnum = a.attnum\r\n \t AND a.atthasdef\r\n \t ) FROM 'nextval[^'']*''([^'']*)')\r\n FROM pg_attribute a\r\n LEFT JOIN pg_class c ON c.oid = a.attrelid\r\n LEFT JOIN pg_attrdef d ON d.adrelid = a.attrelid AND d.adnum = a.attnum AND a.atthasdef\r\n LEFT JOIN pg_namespace n ON c.relnamespace = n.oid\r\n WHERE (c.relname = " . $this->quote($sqn, 'text'); if (!empty($field)) { $query .= " OR (c.relname = " . $this->quote($table, 'text') . " AND a.attname = " . $this->quote($field, 'text') . ")"; } $query .= " )" . $schema_clause . "\r\n AND NOT a.attisdropped\r\n AND a.attnum > 0\r\n AND pg_get_expr(d.adbin, d.adrelid) LIKE 'nextval%'\r\n ORDER BY " . $order_by; $seqname = $this->queryOne($query); if (!PEAR::isError($seqname) && !empty($seqname) && is_string($seqname)) { return $seqname; } } return parent::getSequenceName($sqn); }
/** * adds sequence name formatting to a sequence name * * @param string $sqn name of the sequence * @return string formatted sequence name * @access public */ function getSequenceName($sqn) { return strtoupper(parent::getSequenceName($sqn)); }