A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://www.yiiframework.com/doc/api/2.0/yii-db-pgsql-schema below:

Schema, yii\db\pgsql\Schema | API Documentation for Yii 2.0

Collects the metadata of table columns.

                protected function findColumns($table)
{
    $tableName = $this->db->quoteValue($table->name);
    $schemaName = $this->db->quoteValue($table->schemaName);
    $orIdentity = '';
    if (version_compare($this->db->serverVersion, '12.0', '>=')) {
        $orIdentity = 'OR attidentity != \'\'';
    }
    $sql = <<<SQL
CT
d.nspname AS table_schema,
c.relname AS table_name,
a.attname AS column_name,
COALESCE(td.typname, tb.typname, t.typname) AS data_type,
COALESCE(td.typtype, tb.typtype, t.typtype) AS type_type,
(SELECT nspname FROM pg_namespace WHERE oid = COALESCE(td.typnamespace, tb.typnamespace, t.typnamespace)) AS type_scheme,
a.attlen AS character_maximum_length,
pg_catalog.col_description(c.oid, a.attnum) AS column_comment,
a.atttypmod AS modifier,
a.attnotnull = false AS is_nullable,
CAST(pg_get_expr(ad.adbin, ad.adrelid) AS varchar) AS column_default,
coalesce(pg_get_expr(ad.adbin, ad.adrelid) ~ 'nextval',false) {$orIdentity} AS is_autoinc,
pg_get_serial_sequence(quote_ident(d.nspname) || '.' || quote_ident(c.relname), a.attname) AS sequence_name,
CASE WHEN COALESCE(td.typtype, tb.typtype, t.typtype) = 'e'::char
    THEN array_to_string((SELECT array_agg(enumlabel) FROM pg_enum WHERE enumtypid = COALESCE(td.oid, tb.oid, a.atttypid))::varchar[], ',')
    ELSE NULL
END AS enum_values,
CASE atttypid
     WHEN 21  THEN 16
     WHEN 23  THEN 32
     WHEN 20  THEN 64
     WHEN 1700  THEN
          CASE WHEN atttypmod = -1
           THEN null
           ELSE ((atttypmod - 4) >> 16) & 65535
           END
     WHEN 700  THEN 24 
     WHEN 701  THEN 53 
     ELSE null
  END   AS numeric_precision,
  CASE
    WHEN atttypid IN (21, 23, 20) THEN 0
    WHEN atttypid IN (1700) THEN
    CASE
        WHEN atttypmod = -1 THEN null
        ELSE (atttypmod - 4) & 65535
    END
       ELSE null
  END AS numeric_scale,
CAST(
         information_schema._pg_char_max_length(information_schema._pg_truetypid(a, t), information_schema._pg_truetypmod(a, t))
         AS numeric
) AS size,
a.attnum = any (ct.conkey) as is_pkey,
COALESCE(NULLIF(a.attndims, 0), NULLIF(t.typndims, 0), (t.typcategory='A')::int) AS dimension

pg_class c
LEFT JOIN pg_attribute a ON a.attrelid = c.oid
LEFT JOIN pg_attrdef ad ON a.attrelid = ad.adrelid AND a.attnum = ad.adnum
LEFT JOIN pg_type t ON a.atttypid = t.oid
LEFT JOIN pg_type tb ON (a.attndims > 0 OR t.typcategory='A') AND t.typelem > 0 AND t.typelem = tb.oid OR t.typbasetype > 0 AND t.typbasetype = tb.oid
LEFT JOIN pg_type td ON t.typndims > 0 AND t.typbasetype > 0 AND tb.typelem = td.oid
LEFT JOIN pg_namespace d ON d.oid = c.relnamespace
LEFT JOIN pg_constraint ct ON ct.conrelid = c.oid AND ct.contype = 'p'
E
a.attnum > 0 AND t.typname != '' AND NOT a.attisdropped
AND c.relname = {$tableName}
AND d.nspname = {$schemaName}
R BY
a.attnum;

    $columns = $this->db->createCommand($sql)->queryAll();
    if (empty($columns)) {
        return false;
    }
    foreach ($columns as $column) {
        if ($this->db->slavePdo->getAttribute(\PDO::ATTR_CASE) === \PDO::CASE_UPPER) {
            $column = array_change_key_case($column, CASE_LOWER);
        }
        $column = $this->loadColumnSchema($column);
        $table->columns[$column->name] = $column;
        if ($column->isPrimaryKey) {
            $table->primaryKey[] = $column->name;
            if ($table->sequenceName === null) {
                $table->sequenceName = $column->sequenceName;
            }
            $column->defaultValue = null;
        } elseif ($column->defaultValue) {
            if (
                in_array($column->type, [self::TYPE_TIMESTAMP, self::TYPE_DATE, self::TYPE_TIME], true) &&
                in_array(
                    strtoupper($column->defaultValue),
                    ['NOW()', 'CURRENT_TIMESTAMP', 'CURRENT_DATE', 'CURRENT_TIME'],
                    true
                )
            ) {
                $column->defaultValue = new Expression($column->defaultValue);
            } elseif ($column->type === 'boolean') {
                $column->defaultValue = ($column->defaultValue === 'true');
            } elseif (preg_match("/^B'(.*?)'::/", $column->defaultValue, $matches)) {
                $column->defaultValue = bindec($matches[1]);
            } elseif (preg_match("/^'(\d+)'::\"bit\"$/", $column->defaultValue, $matches)) {
                $column->defaultValue = bindec($matches[1]);
            } elseif (preg_match("/^'(.*?)'::/", $column->defaultValue, $matches)) {
                $column->defaultValue = $column->phpTypecast($matches[1]);
            } elseif (preg_match('/^(\()?(.*?)(?(1)\))(?:::.+)?$/', $column->defaultValue, $matches)) {
                if ($matches[2] === 'NULL') {
                    $column->defaultValue = null;
                } else {
                    $column->defaultValue = $column->phpTypecast($matches[2]);
                }
            } else {
                $column->defaultValue = $column->phpTypecast($column->defaultValue);
            }
        }
    }
    return true;
}

            

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4