SQL Join table Alias

This commit is contained in:
Roman Hergenreder 2021-01-07 14:59:36 +01:00
parent 810f51bdcc
commit fae8a71bac
5 changed files with 61 additions and 9 deletions

@ -8,17 +8,20 @@ class Join {
private string $table; private string $table;
private string $columnA; private string $columnA;
private string $columnB; 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->type = $type;
$this->table = $table; $this->table = $table;
$this->columnA = $columnA; $this->columnA = $columnA;
$this->columnB = $columnB; $this->columnB = $columnB;
$this->tableAlias = $tableAlias;
} }
public function getType() { return $this->type; } public function getType() { return $this->type; }
public function getTable() { return $this->table; } public function getTable() { return $this->table; }
public function getColumnA() { return $this->columnA; } public function getColumnA() { return $this->columnA; }
public function getColumnB() { return $this->columnB; } public function getColumnB() { return $this->columnB; }
public function getTableAlias() { return $this->tableAlias; }
} }

@ -4,6 +4,7 @@ namespace Driver\SQL;
use \Api\Parameter\Parameter; use \Api\Parameter\Parameter;
use DateTime;
use \Driver\SQL\Column\Column; use \Driver\SQL\Column\Column;
use \Driver\SQL\Column\IntColumn; use \Driver\SQL\Column\IntColumn;
use \Driver\SQL\Column\SerialColumn; use \Driver\SQL\Column\SerialColumn;
@ -91,15 +92,21 @@ class MySQL extends SQL {
$sqlParams[0] .= 'd'; $sqlParams[0] .= 'd';
break; break;
case Parameter::TYPE_DATE: case Parameter::TYPE_DATE:
$value = $value->format('Y-m-d'); if ($value instanceof DateTime) {
$value = $value->format('Y-m-d');
}
$sqlParams[0] .= 's'; $sqlParams[0] .= 's';
break; break;
case Parameter::TYPE_TIME: case Parameter::TYPE_TIME:
$value = $value->format('H:i:s'); if ($value instanceof DateTime) {
$value = $value->format('H:i:s');
}
$sqlParams[0] .= 's'; $sqlParams[0] .= 's';
break; break;
case Parameter::TYPE_DATE_TIME: 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'; $sqlParams[0] .= 's';
break; break;
case Parameter::TYPE_ARRAY: case Parameter::TYPE_ARRAY:

@ -0,0 +1,29 @@
<?php
namespace Driver\SQL\Query;
use Driver\SQL\SQL;
class Drop extends Query {
private string $table;
/**
* Drop constructor.
* @param SQL $sql
* @param string $table
*/
public function __construct(\Driver\SQL\SQL $sql, string $table) {
parent::__construct($sql);
$this->table = $table;
}
public function execute() {
$this->sql->executeDrop($this);
}
public function getTable() {
return $this->table;
}
}

@ -40,13 +40,13 @@ class Select extends Query {
return $this; return $this;
} }
public function innerJoin($table, $columnA, $columnB) { public function innerJoin($table, $columnA, $columnB, $tableAlias=null) {
$this->joins[] = new Join("INNER", $table, $columnA, $columnB); $this->joins[] = new Join("INNER", $table, $columnA, $columnB, $tableAlias);
return $this; return $this;
} }
public function leftJoin($table, $columnA, $columnB) { public function leftJoin($table, $columnA, $columnB, $tableAlias=null) {
$this->joins[] = new Join("LEFT", $table, $columnA, $columnB); $this->joins[] = new Join("LEFT", $table, $columnA, $columnB, $tableAlias);
return $this; return $this;
} }

@ -16,6 +16,7 @@ use \Driver\SQL\Constraint\PrimaryKey;
use \Driver\SQL\Constraint\ForeignKey; use \Driver\SQL\Constraint\ForeignKey;
use Driver\SQL\Query\CreateTable; use Driver\SQL\Query\CreateTable;
use Driver\SQL\Query\Delete; use Driver\SQL\Query\Delete;
use Driver\SQL\Query\Drop;
use Driver\SQL\Query\Insert; use Driver\SQL\Query\Insert;
use Driver\SQL\Query\Query; use Driver\SQL\Query\Query;
use Driver\SQL\Query\Select; use Driver\SQL\Query\Select;
@ -73,6 +74,10 @@ abstract class SQL {
return new Update($this, $table); return new Update($this, $table);
} }
public function drop(string $table) {
return new Drop($this, $table);
}
// #################### // ####################
// ### ABSTRACT METHODS // ### ABSTRACT METHODS
// #################### // ####################
@ -107,7 +112,9 @@ abstract class SQL {
$joinTable = $this->tableName($join->getTable()); $joinTable = $this->tableName($join->getTable());
$columnA = $this->columnName($join->getColumnA()); $columnA = $this->columnName($join->getColumnA());
$columnB = $this->columnName($join->getColumnB()); $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); 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) { protected function getWhereClause($conditions, &$params) {
if (!$conditions) { if (!$conditions) {
return ""; return "";