Exemplo n.º 1
0
 public function fillIndexesTables(&$schemas)
 {
     $this->em->clear();
     //Filling Indexes
     $sql = "SELECT c2.relname as name,\n                                c2.relname as oid,\n                                i.indisprimary as \"isPrimary\",\n                                i.indisunique as \"isUnique\",\n                                i.indisclustered as \"isClustered\",\n                                i.indisvalid as \"isValid\",\n                                pg_catalog.pg_get_indexdef(i.indexrelid, 0, true) as \"creationQuery\",\n                                pg_catalog.pg_get_constraintdef(con.oid, true) as \"constraintDef\",\n                                contype,\n                                condeferrable,\n                                condeferred,\n                                c2.reltablespace,\n                                c.oid as table,\n                                n.nspname as schema,\n                                c.relname as table_name\n                        FROM pg_catalog.pg_class c\n                            INNER JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n                            INNER JOIN pg_catalog.pg_index i ON c.oid = i.indrelid\n                            INNER JOIN pg_catalog.pg_class c2 ON i.indexrelid = c2.oid\n                            LEFT JOIN pg_catalog.pg_constraint con ON (conrelid = i.indrelid AND conindid = i.indexrelid AND contype IN ('p','u','x'))\n                    WHERE c.relkind = 'r'\n                        AND n.nspname <> 'pg_catalog'\n                   AND n.nspname <> 'information_schema'\n                   AND n.nspname !~ '^pg_toast'\n                   AND n.nspname !~ '^pg_temp'\n                   AND n.nspname <> 'londiste'\n                   AND n.nspname <> 'pgq'\n                        --AND pg_catalog.pg_table_is_visible(c.oid)\n                    ORDER BY i.indisprimary DESC,\n                        i.indisunique DESC,\n                        c2.relname";
     $rsm = new ResultSetMapping();
     $rsm->addScalarResult('oid', 'oid');
     $rsm->addScalarResult('name', 'name');
     $rsm->addScalarResult('isPrimary', 'isPrimary');
     $rsm->addScalarResult('isUnique', 'isUnique');
     $rsm->addScalarResult('isClustered', 'isClustered');
     $rsm->addScalarResult('isValid', 'isValid');
     $rsm->addScalarResult('creationQuery', 'creationQuery');
     $rsm->addScalarResult('constraintDef', 'constraintDef');
     $rsm->addScalarResult('contype', 'contype');
     $rsm->addScalarResult('condeferrable', 'condeferrable');
     $rsm->addScalarResult('condeferred', 'condeferred');
     $rsm->addScalarResult('reltablespace', 'reltablespace');
     $rsm->addScalarResult('schema', 'schema');
     $rsm->addScalarResult('table', 'table');
     $rsm->addScalarResult('table_name', 'table_name');
     $stmt = $this->em->createNativeQuery($sql, $rsm);
     $stmt->useResultCache(true, PgRetriever::CACHE_LIFETIME);
     foreach ($stmt->getResult(AbstractQuery::HYDRATE_ARRAY) as $row) {
         $index = new Index($row['schema'], $row['table']);
         foreach ($row as $key => $value) {
             if ($key == 'creationQuery') {
                 $data = explode('USING', $value);
                 if (count($data) == 2) {
                     $infos = explode(' ', trim($data[1]));
                     $type = $infos[0];
                     $columns = trim(substr($data[1], strlen($infos[0]) + 2));
                     $index->__set('type', $type);
                     $index->__set('columns', $columns);
                 } else {
                     $index->__set('type', $value);
                 }
             } else {
                 $index->__set($key, $value);
             }
         }
         if ($this->index_type == PgRetriever::INDEX_TYPE_OID) {
             $schemas[$row['schema']]->addTableIndex($row['table'], $index);
         } elseif ($this->index_type == PgRetriever::INDEX_TYPE_NAME) {
             $schemas[$row['schema']]->addTableIndex($row['table_name'], $index);
         }
         unset($index);
     }
     unset($stmt);
 }
Exemplo n.º 2
0
 /**
  * @param $schema
  * @param $tableOid
  * @return array
  */
 public function getIndexes($schema, $tableOid)
 {
     //Filling Indexes
     $sql = "SELECT c2.relname as name,\n                                c2.relname as oid,\n                                i.indisprimary as \"isPrimary\",\n                                i.indisunique as \"isUnique\",\n                                i.indisclustered as \"isClustered\",\n                                i.indisvalid as \"isValid\",\n                                pg_catalog.pg_get_indexdef(i.indexrelid, 0, true) as \"creationQuery\",\n                                pg_catalog.pg_get_constraintdef(con.oid, true) as \"constraintDef\",\n                                contype,\n                                condeferrable,\n                                condeferred,\n                                c2.reltablespace\n                        FROM pg_catalog.pg_class c\n                            INNER JOIN pg_catalog.pg_index i ON c.oid = i.indrelid\n                            INNER JOIN pg_catalog.pg_class c2 ON i.indexrelid = c2.oid\n                            LEFT JOIN pg_catalog.pg_constraint con ON (conrelid = i.indrelid AND conindid = i.indexrelid AND contype IN ('p','u','x'))\n                    WHERE c.oid = '" . pg_escape_string($tableOid) . "'\n                    ORDER BY i.indisprimary DESC,\n                        i.indisunique DESC,\n                        c2.relname";
     $rsm = new ResultSetMapping();
     $rsm->addScalarResult('oid', 'oid');
     $rsm->addScalarResult('name', 'name');
     $rsm->addScalarResult('isPrimary', 'isPrimary');
     $rsm->addScalarResult('isUnique', 'isUnique');
     $rsm->addScalarResult('isClustered', 'isClustered');
     $rsm->addScalarResult('isValid', 'isValid');
     $rsm->addScalarResult('creationQuery', 'creationQuery');
     $rsm->addScalarResult('constraintDef', 'constraintDef');
     $rsm->addScalarResult('contype', 'contype');
     $rsm->addScalarResult('condeferrable', 'condeferrable');
     $rsm->addScalarResult('condeferred', 'condeferred');
     $rsm->addScalarResult('reltablespace', 'reltablespace');
     $stmt = $this->em->createNativeQuery($sql, $rsm);
     $stmt->useResultCache(true, self::CACHE_LIFETIME);
     $indexes = [];
     foreach ($stmt->getResult(AbstractQuery::HYDRATE_ARRAY) as $row) {
         $index = new Index($schema, $tableOid);
         foreach ($row as $key => $value) {
             if ($key == 'creationQuery') {
                 $data = explode('USING', $value);
                 if (count($data) == 2) {
                     $infos = explode(' ', trim($data[1]));
                     $type = $infos[0];
                     $columns = trim(substr($data[1], strlen($infos[0]) + 2));
                     $index->__set('type', $type);
                     $index->__set('columns', $columns);
                 } else {
                     $index->__set('type', $value);
                 }
             } else {
                 $index->__set($key, $value);
             }
         }
         if ($this->index_type == self::INDEX_TYPE_OID) {
             $indexes[$row['oid']] = $index;
         } elseif ($this->index_type == self::INDEX_TYPE_NAME) {
             $indexes[$row['name']] = $index;
         }
     }
     return $indexes;
 }