PageRenderTime 55ms CodeModel.GetById 28ms RepoModel.GetById 0ms app.codeStats 0ms

/surosql/SurosqlWpdb.class.php

https://bitbucket.org/SuRaMoN/surosql
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
  1. <?php
  2. // version: 3.2.0
  3. namespace ns;
  4. use \ArrayIterator;
  5. use \Exception;
  6. class SurosqlWpdb {
  7. static $osql;
  8. static function register($args = array()) {
  9. if(is_string($args)) {
  10. parse_str($args, $args);
  11. }
  12. $defaults = array(
  13. 'osql' => new Surosql(),
  14. 'wpdb' => $GLOBALS['wpdb'],
  15. 'called_class' => __CLASS__,
  16. 'set_as_default' => is_null(self::$osql),
  17. 'init_osql_func' => true,
  18. );
  19. extract(array_merge($defaults, $args), EXTR_SKIP);
  20. foreach(get_class_methods(__CLASS__) as $funcname) {
  21. if(substr($funcname, -6) == '_query') {
  22. $osql->imported_query_functions[substr($funcname, 0, -6)] = array(__CLASS__, $funcname);
  23. } else if(substr($funcname, -5) == '_osql') {
  24. $osql->imported_osql_functions[substr($funcname, 0, -5)] = array(__CLASS__, $funcname);
  25. }
  26. }
  27. if($set_as_default) {
  28. Surosql::$osql = self::$osql = $osql;
  29. if($init_osql_func && !function_exists('osql')) {
  30. function osql($from = null) {
  31. return is_null($from) ? SurosqlDriver::$osql : SurosqlDriver::$osql->fromoo($from);
  32. }
  33. }
  34. }
  35. $osql->wpdb = $wpdb;
  36. SurosqlOOManager::init($osql);
  37. return $osql;
  38. }
  39. static function getIteratorImpl_query($query) {
  40. return new ArrayIterator($query->all());
  41. }
  42. static function quote_osql($osql, $str) {
  43. return '"' . $osql->wpdb->escape((string) $str) . '"';
  44. }
  45. static private function wpdb_method($method, $query) {
  46. $wpdb = $query->osql->wpdb;
  47. $func_args = func_get_args();
  48. if(!isset($query->bound_args) || count($query->bound_args) == 0) {
  49. $arg = $query->sql();
  50. } else {
  51. $arg = call_user_func_array(array($wpdb, 'prepare'), array_merge(array($query->sql()), $query->bound_args));
  52. }
  53. return call_user_func_array(array($wpdb, $method), array_merge(array($arg), array_slice($func_args, 2)));
  54. }
  55. static function insert_osql($osql, $table, $values_escaped = array(), $values_unescaped = array()) {
  56. return self::insert_replace('INSERT', $osql, $table, $values_escaped, $values_unescaped);
  57. }
  58. static function replace_osql($osql, $table, $values_escaped = array(), $values_unescaped = array()) {
  59. return self::insert_replace('REPLACE', $osql, $table, $values_escaped, $values_unescaped);
  60. }
  61. static function insert_replace($type, $osql, $table, $values_escaped = array(), $values_unescaped = array()) {
  62. $table = $osql->glalias2table($table);
  63. $names = array_merge(array_keys($values_escaped), array_keys($values_unescaped));
  64. $sqlvalues = array_merge(array_fill(0, count($values_escaped), '%s'), array_values($values_unescaped));
  65. return $osql->exec("$type INTO `$table` (`" . implode('`, `', $names) . '`) VALUES (' . implode(', ', $sqlvalues) . ')', array_values($values_escaped));
  66. }
  67. static function escape_osql($osql, $var) {
  68. return $osql->wpdb->escape($var);
  69. }
  70. static function insert_id_osql($osql) {
  71. return $osql->wpdb->insert_id;
  72. }
  73. static function lastInsertId_osql($osql) {
  74. return $osql->wpdb->insert_id;
  75. }
  76. static function query_osql() {
  77. $args = func_get_args();
  78. return call_user_func_array(array(__CLASS__, 'exec_osql'), $args);
  79. }
  80. static function exec_osql($osql, $query) {
  81. $func_args = func_get_args();
  82. if(func_num_args() == 2) {
  83. return $osql->wpdb->query($query);
  84. } else {
  85. return $osql->wpdb->query(call_user_func_array(array($osql->wpdb, 'prepare'), array_values(surosql::array_flatten(array_slice($func_args, 1)))));
  86. }
  87. }
  88. static function exec_query($query) {
  89. return self::wpdb_method('query', $query);
  90. }
  91. static function bind_query($query) {
  92. $sql = $query->sql();
  93. $func_args = func_get_args();
  94. $query->bound_args = array_values(surosql::array_flatten(array_slice($func_args, 1)));
  95. return $query;
  96. }
  97. static function get_results_query($query) {
  98. return self::wpdb_method('get_results', $query);
  99. }
  100. static function get_col_query($query) {
  101. return self::wpdb_method('get_col', $query);
  102. }
  103. static function get_var_query($query) {
  104. return self::wpdb_method('get_var', $query);
  105. }
  106. static function first_query($query, $default = null) {
  107. $r = self::wpdb_method('get_row', $query, ARRAY_A);
  108. if(!is_null($r)) {
  109. $r = $query->array_to_oo(array($r));
  110. return $r[0];
  111. } else if(func_num_args() == 1) {
  112. throw new Exception('Trying to fetch from empty resultset.');
  113. }
  114. return $default;
  115. }
  116. static function all_query($query) {
  117. return $query->array_to_oo(self::wpdb_method('get_results', $query, ARRAY_A));
  118. }
  119. static function col_query($query, $col_num = 0) {
  120. return self::wpdb_method('get_col', $query, $col_num);
  121. }
  122. static function var_query($query) {
  123. return self::wpdb_method('get_var', $query);
  124. }
  125. }
  126. ?>