Go to the documentation of this file.00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00015 abstract class BaseDaoWorker implements BaseDAO
00016 {
00017 const SUFFIX_LIST = '_list_';
00018 const SUFFIX_INDEX = '_lists_index_';
00019 const SUFFIX_QUERY = '_query_';
00020 const SUFFIX_RESULT = '_result_';
00021
00022 protected $dao = null;
00023
00024 protected $className = null;
00025
00026 protected $watermark = null;
00027
00028 public function __construct(GenericDAO $dao)
00029 {
00030 $this->dao = $dao;
00031
00032 $this->className = $dao->getObjectName();
00033
00034 if (($cache = Cache::me()) instanceof WatermarkedPeer)
00035 $this->watermark =
00036 $cache->mark($this->className)->getActualWatermark();
00037 }
00038
00042 public function setDao(GenericDAO $dao)
00043 {
00044 $this->dao = $dao;
00045
00046 return $this;
00047 }
00048
00050
00051 public function drop(Identifiable $object)
00052 {
00053 return $this->dropById($object->getId());
00054 }
00055
00056 public function dropById($id)
00057 {
00058 $result =
00059 DBPool::getByDao($this->dao)->queryCount(
00060 OSQL::delete()->from($this->dao->getTable())->
00061 where(Expression::eq($this->dao->getIdName(), $id))
00062 );
00063
00064 $this->dao->uncacheById($id);
00065
00066 return $result;
00067 }
00068
00069 public function dropByIds(array $ids)
00070 {
00071 $result =
00072 DBPool::getByDao($this->dao)->queryCount(
00073 OSQL::delete()->from($this->dao->getTable())->
00074 where(Expression::in($this->dao->getIdName(), $ids))
00075 );
00076
00077 $this->dao->uncacheByIds($ids);
00078
00079 return $result;
00080 }
00082
00084
00085 public function uncacheById($id)
00086 {
00087 return
00088 Cache::me()->mark($this->className)->
00089 delete($this->makeIdKey($id));
00090 }
00091
00092 public function uncacheByQuery(SelectQuery $query)
00093 {
00094 return
00095 Cache::me()->mark($this->className)->
00096 delete($this->makeQueryKey($query, self::SUFFIX_QUERY));
00097 }
00099
00101
00102 public function getCachedById($id)
00103 {
00104 return
00105 Cache::me()->mark($this->className)->
00106 get($this->makeIdKey($id));
00107 }
00108
00109 protected function getCachedByQuery(SelectQuery $query)
00110 {
00111 return
00112 Cache::me()->mark($this->className)->
00113 get($this->makeQueryKey($query, self::SUFFIX_QUERY));
00114 }
00116
00118
00119 protected function fetchObject(SelectQuery $query)
00120 {
00121 if ($row = DBPool::getByDao($this->dao)->queryRow($query)) {
00122 return $this->dao->makeObject($row);
00123 }
00124
00125 return null;
00126 }
00127
00128 protected function cachedFetchObject(
00129 SelectQuery $query,
00130 $expires,
00131 $byId = true
00132 )
00133 {
00134 if ($row = DBPool::getByDao($this->dao)->queryRow($query)) {
00135 $object = $this->dao->makeOnlyObject($row);
00136
00137 if ($byId)
00138 $object = $this->cacheById($object, $expires);
00139 else
00140 $object = $this->cacheByQuery($query, $object, $expires);
00141
00142 return $this->dao->completeObject($object);
00143 }
00144
00145 return null;
00146 }
00147
00148 protected function fetchList(SelectQuery $query)
00149 {
00150 $list = array();
00151
00152 if ($rows = DBPool::getByDao($this->dao)->querySet($query)) {
00153 $proto = $this->dao->getProtoClass();
00154
00155 $proto->beginPrefetch();
00156
00157 foreach ($rows as $row)
00158 $list[] = $this->dao->makeObject($row);
00159
00160 $proto->endPrefetch($list);
00161 }
00162
00163 return $list;
00164 }
00166
00167 protected function makeIdKey($id)
00168 {
00169 return $this->className.'_'.$id.$this->watermark;
00170 }
00171
00172 protected function makeQueryKey(SelectQuery $query, $suffix)
00173 {
00174 return
00175 $this->className
00176 .$suffix
00177 .$query->getId()
00178 .$this->watermark;
00179 }
00180 }
00181 ?>