/surosql/SurosqlWpdb.class.php
PHP | 160 lines | 125 code | 34 blank | 1 comment | 20 complexity | c12ba3c3d154ca3082e30120235a9553 MD5 | raw file
Possible License(s): LGPL-3.0, AGPL-1.0, GPL-2.0, LGPL-2.1
- <?php
-
- // version: 3.2.0
-
- namespace ns;
-
- use \ArrayIterator;
- use \Exception;
-
-
- class SurosqlWpdb {
-
- static $osql;
-
- static function register($args = array()) {
- if(is_string($args)) {
- parse_str($args, $args);
- }
- $defaults = array(
- 'osql' => new Surosql(),
- 'wpdb' => $GLOBALS['wpdb'],
- 'called_class' => __CLASS__,
- 'set_as_default' => is_null(self::$osql),
- 'init_osql_func' => true,
- );
- extract(array_merge($defaults, $args), EXTR_SKIP);
-
- foreach(get_class_methods(__CLASS__) as $funcname) {
- if(substr($funcname, -6) == '_query') {
- $osql->imported_query_functions[substr($funcname, 0, -6)] = array(__CLASS__, $funcname);
- } else if(substr($funcname, -5) == '_osql') {
- $osql->imported_osql_functions[substr($funcname, 0, -5)] = array(__CLASS__, $funcname);
- }
- }
-
- if($set_as_default) {
- Surosql::$osql = self::$osql = $osql;
-
- if($init_osql_func && !function_exists('osql')) {
- function osql($from = null) {
- return is_null($from) ? SurosqlDriver::$osql : SurosqlDriver::$osql->fromoo($from);
- }
- }
- }
-
- $osql->wpdb = $wpdb;
-
- SurosqlOOManager::init($osql);
-
- return $osql;
- }
-
- static function getIteratorImpl_query($query) {
- return new ArrayIterator($query->all());
- }
-
- static function quote_osql($osql, $str) {
- return '"' . $osql->wpdb->escape((string) $str) . '"';
- }
-
- static private function wpdb_method($method, $query) {
- $wpdb = $query->osql->wpdb;
- $func_args = func_get_args();
- if(!isset($query->bound_args) || count($query->bound_args) == 0) {
- $arg = $query->sql();
- } else {
- $arg = call_user_func_array(array($wpdb, 'prepare'), array_merge(array($query->sql()), $query->bound_args));
- }
- return call_user_func_array(array($wpdb, $method), array_merge(array($arg), array_slice($func_args, 2)));
- }
-
- static function insert_osql($osql, $table, $values_escaped = array(), $values_unescaped = array()) {
- return self::insert_replace('INSERT', $osql, $table, $values_escaped, $values_unescaped);
- }
-
- static function replace_osql($osql, $table, $values_escaped = array(), $values_unescaped = array()) {
- return self::insert_replace('REPLACE', $osql, $table, $values_escaped, $values_unescaped);
- }
-
- static function insert_replace($type, $osql, $table, $values_escaped = array(), $values_unescaped = array()) {
- $table = $osql->glalias2table($table);
- $names = array_merge(array_keys($values_escaped), array_keys($values_unescaped));
- $sqlvalues = array_merge(array_fill(0, count($values_escaped), '%s'), array_values($values_unescaped));
- return $osql->exec("$type INTO `$table` (`" . implode('`, `', $names) . '`) VALUES (' . implode(', ', $sqlvalues) . ')', array_values($values_escaped));
- }
-
- static function escape_osql($osql, $var) {
- return $osql->wpdb->escape($var);
- }
-
- static function insert_id_osql($osql) {
- return $osql->wpdb->insert_id;
- }
-
- static function lastInsertId_osql($osql) {
- return $osql->wpdb->insert_id;
- }
-
- static function query_osql() {
- $args = func_get_args();
- return call_user_func_array(array(__CLASS__, 'exec_osql'), $args);
- }
-
- static function exec_osql($osql, $query) {
- $func_args = func_get_args();
- if(func_num_args() == 2) {
- return $osql->wpdb->query($query);
- } else {
- return $osql->wpdb->query(call_user_func_array(array($osql->wpdb, 'prepare'), array_values(surosql::array_flatten(array_slice($func_args, 1)))));
- }
- }
-
- static function exec_query($query) {
- return self::wpdb_method('query', $query);
- }
-
- static function bind_query($query) {
- $sql = $query->sql();
- $func_args = func_get_args();
- $query->bound_args = array_values(surosql::array_flatten(array_slice($func_args, 1)));
- return $query;
- }
-
- static function get_results_query($query) {
- return self::wpdb_method('get_results', $query);
- }
-
- static function get_col_query($query) {
- return self::wpdb_method('get_col', $query);
- }
-
- static function get_var_query($query) {
- return self::wpdb_method('get_var', $query);
- }
-
- static function first_query($query, $default = null) {
- $r = self::wpdb_method('get_row', $query, ARRAY_A);
- if(!is_null($r)) {
- $r = $query->array_to_oo(array($r));
- return $r[0];
- } else if(func_num_args() == 1) {
- throw new Exception('Trying to fetch from empty resultset.');
- }
- return $default;
- }
-
- static function all_query($query) {
- return $query->array_to_oo(self::wpdb_method('get_results', $query, ARRAY_A));
- }
-
- static function col_query($query, $col_num = 0) {
- return self::wpdb_method('get_col', $query, $col_num);
- }
-
- static function var_query($query) {
- return self::wpdb_method('get_var', $query);
- }
- }
-
- ?>