Beispiel #1
0
 /**
  * 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);
 }
Beispiel #2
0
 /**
  * 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));
 }