2018-09-10 05:50:53 +00:00
|
|
|
<?php
|
|
|
|
/**
|
2018-09-10 06:20:10 +00:00
|
|
|
* @file database.alt.php
|
2018-09-10 05:50:53 +00:00
|
|
|
* @date 2018-09-10
|
|
|
|
* @author Go Namhyeon <gnh1201@gmail.com>
|
2018-09-12 01:31:16 +00:00
|
|
|
* @brief Database alternative driver switcher
|
2018-09-10 05:50:53 +00:00
|
|
|
*/
|
|
|
|
|
2020-02-10 06:23:04 +00:00
|
|
|
if(!is_fn("exec_db_alt_callback")) {
|
2019-05-20 08:19:05 +00:00
|
|
|
function exec_db_alt_callback($rules, $params=array(), $driver="") {
|
|
|
|
$result = false;
|
|
|
|
$db_driver = empty($driver) ? get_db_driver() : $driver;
|
|
|
|
|
|
|
|
foreach($rules as $rule) {
|
|
|
|
if($rule['driver'] == $db_driver) {
|
|
|
|
if(loadHelper(sprintf("database.%s", $rule['driver']))) {
|
2020-02-10 06:23:04 +00:00
|
|
|
if(is_fn($rule['callback'])) {
|
2019-05-20 08:19:05 +00:00
|
|
|
if(is_array($params) && count($params) > 0) {
|
|
|
|
$result = call_user_func_array($rule['callback'], $params);
|
|
|
|
} else {
|
|
|
|
$result = call_user_func($rule['callback']);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
set_error(sprintf("Can not load %s database driver.", $rule['driver']));
|
|
|
|
show_errors();
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $result;
|
|
|
|
}
|
2018-09-12 02:26:11 +00:00
|
|
|
}
|
|
|
|
|
2020-02-10 06:23:04 +00:00
|
|
|
if(!is_fn("get_db_alt_connect")) {
|
2019-05-20 08:19:05 +00:00
|
|
|
function get_db_alt_connect($driver) {
|
|
|
|
$conn = false;
|
|
|
|
$config = get_config();
|
|
|
|
|
|
|
|
$rules = array(
|
|
|
|
array("driver" => "mysql.pdo", "callback" => "get_db_mysql_pdo_connect"),
|
|
|
|
array("driver" => "mysql.imp", "callback" => "get_db_mysql_imp_connect"),
|
|
|
|
array("driver" => "mysql.old", "callback" => "get_db_mysql_old_connect"),
|
|
|
|
array("driver" => "mysql.cmd", "callback" => "get_db_mysql_cmd_connect"),
|
|
|
|
array("driver" => "oracle", "callback" => "get_db_oracle_connect"),
|
|
|
|
array("driver" => "pgsql", "callback" => "get_db_pgsql_connect"),
|
|
|
|
array("driver" => "mssql.pdo", "callback" => "get_db_mssql_pdo_connect"),
|
|
|
|
);
|
|
|
|
|
|
|
|
$conn = exec_db_alt_callback($rules, array(), $driver);
|
|
|
|
|
|
|
|
return $conn;
|
|
|
|
}
|
2018-09-10 09:02:16 +00:00
|
|
|
}
|
2018-09-10 05:50:53 +00:00
|
|
|
|
2020-02-10 06:23:04 +00:00
|
|
|
if(!is_fn("exec_db_alt_query")) {
|
2019-05-20 08:19:05 +00:00
|
|
|
function exec_db_alt_query($sql, $bind=array(), $options=array()) {
|
|
|
|
$result = false;
|
|
|
|
|
|
|
|
// allow custom db connection object
|
|
|
|
if(array_key_empty("dbc", $options)) {
|
|
|
|
if(!array_key_empty("driver", $options)) {
|
|
|
|
$options['dbc'] = get_db_alt_connect($options['driver']);
|
|
|
|
} else {
|
|
|
|
$options['dbc'] = get_dbc_object();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$rules = array(
|
|
|
|
array("driver" => "mysql.pdo", "callback" => "exec_db_mysql_pdo_query"),
|
|
|
|
array("driver" => "mysql.imp", "callback" => "exec_db_mysql_imp_query"),
|
|
|
|
array("driver" => "mysql.old", "callback" => "exec_db_mysql_old_query"),
|
|
|
|
array("driver" => "mysql.cmd", "callback" => "exec_db_mysql_cmd_query"),
|
|
|
|
array("driver" => "oracle", "callback" => "exec_db_oracle_query"),
|
|
|
|
array("driver" => "pgsql", "callback" => "exec_db_pgsql_query"),
|
|
|
|
array("driver" => "mssql.pdo", "callback" => "exec_db_mssql_pdo_query"),
|
|
|
|
);
|
|
|
|
|
|
|
|
$result = exec_db_alt_callback($rules, array($sql, $bind, $options), $driver);
|
|
|
|
|
|
|
|
return $result;
|
|
|
|
}
|
2018-09-10 05:50:53 +00:00
|
|
|
}
|
2018-09-11 02:36:46 +00:00
|
|
|
|
2020-02-10 06:23:04 +00:00
|
|
|
if(!is_fn("exec_db_alt_fetch_all")) {
|
2019-05-20 08:19:05 +00:00
|
|
|
function exec_db_alt_fetch_all($sql, $bind=array(), $options=array()) {
|
|
|
|
$rows = array();
|
|
|
|
|
|
|
|
$driver = get_value_in_array("driver", $options, "");
|
|
|
|
$rules = array(
|
|
|
|
array("driver" => "mysql.pdo", "callback" => "exec_db_mysql_pdo_fetch_all"),
|
|
|
|
array("driver" => "mysql.imp", "callback" => "exec_db_mysql_imp_fetch_all"),
|
|
|
|
array("driver" => "mysql.old", "callback" => "exec_db_mysql_old_fetch_all"),
|
|
|
|
array("driver" => "mysql.cmd", "callback" => "exec_db_mysql_cmd_fetch_all"),
|
|
|
|
array("driver" => "oracle", "callback" => "exec_db_oracle_fetch_all"),
|
|
|
|
array("driver" => "pgsql", "callback" => "exec_db_pgsql_fetch_all"),
|
|
|
|
array("driver" => "mssql.pdo", "callback" => "exec_db_mssql_fetch_all"),
|
|
|
|
);
|
|
|
|
|
|
|
|
$rows = exec_db_alt_callback($rules, array($sql, $bind, $options), $driver);
|
|
|
|
|
|
|
|
return $rows;
|
|
|
|
}
|
2018-09-11 02:36:46 +00:00
|
|
|
}
|
|
|
|
|
2020-02-10 06:23:04 +00:00
|
|
|
if(!is_fn("exec_db_alt_fetch")) {
|
2019-05-20 08:19:05 +00:00
|
|
|
function exec_db_alt_fetch($sql, $bind) {
|
|
|
|
$fetched = false;
|
2018-09-11 02:36:46 +00:00
|
|
|
|
2019-05-20 08:19:05 +00:00
|
|
|
$rows = exec_db_alt_fetch_all($sql, $bind);
|
|
|
|
foreach($rows as $row) {
|
|
|
|
$fetched = $row;
|
|
|
|
break;
|
|
|
|
}
|
2018-09-11 02:36:46 +00:00
|
|
|
|
2019-05-20 08:19:05 +00:00
|
|
|
return $fetched;
|
|
|
|
}
|
2018-09-11 02:36:46 +00:00
|
|
|
}
|
2018-12-29 02:48:42 +00:00
|
|
|
|
2020-02-10 06:23:04 +00:00
|
|
|
if(!is_fn("get_db_alt_last_id")) {
|
2019-05-20 08:19:05 +00:00
|
|
|
function get_db_alt_last_id($driver) {
|
|
|
|
$last_id = false;
|
2018-12-29 02:48:42 +00:00
|
|
|
|
2019-05-20 08:19:05 +00:00
|
|
|
if($driver == "mysql.imp") {
|
|
|
|
$last_id = @mysqli_insert_id();
|
|
|
|
} elseif($driver == "mysql.old") {
|
|
|
|
$last_id = @mysql_insert_id();
|
|
|
|
}
|
2018-12-29 02:48:42 +00:00
|
|
|
|
2019-05-20 08:19:05 +00:00
|
|
|
return $last_id;
|
|
|
|
}
|
2018-12-29 02:48:42 +00:00
|
|
|
}
|