/src/application/code/core/Wootook/Core/Database/Statement/Statement.php

https://github.com/gplanchat/wootook · PHP · 215 lines · 80 code · 36 blank · 99 comment · 8 complexity · a9f92500abedb1220d3659b0d6947897 MD5 · raw file

  1. <?php
  2. abstract class Wootook_Core_Database_Statement_Statement
  3. implements Iterator
  4. {
  5. protected $_adapter = null;
  6. protected $_currentIndex = 0;
  7. protected $_currentRow = null;
  8. public function __construct(Wootook_Core_Database_Adapter_Adapter $adapter, $sql)
  9. {
  10. $this->_adapter = $adapter;
  11. $this->_init($sql);
  12. }
  13. abstract protected function _init($sql);
  14. /**
  15. *
  16. * @param string|int $column
  17. * @param mixed $param
  18. * @param int $type
  19. * @return Wootook_Core_Database_Statement_Statement
  20. */
  21. abstract public function bindColumn($column, &$param, $type = null);
  22. /**
  23. *
  24. * @param string|int $parameter
  25. * @param mixed $variable
  26. * @param int $type
  27. * @param int $length
  28. * @param unknown_type $options
  29. * @return Wootook_Core_Database_Statement_Statement
  30. */
  31. abstract public function bindParam($parameter, &$variable, $type = null, $length = null, $options = null);
  32. /**
  33. *
  34. * @param string|int $parameter
  35. * @param mixed $value
  36. * @param int $type
  37. * @return Wootook_Core_Database_Statement_Statement
  38. */
  39. abstract public function bindValue($parameter, $value, $type = null);
  40. /**
  41. *
  42. * @param array $params
  43. * @return bool
  44. */
  45. abstract public function execute(Array $params = null);
  46. /**
  47. *
  48. * @param int $style
  49. * @param int $col
  50. * @return mixed
  51. */
  52. abstract public function fetch($style = null, $orientation = Wootook_Core_Database_ConnectionManager::FETCH_ORI_NEXT, $cursorOffset = 0);
  53. /**
  54. *
  55. * @param int $style
  56. * @param int $col
  57. * @return mixed
  58. */
  59. abstract public function fetchAll($style = null, $col = null);
  60. /**
  61. *
  62. * @param int $col
  63. * @return mixed
  64. */
  65. abstract public function fetchColumn($col = 0);
  66. /**
  67. *
  68. * @param string $class
  69. * @param array $config
  70. * @return Wootook_Object
  71. */
  72. abstract public function fetchObject($class = 'Wootook_Object', Array $constructorArgs = array());
  73. /**
  74. *
  75. * @param string $class
  76. * @param array $config
  77. * @return Wootook_Object
  78. */
  79. public function fetchEntity($class = 'Wootook_Core_Mvc_Model_Entity', Array $constructorArgs = array())
  80. {
  81. $reflection = new ReflectionClass($class);
  82. $object = $reflection->newInstanceArgs($constructorArgs);
  83. if (!$object instanceof Wootook_Object) {
  84. throw new Wootook_Core_Exception_Database_StatementError($this, 'Destination object should be a Wootook_Core_Mvc_Model_Entity instance.');
  85. }
  86. $data = $this->fetch(Wootook_Core_Database_ConnectionManager::FETCH_ASSOC);
  87. if ($data !== false) {
  88. $object->getDataMapper()->decode($object, $data);
  89. }
  90. return $object;
  91. }
  92. /**
  93. *
  94. * @return Wootook_Core_Database_Adapter_Adapter
  95. */
  96. abstract public function getAdapter();
  97. /**
  98. *
  99. * @param string $key
  100. */
  101. abstract public function getAttribute($key);
  102. /**
  103. *
  104. * @param string $key
  105. * @param mixed $value
  106. * @return Wootook_Core_Database_Statement_Statement
  107. */
  108. abstract public function setAttribute($key, $value);
  109. /**
  110. * @param unknown_type $mode
  111. * @return Wootook_Core_Database_Statement_Statement
  112. */
  113. abstract public function setFetchMode($mode);
  114. /**
  115. * @return int
  116. */
  117. abstract public function columnCount();
  118. /**
  119. * @return string
  120. */
  121. abstract public function errorCode();
  122. /**
  123. * @return string
  124. */
  125. abstract public function errorMessage();
  126. /**
  127. * @return array
  128. */
  129. abstract public function errorInfo();
  130. /**
  131. * @return string
  132. */
  133. abstract public function errorState();
  134. /**
  135. * @return int
  136. */
  137. abstract public function rowCount();
  138. /**
  139. * @return bool
  140. */
  141. abstract public function closeCursor();
  142. /**
  143. * @return bool
  144. */
  145. abstract public function nextRowset();
  146. public function getParamType($value)
  147. {
  148. if (is_numeric($value)) {
  149. return Wootook_Core_Database_ConnectionManager::PARAM_INT;
  150. } else if (is_bool($value)) {
  151. return Wootook_Core_Database_ConnectionManager::PARAM_BOOL;
  152. } else if (is_string($value)) {
  153. return Wootook_Core_Database_ConnectionManager::PARAM_STR;
  154. }
  155. return null;
  156. }
  157. public function current()
  158. {
  159. return $this->_currentRow;
  160. }
  161. public function next()
  162. {
  163. $this->_currentRow = $this->fetch();
  164. $this->_currentIndex++;
  165. }
  166. public function key()
  167. {
  168. return $this->_currentIndex;
  169. }
  170. public function rewind()
  171. {
  172. return $this->_currentIndex;
  173. }
  174. public function valid()
  175. {
  176. $rows = $this->rowCount();
  177. return $rows > 0 && $this->_currentIndex <= $rows;
  178. }
  179. }