Go to the documentation of this file.00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00016 final class Joiner implements DialectString
00017 {
00018 private $from = array();
00019 private $tables = array();
00020
00024 public function from(FromTable $from)
00025 {
00026 $this->from[] = $from;
00027
00028 return $this;
00029 }
00030
00031 public function hasJoinedTable($table)
00032 {
00033 return isset($this->tables[$table]);
00034 }
00035
00036 public function getTablesCount()
00037 {
00038 return count($this->from);
00039 }
00040
00044 public function join(SQLJoin $join)
00045 {
00046 $this->from[] = $join;
00047 $this->tables[$join->getTable()] = true;
00048
00049 return $this;
00050 }
00051
00055 public function leftJoin(SQLLeftJoin $join)
00056 {
00057 $this->from[] = $join;
00058 $this->tables[$join->getTable()] = true;
00059
00060 return $this;
00061 }
00062
00066 public function rightJoin(SQLRightJoin $join)
00067 {
00068 $this->from[] = $join;
00069 $this->tables[$join->getTable()] = true;
00070
00071 return $this;
00072 }
00073
00074 public function getFirstTable()
00075 {
00076 if ($this->from)
00077 return $this->from[0]->getTable();
00078
00079 return null;
00080 }
00081
00082 public function getLastTable()
00083 {
00084 if ($this->from)
00085 return $this->from[count($this->from) - 1]->getTable();
00086
00087 return null;
00088 }
00089
00090 public function toDialectString(Dialect $dialect)
00091 {
00092 $fromString = null;
00093
00094 for ($i = 0, $size = count($this->from); $i < $size; ++$i) {
00095 if ($i == 0)
00096 $separator = null;
00097 elseif (
00098 $this->from[$i] instanceof FromTable &&
00099 !$this->from[$i]->getTable() instanceof SelectQuery
00100 )
00101 $separator = ', ';
00102 else
00103 $separator = ' ';
00104
00105 $fromString .=
00106 $separator
00107 .$this->from[$i]->toDialectString($dialect);
00108 }
00109
00110 if ($fromString)
00111 return ' FROM '.$fromString;
00112
00113 return null;
00114 }
00115 }
00116 ?>