From fae8a71bac4e74d01d9dd497c603392d728eed74 Mon Sep 17 00:00:00 2001 From: Roman Hergenreder Date: Thu, 7 Jan 2021 14:59:36 +0100 Subject: [PATCH] SQL Join table Alias --- core/Driver/SQL/Join.class.php | 5 ++++- core/Driver/SQL/MySQL.class.php | 13 +++++++++--- core/Driver/SQL/Query/Drop.php | 29 ++++++++++++++++++++++++++ core/Driver/SQL/Query/Select.class.php | 8 +++---- core/Driver/SQL/SQL.class.php | 15 ++++++++++++- 5 files changed, 61 insertions(+), 9 deletions(-) create mode 100644 core/Driver/SQL/Query/Drop.php diff --git a/core/Driver/SQL/Join.class.php b/core/Driver/SQL/Join.class.php index ed62f9b..b45b550 100644 --- a/core/Driver/SQL/Join.class.php +++ b/core/Driver/SQL/Join.class.php @@ -8,17 +8,20 @@ class Join { private string $table; private string $columnA; private string $columnB; + private $tableAlias; - public function __construct($type, $table, $columnA, $columnB) { + public function __construct($type, $table, $columnA, $columnB, $tableAlias=null) { $this->type = $type; $this->table = $table; $this->columnA = $columnA; $this->columnB = $columnB; + $this->tableAlias = $tableAlias; } public function getType() { return $this->type; } public function getTable() { return $this->table; } public function getColumnA() { return $this->columnA; } public function getColumnB() { return $this->columnB; } + public function getTableAlias() { return $this->tableAlias; } } \ No newline at end of file diff --git a/core/Driver/SQL/MySQL.class.php b/core/Driver/SQL/MySQL.class.php index 7686ca1..3733bbf 100644 --- a/core/Driver/SQL/MySQL.class.php +++ b/core/Driver/SQL/MySQL.class.php @@ -4,6 +4,7 @@ namespace Driver\SQL; use \Api\Parameter\Parameter; +use DateTime; use \Driver\SQL\Column\Column; use \Driver\SQL\Column\IntColumn; use \Driver\SQL\Column\SerialColumn; @@ -91,15 +92,21 @@ class MySQL extends SQL { $sqlParams[0] .= 'd'; break; case Parameter::TYPE_DATE: - $value = $value->format('Y-m-d'); + if ($value instanceof DateTime) { + $value = $value->format('Y-m-d'); + } $sqlParams[0] .= 's'; break; case Parameter::TYPE_TIME: - $value = $value->format('H:i:s'); + if ($value instanceof DateTime) { + $value = $value->format('H:i:s'); + } $sqlParams[0] .= 's'; break; case Parameter::TYPE_DATE_TIME: - $value = $value->format('Y-m-d H:i:s'); + if ($value instanceof DateTime) { + $value = $value->format('Y-m-d H:i:s'); + } $sqlParams[0] .= 's'; break; case Parameter::TYPE_ARRAY: diff --git a/core/Driver/SQL/Query/Drop.php b/core/Driver/SQL/Query/Drop.php new file mode 100644 index 0000000..9938a57 --- /dev/null +++ b/core/Driver/SQL/Query/Drop.php @@ -0,0 +1,29 @@ +table = $table; + } + + public function execute() { + $this->sql->executeDrop($this); + } + + public function getTable() { + return $this->table; + } +} \ No newline at end of file diff --git a/core/Driver/SQL/Query/Select.class.php b/core/Driver/SQL/Query/Select.class.php index 52aee6d..aec1641 100644 --- a/core/Driver/SQL/Query/Select.class.php +++ b/core/Driver/SQL/Query/Select.class.php @@ -40,13 +40,13 @@ class Select extends Query { return $this; } - public function innerJoin($table, $columnA, $columnB) { - $this->joins[] = new Join("INNER", $table, $columnA, $columnB); + public function innerJoin($table, $columnA, $columnB, $tableAlias=null) { + $this->joins[] = new Join("INNER", $table, $columnA, $columnB, $tableAlias); return $this; } - public function leftJoin($table, $columnA, $columnB) { - $this->joins[] = new Join("LEFT", $table, $columnA, $columnB); + public function leftJoin($table, $columnA, $columnB, $tableAlias=null) { + $this->joins[] = new Join("LEFT", $table, $columnA, $columnB, $tableAlias); return $this; } diff --git a/core/Driver/SQL/SQL.class.php b/core/Driver/SQL/SQL.class.php index 4317b69..ef92568 100644 --- a/core/Driver/SQL/SQL.class.php +++ b/core/Driver/SQL/SQL.class.php @@ -16,6 +16,7 @@ use \Driver\SQL\Constraint\PrimaryKey; use \Driver\SQL\Constraint\ForeignKey; use Driver\SQL\Query\CreateTable; use Driver\SQL\Query\Delete; +use Driver\SQL\Query\Drop; use Driver\SQL\Query\Insert; use Driver\SQL\Query\Query; use Driver\SQL\Query\Select; @@ -73,6 +74,10 @@ abstract class SQL { return new Update($this, $table); } + public function drop(string $table) { + return new Drop($this, $table); + } + // #################### // ### ABSTRACT METHODS // #################### @@ -107,7 +112,9 @@ abstract class SQL { $joinTable = $this->tableName($join->getTable()); $columnA = $this->columnName($join->getColumnA()); $columnB = $this->columnName($join->getColumnB()); - $joinStr .= " $type JOIN $joinTable ON $columnA=$columnB"; + $tableAlias = ($join->getTableAlias() ? " " . $join->getTableAlias() : ""); + + $joinStr .= " $type JOIN $joinTable$tableAlias ON $columnA=$columnB"; } } @@ -248,6 +255,12 @@ abstract class SQL { return $this->execute($query, $params); } + public function executeDrop(Drop $drop) { + $query = "DROP TABLE " . $this->tableName($drop->getTable()); + if ($drop->dump) { var_dump($query); } + return $this->execute($query); + } + protected function getWhereClause($conditions, &$params) { if (!$conditions) { return "";