Go to the documentation of this file.00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00016 final class OrderBy extends FieldTable implements MappableObject
00017 {
00018 private $direction = null;
00019 private $nulls = null;
00020
00024 public static function create($field)
00025 {
00026 return new self($field);
00027 }
00028
00029 public function __construct($field)
00030 {
00031 parent::__construct($field);
00032
00033 $this->direction = new Ternary(null);
00034 $this->nulls = new Ternary(null);
00035 }
00036
00037 public function __clone()
00038 {
00039 $this->direction = clone $this->direction;
00040 $this->nulls = clone $this->nulls;
00041 }
00042
00046 public function setDirection($direction)
00047 {
00048 $this->direction->setValue($direction);
00049 return $this;
00050 }
00051
00055 public function desc()
00056 {
00057 $this->direction->setFalse();
00058 return $this;
00059 }
00060
00064 public function asc()
00065 {
00066 $this->direction->setTrue();
00067 return $this;
00068 }
00069
00070 public function isAsc()
00071 {
00072 return $this->direction->decide(true, false, true);
00073 }
00074
00078 public function nullsFirst()
00079 {
00080 $this->nulls->setTrue();
00081 return $this;
00082 }
00083
00087 public function nullsLast()
00088 {
00089 $this->nulls->setFalse();
00090 return $this;
00091 }
00092
00093 public function isNullsFirst()
00094 {
00095 return $this->nulls->decide(true, false, true);
00096 }
00097
00101 public function setNullsFirst($nullsFirst)
00102 {
00103 $this->nulls->setValue($nullsFirst);
00104 return $this;
00105 }
00106
00110 public function invert()
00111 {
00112 return
00113 $this->isAsc()
00114 ? $this->desc()
00115 : $this->asc();
00116 }
00117
00121 public function toMapped(ProtoDAO $dao, JoinCapableQuery $query)
00122 {
00123 $order = self::create($dao->guessAtom($this->field, $query));
00124
00125 if (!$this->nulls->isNull())
00126 $order->setNullsFirst($this->nulls->getValue());
00127
00128 if (!$this->direction->isNull())
00129 $order->setDirection($this->direction->getValue());
00130
00131 return $order;
00132 }
00133
00134 public function toDialectString(Dialect $dialect)
00135 {
00136 if (
00137 $this->field instanceof SelectQuery
00138 || $this->field instanceof LogicalObject
00139 )
00140 $result = '('.$dialect->fieldToString($this->field).')';
00141 else
00142 $result = parent::toDialectString($dialect);
00143
00144 $result .=
00145 $this->direction->decide(' ASC', ' DESC')
00146 .$this->nulls->decide(' NULLS FIRST', ' NULLS LAST');
00147
00148 return $result;
00149 }
00150
00151 public function getFieldName()
00152 {
00153 if ($this->field instanceof DBField)
00154 return $this->field->getField();
00155 else
00156 return $this->field;
00157 }
00158 }
00159 ?>