/class_generator/libs/SurosqlPDO.class.php
PHP | 227 lines | 188 code | 39 blank | 0 comment | 25 complexity | 09aff1e6681295f0c3a621fa01b3b66c MD5 | raw file
Possible License(s): LGPL-3.0, AGPL-1.0, GPL-2.0, LGPL-2.1
- <?php
-
- class SurosqlPDO {
-
- static $osql;
-
- static function register($osql, $dsn, $username = null, $password = null, $driver_options = array()) {
- $osql->pdo = new PDO($dsn, $username, $password, $driver_options);
- $osql->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
- $osql->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
-
- if(!isset($driver_options['auto_register']) || $driver_options['auto_register']) {
- self::$osql = $osql;
- self::init_osql_func($osql);
- SurosqlPDOOOManager::register($osql);
- }
-
- foreach(get_class_methods('SurosqlPDO') as $funcname) {
- if(substr($funcname, -6) == '_query') {
- $osql->imported_query_functions[substr($funcname, 0, -6)] = array('SurosqlPDO', $funcname);
- } else if(substr($funcname, -5) == '_osql') {
- $osql->imported_osql_functions[substr($funcname, 0, -5)] = array('SurosqlPDO', $funcname);
- }
- }
- }
-
- static function init_osql_func($osql) {
- function osql() {
- return SurosqlPDO::$osql;
- }
- }
-
- static function beginTransaction_osql($osql) {
- return $osql->pdo->beginTransaction();
- }
-
- static function rollBack_osql($osql) {
- return $osql->pdo->rollBack();
- }
-
- static function commit_osql($osql) {
- return $osql->pdo->commit();
- }
-
- static function lastInsertId_osql($osql) {
- return $osql->pdo->lastInsertId();
- }
-
- static function prepare_osql($osql, $query) {
- return $osql->pdo->prepare($query);
- }
-
- static function quote_osql($osql, $query) {
- return $osql->pdo->quote($query);
- }
-
- static function insert_osql($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), '?'), array_values($values_unescaped));
- return $osql->pdo->prepare("INSERT INTO `$table` (`" . implode('`, `', $names) . '`) VALUES (' . implode(', ', $sqlvalues) . ')')->execute(array_values($values_escaped));
- }
-
- static function exec_osql($osql, $query) {
- $func_args = func_get_args();
- if(func_num_args() == 2) {
- return $osql->pdo->exec($query);
- } else {
- $pdostmt = $osql->pdo->prepare($query);
- $pdostmt->execute(array_slice($func_args, 2));
- return $pdostmt->rowCount();
- }
- }
-
- static function exec_query($query) {
- return call_user_func_array(array('SurosqlPDO', 'exec_osql'), array_merge(array($query->osql, $query->sql()), isset($query->bound_args) ? $query->bound_args : array()));
- }
-
- static function bind_query($query) {
- $sql = $query->sql();
- $func_args = func_get_args();
- $query->bound_args = array();
- foreach(surosql::array_flatten(array_slice($func_args, 1)) as $key => $value) {
- if(is_int($key)) {
- $query->bound_args[] = $value;
- } else {
- $key = substr($key, 0, 1) != ':' ? ":$key" : $key;
- if(preg_match('/' . preg_quote($key) . '($|\s|\)|,)/', $sql) == 1) {
- $query->bound_args[$key] = $value;
- }
- }
- }
- return $query;
- }
-
- static function prepare_query($query) {
- return $query->osql->pdo->prepare($query->sql());
- }
-
- static function query_query($query) {
- if(!isset($query->bound_args) || count($query->bound_args) == 0) {
- return $query->osql->pdo->query($query->sql());
- } else {
- $pdostmt = $query->osql->pdo->prepare($query->sql());
- $pdostmt->execute($query->bound_args);
- return $pdostmt;
- }
- }
-
- static function fetch_query($query) {
- $func_args = func_get_args();
- return call_user_func_array(array(self::query_query($query), 'fetch'), array_slice($func_args, 1));
- }
-
- static function fetchVar_query($query) {
- $func_args = func_get_args();
- return call_user_func_array(array(self::query_query($query), 'fetchColumn'), array_slice($func_args, 1));
- }
-
- static function fetchAll_query($query) {
- $func_args = func_get_args();
- return call_user_func_array(array(self::query_query($query), 'fetchAll'), array_slice($func_args, 1));
- }
-
- static function first_query($query, $default = null) {
- $r = self::query_query($query)->fetch(PDO::FETCH_ASSOC);
- if($r !== false) {
- $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::query_query($query)->fetchAll(PDO::FETCH_ASSOC));
- }
-
- static function var_query($query) {
- return self::fetchVar_query($query);
- }
-
- static function getIteratorImpl_query($query) {
- return new ArrayIterator(self::fetchAll_query($query));
- }
- }
-
- class SurosqlPDOOOManager {
-
- static function register($osql) {
- $funcs = array(
- 'insertobj' => array('SurosqlPDOOOManager', 'insertobj'),
- 'updateobj' => array('SurosqlPDOOOManager', 'updateobj'),
- 'deleteobj' => array('SurosqlPDOOOManager', 'deleteobj'),
- );
- $osql->imported_osql_functions = array_merge($osql->imported_osql_functions, $funcs);
- }
-
- static function update($obj, $fields = null, $values_unescaped = array()) {
- return self::updateobj(SurosqlPDO::$osql, $obj, $fields, $values_unescaped);
- }
-
- static function insert($obj, $fields = null, $values_unescaped = array()) {
- return self::insertobj(SurosqlPDO::$osql, $obj, $fields, $values_unescaped);
- }
-
- static function delete($obj) {
- return self::deleteobj(SurosqlPDO::$osql, $obj);
- }
-
- static function updateobj($osql, $obj, $fields = null, $values_unescaped = array()) {
- $oo = $osql->get_obj_info($obj);
- $fields = is_null($fields) ? array_diff($oo['columns'], array($oo['primary'])) : $fields;
- $bind_vars = array();
- foreach($fields as $field) {
- $bind_vars[$field] = isset($obj->$field) ? $obj->$field : null;
- $set[] = "`$field` = ?";
- }
- foreach($values_unescaped as $field => $value) {
- $set[] = "`$field` = $value";
- }
- $bind_vars = array_merge(array_values($osql->field_serialization($bind_vars, $oo)), array($obj->{$oo['primary']}));
- return $osql->update($oo['table'])->set(implode(', ', $set))->where("{$oo['primary']}=?")->bind($bind_vars)->exec();
- }
-
- static function insertobj($osql, $obj, $fields = null, $values_unescaped = array()) {
- $oo = $osql->get_obj_info($obj);
- foreach($oo['columns'] as $field) {
- if(isset($obj->$field)) {
- $values_escaped[$field] = $obj->$field;
- }
- }
- $osql->insert($oo['table'], $osql->field_serialization($values_escaped, $oo), $values_unescaped);
- return isset($oo['primary']) ? ($obj->{$oo['primary']} = $osql->lastInsertId()) : null;
- }
-
- static function deleteobj($osql, $obj) {
- $oo = $osql->get_obj_info($obj);
- return $osql->exec("DELETE FROM `{$oo['table']}` WHERE `{$oo['primary']}` = ?", $obj->{$oo['primary']});
- }
- }
-
- class SurosqlPDOOO {
-
- function __construct($field_array = null) {
- if(is_array($field_array)) {
- foreach($field_array as $name => $value) {
- $this->$name = $value;
- }
- }
- }
-
- function update($fields = null, $values_unescaped = array()) {
- return SurosqlPDOOOManager::update($this, $fields, $values_unescaped);
- }
-
- function insert($fields = null, $values_unescaped = array()) {
- return SurosqlPDOOOManager::insert($this, $fields, $values_unescaped);
- }
-
- function delete() {
- return SurosqlPDOOOManager::delete($this);
- }
- }
-
- ?>