MockDatabase.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. /**
  3. * Lithium: the most rad php framework
  4. *
  5. * @copyright Copyright 2013, Union of RAD (http://union-of-rad.org)
  6. * @license http://opensource.org/licenses/bsd-license.php The BSD License
  7. */
  8. namespace lithium\tests\mocks\data\model;
  9. use lithium\tests\mocks\data\model\mock_database\MockResult;
  10. class MockDatabase extends \lithium\data\source\Database {
  11. /**
  12. * Mock column type definitions.
  13. *
  14. * @var array
  15. */
  16. protected $_columns = array(
  17. 'primary_key' => array('name' => 'NOT NULL AUTO_INCREMENT'),
  18. 'string' => array('name' => 'varchar', 'length' => 255),
  19. 'text' => array('name' => 'text'),
  20. 'integer' => array('name' => 'int', 'length' => 11, 'formatter' => 'intval'),
  21. 'float' => array('name' => 'float', 'formatter' => 'floatval'),
  22. 'datetime' => array('name' => 'datetime', 'format' => 'Y-m-d H:i:s', 'formatter' => 'date'),
  23. 'timestamp' => array(
  24. 'name' => 'timestamp', 'format' => 'Y-m-d H:i:s', 'formatter' => 'date'
  25. ),
  26. 'time' => array('name' => 'time', 'format' => 'H:i:s', 'formatter' => 'date'),
  27. 'date' => array('name' => 'date', 'format' => 'Y-m-d', 'formatter' => 'date'),
  28. 'binary' => array('name' => 'blob'),
  29. 'boolean' => array('name' => 'tinyint', 'length' => 1)
  30. );
  31. public $connection = null;
  32. public $sql = null;
  33. public $logs = array();
  34. public $log = false;
  35. public $return = array();
  36. protected $_quotes = array('{', '}');
  37. public function __construct(array $config = array()) {
  38. parent::__construct($config);
  39. $this->connection = $this;
  40. }
  41. public function quote($value) {
  42. return "'{$value}'";
  43. }
  44. public function connect() {
  45. return true;
  46. }
  47. public function disconnect() {
  48. return true;
  49. }
  50. public function sources($class = null) {}
  51. public function describe($entity, $schema = array(), array $meta = array()) {
  52. return $this->_instance('schema', array('fields' => $schema));
  53. }
  54. public function encoding($encoding = null) {}
  55. public function result($type, $resource, $context) {}
  56. public function error() {}
  57. public function value($value, array $schema = array()) {
  58. if (($result = parent::value($value, $schema)) !== null) {
  59. return $result;
  60. }
  61. return "'{$value}'";
  62. }
  63. public function cast($entity, array $data, array $options = array()) {
  64. $defaults = array('first' => false);
  65. $options += $defaults;
  66. return $options['first'] ? reset($data) : $data;
  67. }
  68. public function testConfig() {
  69. return $this->_config;
  70. }
  71. protected function _execute($sql) {
  72. $this->sql = $sql;
  73. if ($this->log) {
  74. $this->logs[] = $sql;
  75. }
  76. if (isset($this->return['_execute'])) {
  77. return $this->return['_execute'];
  78. }
  79. return new MockResult();
  80. }
  81. public function schema($query, $resource = null, $context = null) {
  82. if (isset($this->return['schema'])) {
  83. return $this->return['schema'];
  84. }
  85. return parent::schema($query, $resource = null, $context = null);
  86. }
  87. protected function _insertId($query) {
  88. $query = $query->export($this);
  89. ksort($query);
  90. return sha1(serialize($query));
  91. }
  92. }
  93. ?>