| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 |
- <?php
- namespace KarmaFW\Database\Sql;
- class SqlDb
- {
- protected $driver = null;
- protected $last_query = null;
- protected $schema = null;
- protected $tools = null;
- public $throwOnSqlError = 1;
- public $throwOnConnectionError = true;
- public function __construct($dsn=null, $driver_class=null)
- {
- $this->schema = new SqlSchema($this);
- $this->tools = new SqlTools($this);
- $credentials = $this->parseDSN($dsn);
- if (empty($driver_class)) {
- $driver_name = $credentials['driver'];
- $driver_class = $this->getDriverClass($driver_name);
- }
- if (empty($driver_class)) {
- throw new \Exception("No SQL driver specified. Please define DB_DSN with something like 'mysql://root:pass@localhost/my_app'", 1);
- }
- $this->driver = new $driver_class($this, $credentials);
- if (! empty($credentials['charset'])) {
- $charset = $credentials['charset'];
- $this->execute("set names " . $charset);
- }
- }
- public function __debugInfo() {
- return [
- 'driver:protected' => get_class($this->driver) ." Object",
- ];
- }
- /* #### */
- protected function getDriverClass($driver_name)
- {
- $available_drivers = [
- 'mysql' => \KarmaFW\Database\Sql\Drivers\Mysqli\MySqliDriver::class,
- 'sqlite' => \KarmaFW\Database\Sql\Drivers\Mysqli\SqliteDriver::class,
- ];
- return (! empty($driver_name) && isset($available_drivers[$driver_name])) ? $available_drivers[$driver_name] : null;
- }
- public function getDriver()
- {
- return $this->driver;
- }
- public function setLastQuery(SqlQuery $last_query)
- {
- return $this->last_query = $last_query;
- }
- public function getLastQuery()
- {
- return $this->last_query;
- }
- public function createQuery($sql=null)
- {
- return new SqlQuery($this, $sql);
- }
- public function getTable($table_name) /* : SqlTable */
- {
- return new SqlTable($table_name, $this);
- }
- public function createOrmItem($table_name, $primary_key_values=[]) /* : SqlOrmModel */
- {
- return new SqlOrmModel($table_name, $primary_key_values, $this);
- }
- /* CONNECTION */
- public function connect()
- {
- return $this->getDriver()->connect();
- }
- public function disconnect()
- {
- return $this->getDriver()->disconnect();
- }
- public function isConnected()
- {
- return $this->getDriver()->isConnected();
- }
- /* #### */
- public function execute($sql, $params=[])
- {
- return $this->createQuery()->execute($sql, $params);
- }
- public function query($sql, $params=[])
- {
- // Alias of executeSelectAll
- return $this->executeSelectAll($sql, $params);
- }
-
- public function executeSelect($sql, $params=[])
- {
- // Alias of executeSelectAll
- return $this->executeSelectAll($sql, $params);
- }
- public function executeSelectAll($sql, $params=[])
- {
- return $this->createQuery()->executeSelectAll($sql, $params);
- }
- public function executeSelectAllWithFoundRows($query, $params=[])
- {
- return $this->createQuery()->executeSelectAllWithFoundRows($query, $params);
- }
- public function executeSelectAllPagination($query, $nb_per_page=10, $page_idx=1, $params=[])
- {
- return $this->createQuery()->executeSelectAllPagination($query, $nb_per_page, $page_idx, $params);
- }
- public function executeSelectOne($sql, $params=[])
- {
- return $this->createQuery()->executeSelectOne($sql, $params);
- }
- public function executeSelectValue($sql, $column_name, $params=[])
- {
- return $this->createQuery()->executeSelectValue($sql, $column_name, $params);
- }
- public function executeInsert($sql, $params=[])
- {
- return $this->createQuery()->executeInsert($sql, $params);
- }
- public function executeUpdate($sql, $params=[])
- {
- return $this->createQuery()->executeUpdate($sql, $params);
- }
- public function executeDelete($sql, $params=[])
- {
- return $this->createQuery()->executeDelete($sql, $params);
- }
- public function getInsertId()
- {
- return $this->getDriver()->getInsertId();
- }
- public function getAffectedRowsCount()
- {
- return $this->getDriver()->getAffectedRowsCount();
- }
- /* SCHEMA */
- // DATABASE
- public function useDatabase($database_name)
- {
- return $this->schema->useDatabase($database_name);
- }
- public function dropDatabase($database_name, $if_exists=false)
- {
- return $this->schema->dropDatabase($database_name, $if_exists);
- }
- public function createDatabase($database_name, $if_not_exists=false)
- {
- return $this->schema->createDatabase($database_name, $if_not_exists);
- }
- public function listDatabases($database_name=null)
- {
- return $this->schema->listDatabases($database_name);
- }
- // TABLE
- public function createTable($table_name, array $columns, array $indexes=[], $if_not_exists=false)
- {
- return $this->schema->createTable($table_name, $columns, $indexes, $if_not_exists);
- }
- public function dropTable($table_name, $if_exists=false)
- {
- return $this->schema->dropTable($table_name, $if_exists);
- }
- public function listTables($table_name=null, $database_name=null)
- {
- return $this->schema->listTables($table_name, $database_name);
- }
- /*
- public function getTable($table_name)
- {
- return $this->schema->getTable($table_name);
- }
- */
- // COLUMN
- public function listTableColumns($table_name, $column_name=null)
- {
- return $this->schema->listTableColumns($table_name, $column_name);
- }
- public function listTableIndexes($table_name)
- {
- return $this->schema->listTableIndexes($table_name);
- }
- /* TOOLS */
- public function escape($var)
- {
- return $this->tools->escape($var);
- }
- public function buildSqlWhere($var)
- {
- return $this->tools->buildSqlWhere($var);
- }
- public function buildSqlUpdateValues($var)
- {
- return $this->tools->buildSqlUpdateValues($var);
- }
- public function buildSqlInsertValues($var)
- {
- return $this->tools->buildSqlInsertValues($var);
- }
- public function buildSqlWhereSearch($q='', $search_fields=[], $min_str_length=1, $max_words=10, $all_words_required=false)
- {
- return $this->tools->buildSqlWhereSearch($q, $search_fields, $min_str_length, $max_words, $all_words_required);
- }
- public function parseDSN($var)
- {
- return $this->tools->parseDSN($var);
- }
- }
|