Skip to content

Commit

Permalink
[FEATURE] Prequel now uses it's own database instance with the config…
Browse files Browse the repository at this point in the history
… defined in config/prequel.php
  • Loading branch information
QuintenJustus committed Jul 9, 2019
1 parent b5ff88d commit f1ab336
Show file tree
Hide file tree
Showing 5 changed files with 84 additions and 23 deletions.
2 changes: 1 addition & 1 deletion public/app.js

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions resources/assets/js/components/Header/Header.vue
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
<h1 v-if="activeTable">
<span v-if="!tableLoading" id="header-table-message">
<font-awesome-icon class="fa" icon="table"/>
{{activeTable}} <small>({{ numberOfPages }} records)</small>
{{ activeTable }} <small>({{ numberOfRecords }} records)</small>
</span>
<img v-else width="20" height="20" :src="$root.prequel.asset.loader" alt="Loading table data...">
</h1>
Expand Down Expand Up @@ -108,7 +108,7 @@
'tableLoading',
'tableStructure',
'searchColumn',
'numberOfPages',
'numberOfRecords',
],
data() {
Expand Down
50 changes: 50 additions & 0 deletions src/Classes/Database/DatabaseConnector.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?php

namespace Protoqol\Prequel\Classes\Database;

use Illuminate\Database\Connection;
use PDO;

/**
* Class DatabaseConnector
*
* @package Protoqol\Prequel\Classes\Database
*/
class DatabaseConnector
{

public $connection;

/**
* @return \Illuminate\Database\Connection
*/
public function getConnection()
{
$this->connection = (new Connection($this->getPdo()));
return $this->connection;
}

/**
* @return \PDO
*/
private function getPdo()
{
$dsn = $this->constructDsn();
$user = config('prequel.DB.USERNAME');
$pass = config('prequel.DB.PASSWORD');

return new PDO($dsn, $user, $pass);
}

/**
* @return string
*/
private function constructDsn()
{
$connection = config('prequel.DB.CONNECTION');
$databaseName = config('prequel.DB.DATABASE');
$host = config('prequel.DB.HOST');

return $connection.':dbname='.$databaseName.';host='.$host;
}
}
50 changes: 30 additions & 20 deletions src/Classes/Database/DatabaseTraverser.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

namespace Protoqol\Prequel\Classes\Database;

use Protoqol\Prequel\Classes\Database\DatabaseConnector;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
Expand All @@ -27,21 +28,28 @@ class DatabaseTraverser
/**
* Query collection based on $DB_CONN
*
* @var $databaseQueries
* @var \Protoqol\Prequel\Classes\Database\SequelAdapter $databaseQueries
*/
private $databaseQueries;

/**
* Holds custom database connection.
*
* @var \Illuminate\Database\Connection $connection
*/
private $connection;

/**
* DatabaseTraverser constructor.
*
* @param string|null $databaseType Type of database see $_databaseConn
* @param string|null $databaseType
*/
public function __construct(?string $databaseType = null)
{
$this->databaseConn = $databaseType
?: config('database.default');

$this->databaseConn = $databaseType
?: config('prequel.DB.CONNECTION');
$this->databaseQueries = new SequelAdapter($this->databaseConn);
$this->connection = (new DatabaseConnector())->getConnection();
}

/**
Expand All @@ -57,14 +65,12 @@ public function getAll() :array
$flatTableCollection = [];

foreach ($this->getAllDatabases() as $value) {
$databaseName = (object) $value['name'];
$databaseName = (object)$value['name'];

if (array_key_exists($databaseName->official,
config('prequel.ignored'))
) {
config('prequel.ignored'))) {
if (config('prequel.ignored.'.$databaseName->official)[0]
=== '*'
) {
=== '*') {
continue;
}
}
Expand All @@ -80,11 +86,14 @@ public function getAll() :array
) {
$tablesToIgnore = config('prequel.ignored.'
.$databaseName->official) ?? [];
if (!array_search($table['name']['official'],
$tablesToIgnore)
) {

if (!array_search(
$table['name']['official'],
$tablesToIgnore
)) {
$tableName = $databaseName->official.'.'
.$table['name']['official'];

array_push($flatTableCollection, $tableName);
} else {
unset($collection[$databaseName->pretty]['tables'][$key]);
Expand Down Expand Up @@ -154,7 +163,8 @@ public function getColumnData(
'COLUMN_COMMENT',
];

$result = (DB::table("information_schema.COLUMNS")
$result = ($this->connection
->table("information_schema.COLUMNS")
->select($select)
->where([
['TABLE_SCHEMA', '=', $database],
Expand All @@ -163,7 +173,7 @@ public function getColumnData(
])
->get())->toArray();

return Arr::flatten((array) $result);
return Arr::flatten((array)$result);
}

/**
Expand All @@ -176,7 +186,7 @@ public function getColumnData(
*/
public function getTableStructure(string $database, string $table) :array
{
$columns = DB::select("SHOW COLUMNS FROM `$database`.`$table`");
$columns = $this->connection->select("SHOW COLUMNS FROM `$database`.`$table`");
return $columns;
}

Expand All @@ -190,7 +200,7 @@ public function getTableStructure(string $database, string $table) :array
*/
public function getTablesFromDB(string $database) :array
{
$tables = DB::select($this->databaseQueries->showTablesFrom($database));
$tables = $this->connection->select($this->databaseQueries->showTablesFrom($database));
return $this->normalise($tables);
}

Expand All @@ -202,7 +212,7 @@ public function getTablesFromDB(string $database) :array
*/
public function getAllTables() :array
{
$tables = DB::select($this->databaseQueries->showTables());
$tables = $this->connection->select($this->databaseQueries->showTables());
return $this->normalise($tables);
}

Expand All @@ -214,7 +224,7 @@ public function getAllTables() :array
*/
public function getAllDatabases() :array
{
$databases = DB::select($this->databaseQueries->showDatabases());
$databases = $this->connection->select($this->databaseQueries->showDatabases());
return $this->normalise($databases);
}

Expand All @@ -238,7 +248,7 @@ public function normalise(array $arr)

for ($iterator = 0; $iterator < count($arr); $iterator++) {
foreach ($arr[$iterator] as $value) {
$arrayValue = ((array) $value)[0];
$arrayValue = ((array)$value)[0];

$normalised[$iterator]['name'] = [
"official" => $arrayValue,
Expand Down
1 change: 1 addition & 0 deletions src/Http/Controllers/PrequelController.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
namespace Protoqol\Prequel\Http\Controllers;

use Illuminate\Routing\Controller;
use Protoqol\Prequel\Classes\Database\DatabaseConnector;
use Protoqol\Prequel\Classes\Database\DatabaseTraverser;

/**
Expand Down

0 comments on commit f1ab336

Please sign in to comment.