Viewing file: PostgresBuilder.php (6.19 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Illuminate\Database\Schema;
use Illuminate\Database\Concerns\ParsesSearchPath;
class PostgresBuilder extends Builder { use ParsesSearchPath { parseSearchPath as baseParseSearchPath; }
/** * Create a database in the schema. * * @param string $name * @return bool */ public function createDatabase($name) { return $this->connection->statement( $this->grammar->compileCreateDatabase($name, $this->connection) ); }
/** * Drop a database from the schema if the database exists. * * @param string $name * @return bool */ public function dropDatabaseIfExists($name) { return $this->connection->statement( $this->grammar->compileDropDatabaseIfExists($name) ); }
/** * Determine if the given table exists. * * @param string $table * @return bool */ public function hasTable($table) { [$database, $schema, $table] = $this->parseSchemaAndTable($table);
$table = $this->connection->getTablePrefix().$table;
return count($this->connection->select( $this->grammar->compileTableExists(), [$database, $schema, $table] )) > 0; }
/** * Drop all tables from the database. * * @return void */ public function dropAllTables() { $tables = [];
$excludedTables = $this->grammar->escapeNames( $this->connection->getConfig('dont_drop') ?? ['spatial_ref_sys'] );
foreach ($this->getAllTables() as $row) { $row = (array) $row;
if (empty(array_intersect($this->grammar->escapeNames($row), $excludedTables))) { $tables[] = $row['qualifiedname'] ?? reset($row); } }
if (empty($tables)) { return; }
$this->connection->statement( $this->grammar->compileDropAllTables($tables) ); }
/** * Drop all views from the database. * * @return void */ public function dropAllViews() { $views = [];
foreach ($this->getAllViews() as $row) { $row = (array) $row;
$views[] = $row['qualifiedname'] ?? reset($row); }
if (empty($views)) { return; }
$this->connection->statement( $this->grammar->compileDropAllViews($views) ); }
/** * Drop all types from the database. * * @return void */ public function dropAllTypes() { $types = [];
foreach ($this->getAllTypes() as $row) { $row = (array) $row;
$types[] = reset($row); }
if (empty($types)) { return; }
$this->connection->statement( $this->grammar->compileDropAllTypes($types) ); }
/** * Get all of the table names for the database. * * @return array */ public function getAllTables() { return $this->connection->select( $this->grammar->compileGetAllTables( $this->parseSearchPath( $this->connection->getConfig('search_path') ?: $this->connection->getConfig('schema') ) ) ); }
/** * Get all of the view names for the database. * * @return array */ public function getAllViews() { return $this->connection->select( $this->grammar->compileGetAllViews( $this->parseSearchPath( $this->connection->getConfig('search_path') ?: $this->connection->getConfig('schema') ) ) ); }
/** * Get all of the type names for the database. * * @return array */ public function getAllTypes() { return $this->connection->select( $this->grammar->compileGetAllTypes() ); }
/** * Get the column listing for a given table. * * @param string $table * @return array */ public function getColumnListing($table) { [$database, $schema, $table] = $this->parseSchemaAndTable($table);
$table = $this->connection->getTablePrefix().$table;
$results = $this->connection->select( $this->grammar->compileColumnListing(), [$database, $schema, $table] );
return $this->connection->getPostProcessor()->processColumnListing($results); }
/** * Parse the database object reference and extract the database, schema, and table. * * @param string $reference * @return array */ protected function parseSchemaAndTable($reference) { $searchPath = $this->parseSearchPath( $this->connection->getConfig('search_path') ?: $this->connection->getConfig('schema') ?: 'public' );
$parts = explode('.', $reference);
$database = $this->connection->getConfig('database');
// If the reference contains a database name, we will use that instead of the // default database name for the connection. This allows the database name // to be specified in the query instead of at the full connection level. if (count($parts) === 3) { $database = $parts[0]; array_shift($parts); }
// We will use the default schema unless the schema has been specified in the // query. If the schema has been specified in the query then we can use it // instead of a default schema configured in the connection search path. $schema = $searchPath[0];
if (count($parts) === 2) { $schema = $parts[0]; array_shift($parts); }
return [$database, $schema, $parts[0]]; }
/** * Parse the "search_path" configuration value into an array. * * @param string|array|null $searchPath * @return array */ protected function parseSearchPath($searchPath) { return array_map(function ($schema) { return $schema === '$user' ? $this->connection->getConfig('username') : $schema; }, $this->baseParseSearchPath($searchPath)); } }
|