Blame | Letzte Änderung | Log anzeigen | RSS feed
<?phpnamespace 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->selectFromWriteConnection($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->selectFromWriteConnection($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));}}