diff --git a/autoload.php b/autoload.php index 370f1b6..4868aef 100644 --- a/autoload.php +++ b/autoload.php @@ -50,10 +50,7 @@ function query_autoload($class) $driver_path = QDRIVER_PATH . "{$class}"; - if (is_file($class_path)) - { - require_once($class_path); - } + if (is_file($class_path)) require_once($class_path); elseif (is_dir($driver_path)) { if (in_array($class, PDO::getAvailableDrivers())) diff --git a/classes/db_pdo.php b/classes/db_pdo.php index 167bd90..e63df7f 100644 --- a/classes/db_pdo.php +++ b/classes/db_pdo.php @@ -207,7 +207,7 @@ abstract class DB_PDO extends PDO { * @return string */ public function quote_ident($ident) - { + { if (is_array($ident)) { return array_map(array($this, __METHOD__), $ident); @@ -217,7 +217,7 @@ abstract class DB_PDO extends PDO { if (strpos($ident, ',') !== FALSE) { $parts = explode(',', $ident); - $parts = array_map('mb_trim', $parts); + $parts = array_map('mb_trim', $parts); $parts = array_map(array($this, __METHOD__), $parts); $ident = implode(',', $parts); } @@ -256,7 +256,7 @@ abstract class DB_PDO extends PDO { public function _quote($str) { // Don't add additional quotes, or quote numbers - if (strpos($str, $this->escape_char) === 0 || + if (strpos($str, $this->escape_char) === 0 || strrpos($str, $this->escape_char) === 0 || ( ! is_string($str) && is_numeric($str)) ) @@ -412,6 +412,12 @@ abstract class DB_PDO extends PDO { */ public function driver_query($sql, $filtered_index=TRUE) { + // Return if the values are returned instead of a query + if (is_array($sql)) + { + return $sql; + } + // Return if the query doesn't apply to the driver if ($sql === NULL) { @@ -442,7 +448,7 @@ abstract class DB_PDO extends PDO { if (preg_match($regex, $this->last_query, $output) > 0) { $stmt = $this->query("SELECT COUNT(*) FROM {$output[1]}"); - return $stmt->fetchColumn(); + return (int) $stmt->fetchColumn(); } return NULL; @@ -459,10 +465,10 @@ abstract class DB_PDO extends PDO { * @return void */ abstract public function truncate($table); - + // -------------------------------------------------------------------------- - - /** + + /** * Create sql for batch insert * * @param string $table @@ -472,30 +478,30 @@ abstract class DB_PDO extends PDO { public function insert_batch($table, $data=array()) { if ( ! is_array($data[0])) return NULL; - + $table = $this->quote_table($table); $fields = array_keys($data[0]); $vals = array(); - + $sql = "INSERT INTO {$table} ("; $sql .= implode(',', $this->quote_ident($fields)); $sql .= ") VALUES "; - + $params = array_fill(0, count($fields), '?'); $param_string = implode(',', $params); - + // Remove the first array after use, as it is a special case $sql .= "({$param_string})"; $vals = array_values($data[0]); array_shift($data); - - // Add another grouping for each + + // Add another grouping for each foreach($data as $group) { $sql .= ",({$param_string})"; $vals = array_merge($vals, array_values($group)); } - + return array($sql, $vals); } } diff --git a/common.php b/common.php index d2b8a40..3546c94 100644 --- a/common.php +++ b/common.php @@ -103,7 +103,7 @@ function db_filter($array, $index) function Query($params = '') { static $connections; - + // If you are getting a previously created connection if (is_scalar($params)) { @@ -116,7 +116,7 @@ function Query($params = '') { return end($connections); } - + throw new InvalidArgumentException("The specified connection does not exist"); } @@ -149,10 +149,10 @@ function Query($params = '') { throw new BadDBDriverException('Database driver does not exist, or is not supported'); } - + // Set additional PDO options $options = array(); - + if (isset($params->options)) { $options = (array)$params->options; @@ -163,30 +163,24 @@ function Query($params = '') // -------------------------------------------------------------------------- // Create the dsn for the database to connect to - switch($dbtype) + if ($dbtype === 'firebird') $dsn = "{$params->host}:{$params->file}"; + elseif ($dbtype === 'sqlite') $dsn = $params->file; + else { - default: + if ( ! empty($params->conn_db)) + { $dsn .= "dbname={$params->conn_db}"; + } - if ( ! empty($params->host)) - { - $dsn .= ";host={$params->host}"; - } + if ( ! empty($params->host)) + { + $dsn .= ";host={$params->host}"; + } - if ( ! empty($params->port)) - { - $dsn .= ";port={$params->port}"; - } - - break; - - case "sqlite": - $dsn .= $params->file; - break; - - case "firebird": - $dsn = "{$params->host}:{$params->file}"; - break; + if ( ! empty($params->port)) + { + $dsn .= ";port={$params->port}"; + } } try diff --git a/docs/classes/BadConnectionException.html b/docs/classes/BadConnectionException.html index 3105189..4ec30af 100644 --- a/docs/classes/BadConnectionException.html +++ b/docs/classes/BadConnectionException.html @@ -90,7 +90,7 @@ Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:06-05:00.
diff --git a/docs/classes/BadDBDriverException.html b/docs/classes/BadDBDriverException.html index fd574f1..0c9f8cb 100644 --- a/docs/classes/BadDBDriverException.html +++ b/docs/classes/BadDBDriverException.html @@ -90,7 +90,7 @@ Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:05-05:00.
diff --git a/docs/classes/DB_PDO.html b/docs/classes/DB_PDO.html index dd7b36f..760bb57 100644 --- a/docs/classes/DB_PDO.html +++ b/docs/classes/DB_PDO.html @@ -522,7 +522,7 @@ the connection/database Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:05-05:00.
diff --git a/docs/classes/DB_Util.html b/docs/classes/DB_Util.html index 8663619..b6ae260 100644 --- a/docs/classes/DB_Util.html +++ b/docs/classes/DB_Util.html @@ -233,7 +233,7 @@ Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:05-05:00.
diff --git a/docs/classes/Firebird.html b/docs/classes/Firebird.html index 40f4176..3436bce 100644 --- a/docs/classes/Firebird.html +++ b/docs/classes/Firebird.html @@ -383,7 +383,7 @@ the last query executed Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:05-05:00.
diff --git a/docs/classes/Firebird_Result.html b/docs/classes/Firebird_Result.html index 7598025..5aa9179 100644 --- a/docs/classes/Firebird_Result.html +++ b/docs/classes/Firebird_Result.html @@ -386,7 +386,7 @@ the query Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:05-05:00.
diff --git a/docs/classes/Firebird_SQL.html b/docs/classes/Firebird_SQL.html index c997f5d..b598d87 100644 --- a/docs/classes/Firebird_SQL.html +++ b/docs/classes/Firebird_SQL.html @@ -262,7 +262,7 @@ Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:05-05:00.
diff --git a/docs/classes/Firebird_Util.html b/docs/classes/Firebird_Util.html index c74e2a0..f42698b 100644 --- a/docs/classes/Firebird_Util.html +++ b/docs/classes/Firebird_Util.html @@ -185,7 +185,7 @@ Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:05-05:00.
diff --git a/docs/classes/MySQL.html b/docs/classes/MySQL.html index df0cfd0..fe102a2 100644 --- a/docs/classes/MySQL.html +++ b/docs/classes/MySQL.html @@ -157,7 +157,7 @@ Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:06-05:00.
diff --git a/docs/classes/MySQL_SQL.html b/docs/classes/MySQL_SQL.html index cb96f73..318b8f6 100644 --- a/docs/classes/MySQL_SQL.html +++ b/docs/classes/MySQL_SQL.html @@ -267,7 +267,7 @@ Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:05-05:00.
diff --git a/docs/classes/MySQL_Util.html b/docs/classes/MySQL_Util.html index ad1748a..7f6e092 100644 --- a/docs/classes/MySQL_Util.html +++ b/docs/classes/MySQL_Util.html @@ -181,7 +181,7 @@ Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:05-05:00.
diff --git a/docs/classes/PgSQL.html b/docs/classes/PgSQL.html index 1fb2153..c06b0ea 100644 --- a/docs/classes/PgSQL.html +++ b/docs/classes/PgSQL.html @@ -147,7 +147,7 @@ Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:05-05:00.
diff --git a/docs/classes/PgSQL_SQL.html b/docs/classes/PgSQL_SQL.html index b8c2f1d..f3e409c 100644 --- a/docs/classes/PgSQL_SQL.html +++ b/docs/classes/PgSQL_SQL.html @@ -262,7 +262,7 @@ Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:05-05:00.
diff --git a/docs/classes/PgSQL_Util.html b/docs/classes/PgSQL_Util.html index 7b58b62..f98f08a 100644 --- a/docs/classes/PgSQL_Util.html +++ b/docs/classes/PgSQL_Util.html @@ -181,7 +181,7 @@ Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:05-05:00.
diff --git a/docs/classes/Query_Builder.html b/docs/classes/Query_Builder.html index ff4c95c..7608157 100644 --- a/docs/classes/Query_Builder.html +++ b/docs/classes/Query_Builder.html @@ -1523,7 +1523,7 @@ passed array with key / value pairs Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:05-05:00.
diff --git a/docs/classes/Query_Parser.html b/docs/classes/Query_Parser.html index 107aa4e..bde84f0 100644 --- a/docs/classes/Query_Parser.html +++ b/docs/classes/Query_Parser.html @@ -173,7 +173,7 @@ Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:06-05:00.
diff --git a/docs/classes/SQLite.html b/docs/classes/SQLite.html index f81235f..d84d3a3 100644 --- a/docs/classes/SQLite.html +++ b/docs/classes/SQLite.html @@ -195,7 +195,7 @@ Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:05-05:00.
diff --git a/docs/classes/SQLite_SQL.html b/docs/classes/SQLite_SQL.html index abf07ea..732595f 100644 --- a/docs/classes/SQLite_SQL.html +++ b/docs/classes/SQLite_SQL.html @@ -262,7 +262,7 @@ Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:05-05:00.
diff --git a/docs/classes/SQLite_Util.html b/docs/classes/SQLite_Util.html index 79930e7..412c851 100644 --- a/docs/classes/SQLite_Util.html +++ b/docs/classes/SQLite_Util.html @@ -177,7 +177,7 @@ Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:05-05:00.
diff --git a/docs/classes/iDB_SQL.html b/docs/classes/iDB_SQL.html index 0de2620..52620e9 100644 --- a/docs/classes/iDB_SQL.html +++ b/docs/classes/iDB_SQL.html @@ -273,7 +273,7 @@ specified table Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:06-05:00.
diff --git a/docs/classes/iQuery_Builder.html b/docs/classes/iQuery_Builder.html index c188bd1..811573c 100644 --- a/docs/classes/iQuery_Builder.html +++ b/docs/classes/iQuery_Builder.html @@ -992,7 +992,7 @@ passed array with key / value pairs Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:05-05:00.
diff --git a/docs/deprecated.html b/docs/deprecated.html index 5413e57..cbfcbd4 100644 --- a/docs/deprecated.html +++ b/docs/deprecated.html @@ -66,7 +66,7 @@ Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:06-05:00.
diff --git a/docs/errors.html b/docs/errors.html index fa71cd8..c80dd62 100644 --- a/docs/errors.html +++ b/docs/errors.html @@ -90,7 +90,7 @@ Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:06-05:00.
diff --git a/docs/graph_class.html b/docs/graph_class.html index 760471d..f9fef1c 100644 --- a/docs/graph_class.html +++ b/docs/graph_class.html @@ -63,7 +63,7 @@ Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:06-05:00.
diff --git a/docs/markers.html b/docs/markers.html index 823fc17..47ebc38 100644 --- a/docs/markers.html +++ b/docs/markers.html @@ -102,7 +102,7 @@ Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:06-05:00.
diff --git a/docs/namespaces/global.html b/docs/namespaces/global.html index bcd253b..ee83809 100644 --- a/docs/namespaces/global.html +++ b/docs/namespaces/global.html @@ -106,7 +106,7 @@ instantiates the specific db driver">Query_Builder Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:05-05:00.
diff --git a/docs/packages/Default.html b/docs/packages/Default.html index c35334d..73a847d 100644 --- a/docs/packages/Default.html +++ b/docs/packages/Default.html @@ -66,7 +66,7 @@ Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:05-05:00.
diff --git a/docs/packages/Query.Drivers.html b/docs/packages/Query.Drivers.html index 55331c7..6e60c75 100644 --- a/docs/packages/Query.Drivers.html +++ b/docs/packages/Query.Drivers.html @@ -185,7 +185,7 @@ data-fetching methods

Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:05-05:00.
diff --git a/docs/packages/Query.Query.html b/docs/packages/Query.Query.html index c8cac30..b36e4e2 100644 --- a/docs/packages/Query.Query.html +++ b/docs/packages/Query.Query.html @@ -147,7 +147,7 @@ instantiates the specific db driver

Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:05-05:00.
diff --git a/docs/packages/Query.html b/docs/packages/Query.html index 4282468..0c8ba11 100644 --- a/docs/packages/Query.html +++ b/docs/packages/Query.html @@ -368,7 +368,7 @@ instantiates the specific db driver

Template is built using Twitter Bootstrap 2 and icons provided by Glyphicons.
Documentation is powered by phpDocumentor 2.2.0 and
- generated on 2014-02-25T13:47:10-05:00.
+ generated on 2014-02-25T13:54:05-05:00.
diff --git a/docs/structure.xml b/docs/structure.xml index 30aa1b0..984b277 100644 --- a/docs/structure.xml +++ b/docs/structure.xml @@ -1,7 +1,7 @@ - + Query Free Query Builder / Database Abstraction Layer @@ -383,19 +383,19 @@ the connection/database - + driver_query \DB_PDO::driver_query() - + Method to simplify retreiving db results for meta-data queries - + string - + bool - + mixed @@ -410,28 +410,28 @@ the connection/database bool - + num_rows \DB_PDO::num_rows() - + Return the number of rows returned for a SELECT query - - + + int - + truncate \DB_PDO::truncate() - + Empty the passed table - + string - + void @@ -441,19 +441,19 @@ the connection/database string - + insert_batch \DB_PDO::insert_batch() - + Create sql for batch insert - + string - + array - + string @@ -469,7 +469,7 @@ the connection/database - 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