From 5d7372378966bbac6ddd89e6298acbc15e40984d Mon Sep 17 00:00:00 2001 From: codisart Date: Tue, 15 Oct 2019 01:31:24 +0200 Subject: [PATCH] Add sql query builder --- src/QueryBuilder/Column.php | 25 ++++++++++++++++++++ src/QueryBuilder/From.php | 20 ++++++++++++++++ src/QueryBuilder/Join.php | 26 +++++++++++++++++++++ src/QueryBuilder/Query.php | 39 ++++++++++++++++++++++++++++++++ src/QueryBuilder/Select.php | 19 ++++++++++++++++ src/QueryBuilder/Where.php | 13 +++++++++++ src/QueryBuilder/WhereEquals.php | 22 ++++++++++++++++++ tests/QueryBuilder/QueryTest.php | 37 ++++++++++++++++++++++++++++++ 8 files changed, 201 insertions(+) create mode 100644 src/QueryBuilder/Column.php create mode 100644 src/QueryBuilder/From.php create mode 100644 src/QueryBuilder/Join.php create mode 100644 src/QueryBuilder/Query.php create mode 100644 src/QueryBuilder/Select.php create mode 100644 src/QueryBuilder/Where.php create mode 100644 src/QueryBuilder/WhereEquals.php create mode 100644 tests/QueryBuilder/QueryTest.php diff --git a/src/QueryBuilder/Column.php b/src/QueryBuilder/Column.php new file mode 100644 index 0000000..e7e80bb --- /dev/null +++ b/src/QueryBuilder/Column.php @@ -0,0 +1,25 @@ +expression = $expression; + $this->alias = $alias; + } + + public function __toString() + { + if ($this->alias) { + return Query::INDENT . $this->expression . ' AS ' . $this->alias; + } + return Query::INDENT . $this->expression; + } +} \ No newline at end of file diff --git a/src/QueryBuilder/From.php b/src/QueryBuilder/From.php new file mode 100644 index 0000000..5ca2bd5 --- /dev/null +++ b/src/QueryBuilder/From.php @@ -0,0 +1,20 @@ +expression = $expression; + } + + public function __toString() + { + return "FROM " . $this->expression . PHP_EOL; + } +} \ No newline at end of file diff --git a/src/QueryBuilder/Join.php b/src/QueryBuilder/Join.php new file mode 100644 index 0000000..36110f7 --- /dev/null +++ b/src/QueryBuilder/Join.php @@ -0,0 +1,26 @@ +table = $table; + } + + private function conditions() { + return " ON order.customer_id = customer.id"; + } + + public function __toString() + { + return Query::INDENT . "JOIN " . $this->table . $this->conditions(); + } +} \ No newline at end of file diff --git a/src/QueryBuilder/Query.php b/src/QueryBuilder/Query.php new file mode 100644 index 0000000..af14521 --- /dev/null +++ b/src/QueryBuilder/Query.php @@ -0,0 +1,39 @@ +select = $select; + $this->from = $from; + $this->where = $where; + } + + public function __toString() + { + $parts = [ + $this->select, + $this->from(), + $this->where, + Query::FINAL_POINT, + ]; + + return implode("\n", $parts); + } + + private function from() + { + return $this->from . (new Join('customer')); + } +} + diff --git a/src/QueryBuilder/Select.php b/src/QueryBuilder/Select.php new file mode 100644 index 0000000..448597b --- /dev/null +++ b/src/QueryBuilder/Select.php @@ -0,0 +1,19 @@ +columns = $columns; + } + + public function __toString() + { + $select = implode(",\n", $this->columns); + return PHP_EOL . "SELECT" . PHP_EOL . $select; + } +} \ No newline at end of file diff --git a/src/QueryBuilder/Where.php b/src/QueryBuilder/Where.php new file mode 100644 index 0000000..e0e716b --- /dev/null +++ b/src/QueryBuilder/Where.php @@ -0,0 +1,13 @@ +one = $one; + $this->two = $two; + } + + public function __toString() + { + return $this->one . ' = ' . $this->two; + } +} diff --git a/tests/QueryBuilder/QueryTest.php b/tests/QueryBuilder/QueryTest.php new file mode 100644 index 0000000..914c4a8 --- /dev/null +++ b/tests/QueryBuilder/QueryTest.php @@ -0,0 +1,37 @@ +