Example #1
0
 public function getForeignKeys($table)
 {
     $result = $this->connection->query("\n\t\t\tSELECT\n\t\t\t\tco.conname::varchar AS name,\n\t\t\t\tal.attname::varchar AS column,\n\t\t\t\tnf.nspname || '.' || cf.relname::varchar AS ref_table,\n\t\t\t\taf.attname::varchar AS ref_column\n\t\t\tFROM\n\t\t\t\tpg_catalog.pg_constraint AS co\n\t\t\t\tJOIN pg_catalog.pg_class AS cl ON co.conrelid = cl.oid\n\t\t\t\tJOIN pg_catalog.pg_class AS cf ON co.confrelid = cf.oid\n\t\t\t\tJOIN pg_catalog.pg_namespace AS nf ON nf.oid = cf.relnamespace\n\t\t\t\tJOIN pg_catalog.pg_attribute AS al ON al.attrelid = cl.oid AND al.attnum = %raw\n\t\t\t\tJOIN pg_catalog.pg_attribute AS af ON af.attrelid = cf.oid AND af.attnum = %raw\n\t\t\tWHERE\n\t\t\t\tco.contype = 'f'\n\t\t\t\tAND cl.oid = %s::regclass\n\t\t\t\tAND nf.nspname = ANY (pg_catalog.current_schemas(FALSE))\n\t\t", 'co.conkey[1]', 'co.confkey[1]', $table);
     $keys = [];
     foreach ($result as $row) {
         $keys[$row->column] = $row->toArray();
     }
     return $keys;
 }
 public function remove(IEntity $parent, array $remove)
 {
     if (!$remove) {
         return;
     }
     $this->mapperOne->beginTransaction();
     $list = $this->buildList($parent, $remove);
     $this->connection->query('DELETE FROM %table WHERE %column[] IN %any', $this->joinTable, array_keys(reset($list)), array_map('array_values', $list));
 }
Example #3
0
    public function getForeignKeys($table)
    {
        $result = $this->connection->query('
			SELECT
				CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME
			FROM
				information_schema.KEY_COLUMN_USAGE
			WHERE
				TABLE_SCHEMA = DATABASE()
				AND REFERENCED_TABLE_NAME IS NOT NULL
				AND TABLE_NAME = %s
		', $table);
        $keys = [];
        foreach ($result as $row) {
            $keys[$row->COLUMN_NAME] = ['name' => $row->CONSTRAINT_NAME, 'column' => $row->COLUMN_NAME, 'ref_table' => $row->REFERENCED_TABLE_NAME, 'ref_column' => $row->REFERENCED_COLUMN_NAME];
        }
        return $keys;
    }
Example #4
0
 public function remove(IEntity $entity)
 {
     $this->beginTransaction();
     $primary = [];
     $id = (array) $entity->getPersistedId();
     foreach ($this->getStorageReflection()->getStoragePrimaryKey() as $key) {
         $primary[$key] = array_shift($id);
     }
     $this->connection->query('DELETE FROM %table WHERE %and', $this->getTableName(), $primary);
 }
Example #5
0
 /**
  * Imports & executes queries from sql file.
  * Code taken from Adminer (http://www.adminer.org) & modified,
  * @author   Jakub Vrána
  * @author   Jan Tvrdík
  * @author   Michael Moravec
  * @author   Jan Škrášek
  * @license  Apache License
  *
  * @param  Connection $connection
  * @param  string     $file path to imported file
  * @return int number of executed queries
  */
 public static function executeFile(Connection $connection, $file)
 {
     $query = @file_get_contents($file);
     if ($query === FALSE) {
         throw new IOException("Cannot open file '{$file}'.");
     }
     $delimiter = ';';
     $offset = $queries = 0;
     $space = "(?:\\s|/\\*.*\\*/|(?:#|-- )[^\\n]*\\n|--\\n)";
     $driver = $connection->getDriver();
     if ($driver instanceof MysqliDriver) {
         $parse = '[\'"[]|/\\*|-- |$';
     } elseif ($driver instanceof PgsqlDriver) {
         $parse = '[\'"]|/\\*|-- |$|\\$[^$]*\\$';
     } else {
         // general
         $parse = '[\'"`#]|/\\*|-- |$';
     }
     while ($query != '') {
         if (!$offset && preg_match("~^{$space}*DELIMITER\\s+(\\S+)~i", $query, $match)) {
             $delimiter = $match[1];
             $query = substr($query, strlen($match[0]));
         } else {
             preg_match('(' . preg_quote($delimiter) . "\\s*|{$parse})", $query, $match, PREG_OFFSET_CAPTURE, $offset);
             // should always match
             $found = $match[0][0];
             $offset = $match[0][1] + strlen($found);
             if (!$found && rtrim($query) === '') {
                 break;
             }
             if (!$found || rtrim($found) == $delimiter) {
                 // end of a query
                 $q = substr($query, 0, $match[0][1]);
                 $queries++;
                 $connection->query('%raw', $q);
                 $query = substr($query, $offset);
                 $offset = 0;
             } else {
                 // find matching quote or comment end
                 while (preg_match('(' . ($found == '/*' ? '\\*/' : ($found == '[' ? ']' : (preg_match('~^-- |^#~', $found) ? "\n" : preg_quote($found) . "|\\\\."))) . '|$)s', $query, $match, PREG_OFFSET_CAPTURE, $offset)) {
                     //! respect sql_mode NO_BACKSLASH_ESCAPES
                     $s = $match[0][0];
                     $offset = $match[0][1] + strlen($s);
                     if ($s[0] !== '\\') {
                         break;
                     }
                 }
             }
         }
     }
     return $queries;
 }
Example #6
0
 protected function processRemove(IEntity $entity, $primary)
 {
     $this->connection->query('DELETE FROM %table WHERE %and', $this->getTableName(), $primary);
 }
Example #7
0
 public function exec($sql)
 {
     $this->conn->query('%raw', $sql);
     return $this->conn->getAffectedRows();
 }