| Server IP : / Your IP : 10.244.4.16 [ Web Server : nginx/1.25.3 System : Linux escuela-portal-app-54f56585bc-kst6g 5.15.0-1084-azure #93-Ubuntu SMP Sat Mar 15 14:12:29 UTC 2025 x86_64 User : root ( 0) PHP Version : 8.2.13 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals, Domains : 0 Domains MySQL : OFF | cURL : ON | WGET : OFF | Perl : ON | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /proc/789/cwd/app/vendor/laravel/framework/src/Illuminate/Database/Schema/ |
Upload File : |
<?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->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));
}
}