SqlDb.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. <?php
  2. namespace KarmaFW\Database\Sql;
  3. class SqlDb
  4. {
  5. protected $driver = null;
  6. protected $last_query = null;
  7. protected $schema = null;
  8. protected $tools = null;
  9. public $throwOnSqlError = 1;
  10. public $throwOnConnectionError = true;
  11. public function __construct($dsn=null, $driver_class=null)
  12. {
  13. $this->schema = new SqlSchema($this);
  14. $this->tools = new SqlTools($this);
  15. $credentials = $this->parseDSN($dsn);
  16. if (empty($driver_class)) {
  17. $driver_name = $credentials['driver'];
  18. $driver_class = $this->getDriverClass($driver_name);
  19. }
  20. if (empty($driver_class)) {
  21. throw new \Exception("No SQL driver specified. Please define DB_DSN with something like 'mysql://root:pass@localhost/my_app'", 1);
  22. }
  23. $this->driver = new $driver_class($this, $credentials);
  24. }
  25. public function __debugInfo() {
  26. return [
  27. 'driver:protected' => get_class($this->driver) ." Object",
  28. ];
  29. }
  30. /* #### */
  31. protected function getDriverClass($driver_name)
  32. {
  33. $available_drivers = [
  34. 'mysql' => \KarmaFW\Database\Sql\Drivers\Mysqli\MySqliDriver::class,
  35. 'sqlite' => \KarmaFW\Database\Sql\Drivers\Mysqli\SqliteDriver::class,
  36. ];
  37. return (! empty($driver_name) && isset($available_drivers[$driver_name])) ? $available_drivers[$driver_name] : null;
  38. }
  39. public function getDriver()
  40. {
  41. return $this->driver;
  42. }
  43. public function setLastQuery(SqlQuery $last_query)
  44. {
  45. return $this->last_query = $last_query;
  46. }
  47. public function getLastQuery()
  48. {
  49. return $this->last_query;
  50. }
  51. public function createQuery($sql=null)
  52. {
  53. return new SqlQuery($this, $sql);
  54. }
  55. public function getTable($table_name) /* : SqlTable */
  56. {
  57. return new SqlTable($table_name, $this);
  58. }
  59. public function createOrmItem($table_name, $primary_key_values=[]) /* : SqlOrmModel */
  60. {
  61. return new SqlOrmModel($table_name, $primary_key_values, $this);
  62. }
  63. /* CONNECTION */
  64. public function connect()
  65. {
  66. return $this->getDriver()->connect();
  67. }
  68. public function disconnect()
  69. {
  70. return $this->getDriver()->disconnect();
  71. }
  72. public function isConnected()
  73. {
  74. return $this->getDriver()->isConnected();
  75. }
  76. /* #### */
  77. public function execute($sql, $params=[])
  78. {
  79. return $this->createQuery()->execute($sql, $params);
  80. }
  81. public function query($sql, $params=[])
  82. {
  83. // Alias of executeSelectAll
  84. return $this->executeSelectAll($sql, $params);
  85. }
  86. public function executeSelect($sql, $params=[])
  87. {
  88. // Alias of executeSelectAll
  89. return $this->executeSelectAll($sql, $params);
  90. }
  91. public function executeSelectAll($sql, $params=[])
  92. {
  93. return $this->createQuery()->executeSelectAll($sql, $params);
  94. }
  95. public function executeSelectOne($sql, $params=[])
  96. {
  97. return $this->createQuery()->executeSelectOne($sql, $params);
  98. }
  99. public function executeSelectValue($sql, $column_name, $params=[])
  100. {
  101. return $this->createQuery()->executeSelectValue($sql, $column_name, $params);
  102. }
  103. public function executeInsert($sql, $params=[])
  104. {
  105. return $this->createQuery()->executeInsert($sql, $params);
  106. }
  107. public function executeUpdate($sql, $params=[])
  108. {
  109. return $this->createQuery()->executeUpdate($sql, $params);
  110. }
  111. public function executeDelete($sql, $params=[])
  112. {
  113. return $this->createQuery()->executeDelete($sql, $params);
  114. }
  115. public function getInsertId()
  116. {
  117. return $this->getDriver()->getInsertId();
  118. }
  119. public function getAffectedRowsCount()
  120. {
  121. return $this->getDriver()->getAffectedRowsCount();
  122. }
  123. /* SCHEMA */
  124. // DATABASE
  125. public function useDatabase($database_name)
  126. {
  127. return $this->schema->useDatabase($database_name);
  128. }
  129. public function dropDatabase($database_name, $if_exists=false)
  130. {
  131. return $this->schema->dropDatabase($database_name, $if_exists);
  132. }
  133. public function createDatabase($database_name, $if_not_exists=false)
  134. {
  135. return $this->schema->createDatabase($database_name, $if_not_exists);
  136. }
  137. public function listDatabases($database_name=null)
  138. {
  139. return $this->schema->listDatabases($database_name);
  140. }
  141. // TABLE
  142. public function createTable($table_name, array $columns, array $indexes=[], $if_not_exists=false)
  143. {
  144. return $this->schema->createTable($table_name, $columns, $indexes, $if_not_exists);
  145. }
  146. public function dropTable($table_name, $if_exists=false)
  147. {
  148. return $this->schema->dropTable($table_name, $if_exists);
  149. }
  150. public function listTables($table_name=null, $database_name=null)
  151. {
  152. return $this->schema->listTables($table_name, $database_name);
  153. }
  154. /*
  155. public function getTable($table_name)
  156. {
  157. return $this->schema->getTable($table_name);
  158. }
  159. */
  160. // COLUMN
  161. public function listTableColumns($table_name, $column_name=null)
  162. {
  163. return $this->schema->listTableColumns($table_name, $column_name);
  164. }
  165. public function listTableIndexes($table_name)
  166. {
  167. return $this->schema->listTableIndexes($table_name);
  168. }
  169. /* TOOLS */
  170. public function escape($var)
  171. {
  172. return $this->tools->escape($var);
  173. }
  174. public function buildSqlWhere($var)
  175. {
  176. return $this->tools->buildSqlWhere($var);
  177. }
  178. public function buildSqlUpdateValues($var)
  179. {
  180. return $this->tools->buildSqlUpdateValues($var);
  181. }
  182. public function buildSqlInsertValues($var)
  183. {
  184. return $this->tools->buildSqlInsertValues($var);
  185. }
  186. public function buildSqlWhereSearch($q='', $search_fields=[])
  187. {
  188. return $this->tools->buildSqlWhereSearch($q, $search_fields);
  189. }
  190. public function parseDSN($var)
  191. {
  192. return $this->tools->parseDSN($var);
  193. }
  194. }