summaryrefslogtreecommitdiff
path: root/vendor/fguillot/picodb/lib/PicoDb
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/fguillot/picodb/lib/PicoDb')
-rw-r--r--vendor/fguillot/picodb/lib/PicoDb/Builder/BaseBuilder.php86
-rw-r--r--vendor/fguillot/picodb/lib/PicoDb/Builder/ConditionBuilder.php377
-rw-r--r--vendor/fguillot/picodb/lib/PicoDb/Builder/InsertBuilder.php36
-rw-r--r--vendor/fguillot/picodb/lib/PicoDb/Builder/OrConditionBuilder.php43
-rw-r--r--vendor/fguillot/picodb/lib/PicoDb/Builder/UpdateBuilder.php56
-rw-r--r--vendor/fguillot/picodb/lib/PicoDb/Database.php370
-rw-r--r--vendor/fguillot/picodb/lib/PicoDb/Driver/Base.php234
-rw-r--r--vendor/fguillot/picodb/lib/PicoDb/Driver/Mssql.php178
-rw-r--r--vendor/fguillot/picodb/lib/PicoDb/Driver/Mysql.php264
-rw-r--r--vendor/fguillot/picodb/lib/PicoDb/Driver/Postgres.php212
-rw-r--r--vendor/fguillot/picodb/lib/PicoDb/Driver/Sqlite.php199
-rw-r--r--vendor/fguillot/picodb/lib/PicoDb/DriverFactory.php45
-rw-r--r--vendor/fguillot/picodb/lib/PicoDb/Hashtable.php112
-rw-r--r--vendor/fguillot/picodb/lib/PicoDb/LargeObject.php167
-rw-r--r--vendor/fguillot/picodb/lib/PicoDb/SQLException.php15
-rw-r--r--vendor/fguillot/picodb/lib/PicoDb/Schema.php119
-rw-r--r--vendor/fguillot/picodb/lib/PicoDb/StatementHandler.php353
-rw-r--r--vendor/fguillot/picodb/lib/PicoDb/Table.php729
-rw-r--r--vendor/fguillot/picodb/lib/PicoDb/UrlParser.php93
19 files changed, 0 insertions, 3688 deletions
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Builder/BaseBuilder.php b/vendor/fguillot/picodb/lib/PicoDb/Builder/BaseBuilder.php
deleted file mode 100644
index e075ae3c..00000000
--- a/vendor/fguillot/picodb/lib/PicoDb/Builder/BaseBuilder.php
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-
-namespace PicoDb\Builder;
-
-use PicoDb\Database;
-
-/**
- * Class InsertBuilder
- *
- * @package PicoDb\Builder
- * @author Frederic Guillot
- */
-abstract class BaseBuilder
-{
- /**
- * @var Database
- */
- protected $db;
-
- /**
- * @var ConditionBuilder
- */
- protected $conditionBuilder;
-
- /**
- * @var string
- */
- protected $table = '';
-
- /**
- * @var string[]
- */
- protected $columns = array();
-
- /**
- * InsertBuilder constructor
- *
- * @param Database $db
- * @param ConditionBuilder $condition
- */
- public function __construct(Database $db, ConditionBuilder $condition)
- {
- $this->db = $db;
- $this->conditionBuilder = $condition;
- }
-
- /**
- * Get object instance
- *
- * @static
- * @access public
- * @param Database $db
- * @param ConditionBuilder $condition
- * @return static
- */
- public static function getInstance(Database $db, ConditionBuilder $condition)
- {
- return new static($db, $condition);
- }
-
- /**
- * Set table name
- *
- * @access public
- * @param string $table
- * @return $this
- */
- public function withTable($table)
- {
- $this->table = $table;
- return $this;
- }
-
- /**
- * Set columns name
- *
- * @access public
- * @param string[] $columns
- * @return $this
- */
- public function withColumns(array $columns)
- {
- $this->columns = $columns;
- return $this;
- }
-}
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Builder/ConditionBuilder.php b/vendor/fguillot/picodb/lib/PicoDb/Builder/ConditionBuilder.php
deleted file mode 100644
index b0465b6e..00000000
--- a/vendor/fguillot/picodb/lib/PicoDb/Builder/ConditionBuilder.php
+++ /dev/null
@@ -1,377 +0,0 @@
-<?php
-
-namespace PicoDb\Builder;
-
-use PicoDb\Database;
-use PicoDb\Table;
-
-/**
- * Handle SQL conditions
- *
- * @package PicoDb\Builder
- * @author Frederic Guillot
- */
-class ConditionBuilder
-{
- /**
- * Database instance
- *
- * @access private
- * @var Database
- */
- private $db;
-
- /**
- * Condition values
- *
- * @access private
- * @var array
- */
- private $values = array();
-
- /**
- * SQL AND conditions
- *
- * @access private
- * @var string[]
- */
- private $conditions = array();
-
- /**
- * SQL OR conditions
- *
- * @access private
- * @var OrConditionBuilder[]
- */
- private $orConditions = array();
-
- /**
- * SQL condition offset
- *
- * @access private
- * @var int
- */
- private $orConditionOffset = 0;
-
- /**
- * Constructor
- *
- * @access public
- * @param Database $db
- */
- public function __construct(Database $db)
- {
- $this->db = $db;
- }
-
- /**
- * Build the SQL condition
- *
- * @access public
- * @return string
- */
- public function build()
- {
- return empty($this->conditions) ? '' : ' WHERE '.implode(' AND ', $this->conditions);
- }
-
- /**
- * Get condition values
- *
- * @access public
- * @return array
- */
- public function getValues()
- {
- return $this->values;
- }
-
- /**
- * Returns true if there is some conditions
- *
- * @access public
- * @return boolean
- */
- public function hasCondition()
- {
- return ! empty($this->conditions);
- }
-
- /**
- * Add custom condition
- *
- * @access public
- * @param string $sql
- */
- public function addCondition($sql)
- {
- if ($this->orConditionOffset > 0) {
- $this->orConditions[$this->orConditionOffset]->withCondition($sql);
- }
- else {
- $this->conditions[] = $sql;
- }
- }
-
- /**
- * Start OR condition
- *
- * @access public
- */
- public function beginOr()
- {
- $this->orConditionOffset++;
- $this->orConditions[$this->orConditionOffset] = new OrConditionBuilder();
- }
-
- /**
- * Close OR condition
- *
- * @access public
- */
- public function closeOr()
- {
- $condition = $this->orConditions[$this->orConditionOffset]->build();
- $this->orConditionOffset--;
-
- if ($this->orConditionOffset > 0) {
- $this->orConditions[$this->orConditionOffset]->withCondition($condition);
- } else {
- $this->conditions[] = $condition;
- }
- }
-
- /**
- * Equal condition
- *
- * @access public
- * @param string $column
- * @param mixed $value
- */
- public function eq($column, $value)
- {
- $this->addCondition($this->db->escapeIdentifier($column).' = ?');
- $this->values[] = $value;
- }
-
- /**
- * Not equal condition
- *
- * @access public
- * @param string $column
- * @param mixed $value
- */
- public function neq($column, $value)
- {
- $this->addCondition($this->db->escapeIdentifier($column).' != ?');
- $this->values[] = $value;
- }
-
- /**
- * IN condition
- *
- * @access public
- * @param string $column
- * @param array $values
- */
- public function in($column, array $values)
- {
- if (! empty($values)) {
- $this->addCondition($this->db->escapeIdentifier($column).' IN ('.implode(', ', array_fill(0, count($values), '?')).')');
- $this->values = array_merge($this->values, $values);
- }
- }
-
- /**
- * IN condition with a subquery
- *
- * @access public
- * @param string $column
- * @param Table $subquery
- */
- public function inSubquery($column, Table $subquery)
- {
- $this->addCondition($this->db->escapeIdentifier($column).' IN ('.$subquery->buildSelectQuery().')');
- $this->values = array_merge($this->values, $subquery->getConditionBuilder()->getValues());
- }
-
- /**
- * NOT IN condition
- *
- * @access public
- * @param string $column
- * @param array $values
- */
- public function notIn($column, array $values)
- {
- if (! empty($values)) {
- $this->addCondition($this->db->escapeIdentifier($column).' NOT IN ('.implode(', ', array_fill(0, count($values), '?')).')');
- $this->values = array_merge($this->values, $values);
- }
- }
-
- /**
- * NOT IN condition with a subquery
- *
- * @access public
- * @param string $column
- * @param Table $subquery
- */
- public function notInSubquery($column, Table $subquery)
- {
- $this->addCondition($this->db->escapeIdentifier($column).' NOT IN ('.$subquery->buildSelectQuery().')');
- $this->values = array_merge($this->values, $subquery->getConditionBuilder()->getValues());
- }
-
- /**
- * LIKE condition
- *
- * @access public
- * @param string $column
- * @param mixed $value
- */
- public function like($column, $value)
- {
- $this->addCondition($this->db->escapeIdentifier($column).' '.$this->db->getDriver()->getOperator('LIKE').' ?');
- $this->values[] = $value;
- }
-
- /**
- * ILIKE condition
- *
- * @access public
- * @param string $column
- * @param mixed $value
- */
- public function ilike($column, $value)
- {
- $this->addCondition($this->db->escapeIdentifier($column).' '.$this->db->getDriver()->getOperator('ILIKE').' ?');
- $this->values[] = $value;
- }
-
- /**
- * Greater than condition
- *
- * @access public
- * @param string $column
- * @param mixed $value
- */
- public function gt($column, $value)
- {
- $this->addCondition($this->db->escapeIdentifier($column).' > ?');
- $this->values[] = $value;
- }
-
- /**
- * Greater than condition with subquery
- *
- * @access public
- * @param string $column
- * @param Table $subquery
- */
- public function gtSubquery($column, Table $subquery)
- {
- $this->addCondition($this->db->escapeIdentifier($column).' > ('.$subquery->buildSelectQuery().')');
- $this->values = array_merge($this->values, $subquery->getConditionBuilder()->getValues());
- }
-
- /**
- * Lower than condition
- *
- * @access public
- * @param string $column
- * @param mixed $value
- */
- public function lt($column, $value)
- {
- $this->addCondition($this->db->escapeIdentifier($column).' < ?');
- $this->values[] = $value;
- }
-
- /**
- * Lower than condition with subquery
- *
- * @access public
- * @param string $column
- * @param Table $subquery
- */
- public function ltSubquery($column, Table $subquery)
- {
- $this->addCondition($this->db->escapeIdentifier($column).' < ('.$subquery->buildSelectQuery().')');
- $this->values = array_merge($this->values, $subquery->getConditionBuilder()->getValues());
- }
-
- /**
- * Greater than or equals condition
- *
- * @access public
- * @param string $column
- * @param mixed $value
- */
- public function gte($column, $value)
- {
- $this->addCondition($this->db->escapeIdentifier($column).' >= ?');
- $this->values[] = $value;
- }
-
- /**
- * Greater than or equal condition with subquery
- *
- * @access public
- * @param string $column
- * @param Table $subquery
- */
- public function gteSubquery($column, Table $subquery)
- {
- $this->addCondition($this->db->escapeIdentifier($column).' >= ('.$subquery->buildSelectQuery().')');
- $this->values = array_merge($this->values, $subquery->getConditionBuilder()->getValues());
- }
-
- /**
- * Lower than or equals condition
- *
- * @access public
- * @param string $column
- * @param mixed $value
- */
- public function lte($column, $value)
- {
- $this->addCondition($this->db->escapeIdentifier($column).' <= ?');
- $this->values[] = $value;
- }
-
- /**
- * Lower than or equal condition with subquery
- *
- * @access public
- * @param string $column
- * @param Table $subquery
- */
- public function lteSubquery($column, Table $subquery)
- {
- $this->addCondition($this->db->escapeIdentifier($column).' <= ('.$subquery->buildSelectQuery().')');
- $this->values = array_merge($this->values, $subquery->getConditionBuilder()->getValues());
- }
-
- /**
- * IS NULL condition
- *
- * @access public
- * @param string $column
- */
- public function isNull($column)
- {
- $this->addCondition($this->db->escapeIdentifier($column).' IS NULL');
- }
-
- /**
- * IS NOT NULL condition
- *
- * @access public
- * @param string $column
- */
- public function notNull($column)
- {
- $this->addCondition($this->db->escapeIdentifier($column).' IS NOT NULL');
- }
-}
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Builder/InsertBuilder.php b/vendor/fguillot/picodb/lib/PicoDb/Builder/InsertBuilder.php
deleted file mode 100644
index 9d06c405..00000000
--- a/vendor/fguillot/picodb/lib/PicoDb/Builder/InsertBuilder.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-namespace PicoDb\Builder;
-
-/**
- * Class InsertBuilder
- *
- * @package PicoDb\Builder
- * @author Frederic Guillot
- */
-class InsertBuilder extends BaseBuilder
-{
- /**
- * Build SQL
- *
- * @access public
- * @return string
- */
- public function build()
- {
- $columns = array();
- $placeholders = array();
-
- foreach ($this->columns as $column) {
- $columns[] = $this->db->escapeIdentifier($column);
- $placeholders[] = ':'.$column;
- }
-
- return sprintf(
- 'INSERT INTO %s (%s) VALUES (%s)',
- $this->db->escapeIdentifier($this->table),
- implode(', ', $columns),
- implode(', ', $placeholders)
- );
- }
-}
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Builder/OrConditionBuilder.php b/vendor/fguillot/picodb/lib/PicoDb/Builder/OrConditionBuilder.php
deleted file mode 100644
index 0defeaf4..00000000
--- a/vendor/fguillot/picodb/lib/PicoDb/Builder/OrConditionBuilder.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-
-namespace PicoDb\Builder;
-
-/**
- * Class OrConditionBuilder
- *
- * @package PicoDb\Builder
- * @author Frederic Guillot
- */
-class OrConditionBuilder
-{
- /**
- * List of SQL conditions
- *
- * @access protected
- * @var string[]
- */
- protected $conditions = array();
-
- /**
- * Add new condition
- *
- * @access public
- * @param string $condition
- * @return $this
- */
- public function withCondition($condition) {
- $this->conditions[] = $condition;
- return $this;
- }
-
- /**
- * Build SQL
- *
- * @access public
- * @return string
- */
- public function build()
- {
- return '('.implode(' OR ', $this->conditions).')';
- }
-}
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Builder/UpdateBuilder.php b/vendor/fguillot/picodb/lib/PicoDb/Builder/UpdateBuilder.php
deleted file mode 100644
index 300ea9b0..00000000
--- a/vendor/fguillot/picodb/lib/PicoDb/Builder/UpdateBuilder.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-
-namespace PicoDb\Builder;
-
-/**
- * Class UpdateBuilder
- *
- * @package PicoDb\Builder
- * @author Frederic Guillot
- */
-class UpdateBuilder extends BaseBuilder
-{
- /**
- * @var string[]
- */
- protected $sumColumns = array();
-
- /**
- * Set columns name
- *
- * @access public
- * @param string[] $columns
- * @return $this
- */
- public function withSumColumns(array $columns)
- {
- $this->sumColumns = $columns;
- return $this;
- }
-
- /**
- * Build SQL
- *
- * @access public
- * @return string
- */
- public function build()
- {
- $columns = array();
-
- foreach ($this->columns as $column) {
- $columns[] = $this->db->escapeIdentifier($column).'=?';
- }
-
- foreach ($this->sumColumns as $column) {
- $columns[] = $this->db->escapeIdentifier($column).'='.$this->db->escapeIdentifier($column).' + ?';
- }
-
- return sprintf(
- 'UPDATE %s SET %s %s',
- $this->db->escapeIdentifier($this->table),
- implode(', ', $columns),
- $this->conditionBuilder->build()
- );
- }
-}
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Database.php b/vendor/fguillot/picodb/lib/PicoDb/Database.php
deleted file mode 100644
index 22c9d2fb..00000000
--- a/vendor/fguillot/picodb/lib/PicoDb/Database.php
+++ /dev/null
@@ -1,370 +0,0 @@
-<?php
-
-namespace PicoDb;
-
-use Closure;
-use PDOException;
-use LogicException;
-use PicoDb\Driver\Mssql;
-use PicoDb\Driver\Sqlite;
-use PicoDb\Driver\Mysql;
-use PicoDb\Driver\Postgres;
-
-/**
- * Database
- *
- * @package PicoDb
- * @author Frederic Guillot
- */
-class Database
-{
- /**
- * Database instances
- *
- * @static
- * @access private
- * @var array
- */
- private static $instances = array();
-
- /**
- * Statement object
- *
- * @access protected
- * @var StatementHandler
- */
- protected $statementHandler;
-
- /**
- * Queries logs
- *
- * @access private
- * @var array
- */
- private $logs = array();
-
- /**
- * Driver instance
- *
- * @access private
- */
- private $driver;
-
- /**
- * Initialize the driver
- *
- * @access public
- * @param array $settings
- */
- public function __construct(array $settings = array())
- {
- $this->driver = DriverFactory::getDriver($settings);
- $this->statementHandler = new StatementHandler($this);
- }
-
- /**
- * Destructor
- *
- * @access public
- */
- public function __destruct()
- {
- $this->closeConnection();
- }
-
- /**
- * Register a new database instance
- *
- * @static
- * @access public
- * @param string $name Instance name
- * @param Closure $callback Callback
- */
- public static function setInstance($name, Closure $callback)
- {
- self::$instances[$name] = $callback;
- }
-
- /**
- * Get a database instance
- *
- * @static
- * @access public
- * @param string $name Instance name
- * @return Database
- */
- public static function getInstance($name)
- {
- if (! isset(self::$instances[$name])) {
- throw new LogicException('No database instance created with that name');
- }
-
- if (is_callable(self::$instances[$name])) {
- self::$instances[$name] = call_user_func(self::$instances[$name]);
- }
-
- return self::$instances[$name];
- }
-
- /**
- * Add a log message
- *
- * @access public
- * @param mixed $message
- * @return Database
- */
- public function setLogMessage($message)
- {
- $this->logs[] = is_array($message) ? var_export($message, true) : $message;
- return $this;
- }
-
- /**
- * Add many log messages
- *
- * @access public
- * @param array $messages
- * @return Database
- */
- public function setLogMessages(array $messages)
- {
- foreach ($messages as $message) {
- $this->setLogMessage($message);
- }
-
- return $this;
- }
-
- /**
- * Get all queries logs
- *
- * @access public
- * @return array
- */
- public function getLogMessages()
- {
- return $this->logs;
- }
-
- /**
- * Get the PDO connection
- *
- * @access public
- * @return \PDO
- */
- public function getConnection()
- {
- return $this->driver->getConnection();
- }
-
- /**
- * Get the Driver instance
- *
- * @access public
- * @return Mssql|Sqlite|Postgres|Mysql
- */
- public function getDriver()
- {
- return $this->driver;
- }
-
- /**
- * Get the last inserted id
- *
- * @access public
- * @return integer
- */
- public function getLastId()
- {
- return (int) $this->driver->getLastId();
- }
-
- /**
- * Get statement object
- *
- * @access public
- * @return StatementHandler
- */
- public function getStatementHandler()
- {
- return $this->statementHandler;
- }
-
- /**
- * Release the PDO connection
- *
- * @access public
- */
- public function closeConnection()
- {
- $this->driver->closeConnection();
- }
-
- /**
- * Escape an identifier (column, table name...)
- *
- * @access public
- * @param string $value Value
- * @param string $table Table name
- * @return string
- */
- public function escapeIdentifier($value, $table = '')
- {
- // Do not escape custom query
- if (strpos($value, '.') !== false || strpos($value, ' ') !== false) {
- return $value;
- }
-
- if (! empty($table)) {
- return $this->driver->escape($table).'.'.$this->driver->escape($value);
- }
-
- return $this->driver->escape($value);
- }
-
- /**
- * Escape an identifier list
- *
- * @access public
- * @param array $identifiers List of identifiers
- * @param string $table Table name
- * @return string[]
- */
- public function escapeIdentifierList(array $identifiers, $table = '')
- {
- foreach ($identifiers as $key => $value) {
- $identifiers[$key] = $this->escapeIdentifier($value, $table);
- }
-
- return $identifiers;
- }
-
- /**
- * Execute a prepared statement
- *
- * Note: returns false on duplicate keys instead of SQLException
- *
- * @access public
- * @param string $sql SQL query
- * @param array $values Values
- * @return \PDOStatement|false
- */
- public function execute($sql, array $values = array())
- {
- return $this->statementHandler
- ->withSql($sql)
- ->withPositionalParams($values)
- ->execute();
- }
-
- /**
- * Run a transaction
- *
- * @access public
- * @param Closure $callback Callback
- * @return mixed
- */
- public function transaction(Closure $callback)
- {
- try {
-
- $this->startTransaction();
- $result = $callback($this);
- $this->closeTransaction();
-
- return $result === null ? true : $result;
- } catch (PDOException $e) {
- return $this->statementHandler->handleSqlError($e);
- }
- }
-
- /**
- * Begin a transaction
- *
- * @access public
- */
- public function startTransaction()
- {
- if (! $this->getConnection()->inTransaction()) {
- $this->getConnection()->beginTransaction();
- }
- }
-
- /**
- * Commit a transaction
- *
- * @access public
- */
- public function closeTransaction()
- {
- if ($this->getConnection()->inTransaction()) {
- $this->getConnection()->commit();
- }
- }
-
- /**
- * Rollback a transaction
- *
- * @access public
- */
- public function cancelTransaction()
- {
- if ($this->getConnection()->inTransaction()) {
- $this->getConnection()->rollBack();
- }
- }
-
- /**
- * Get a table object
- *
- * @access public
- * @param string $table
- * @return Table
- */
- public function table($table)
- {
- return new Table($this, $table);
- }
-
- /**
- * Get a hashtable object
- *
- * @access public
- * @param string $table
- * @return Hashtable
- */
- public function hashtable($table)
- {
- return new Hashtable($this, $table);
- }
-
- /**
- * Get a LOB object
- *
- * @access public
- * @param string $table
- * @return LargeObject
- */
- public function largeObject($table)
- {
- return new LargeObject($this, $table);
- }
-
- /**
- * Get a schema object
- *
- * @access public
- * @param string $namespace
- * @return Schema
- */
- public function schema($namespace = null)
- {
- $schema = new Schema($this);
-
- if ($namespace !== null) {
- $schema->setNamespace($namespace);
- }
-
- return $schema;
- }
-}
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Driver/Base.php b/vendor/fguillot/picodb/lib/PicoDb/Driver/Base.php
deleted file mode 100644
index 790cd623..00000000
--- a/vendor/fguillot/picodb/lib/PicoDb/Driver/Base.php
+++ /dev/null
@@ -1,234 +0,0 @@
-<?php
-
-namespace PicoDb\Driver;
-
-use PDO;
-use LogicException;
-use PDOException;
-
-/**
- * Base Driver class
- *
- * @package PicoDb\Driver
- * @author Frederic Guillot
- */
-abstract class Base
-{
- /**
- * List of required settings options
- *
- * @access protected
- * @var array
- */
- protected $requiredAttributes = array();
-
- /**
- * PDO connection
- *
- * @access protected
- * @var PDO
- */
- protected $pdo = null;
-
- /**
- * Create a new PDO connection
- *
- * @abstract
- * @access public
- * @param array $settings
- */
- abstract public function createConnection(array $settings);
-
- /**
- * Enable foreign keys
- *
- * @abstract
- * @access public
- */
- abstract public function enableForeignKeys();
-
- /**
- * Disable foreign keys
- *
- * @abstract
- * @access public
- */
- abstract public function disableForeignKeys();
-
- /**
- * Return true if the error code is a duplicate key
- *
- * @abstract
- * @access public
- * @param integer $code
- * @return boolean
- */
- abstract public function isDuplicateKeyError($code);
-
- /**
- * Escape identifier
- *
- * @abstract
- * @access public
- * @param string $identifier
- * @return string
- */
- abstract public function escape($identifier);
-
- /**
- * Get non standard operator
- *
- * @abstract
- * @access public
- * @param string $operator
- * @return string
- */
- abstract public function getOperator($operator);
-
- /**
- * Get last inserted id
- *
- * @abstract
- * @access public
- * @return integer
- */
- abstract public function getLastId();
-
- /**
- * Get current schema version
- *
- * @abstract
- * @access public
- * @return integer
- */
- abstract public function getSchemaVersion();
-
- /**
- * Set current schema version
- *
- * @abstract
- * @access public
- * @param integer $version
- */
- abstract public function setSchemaVersion($version);
-
- /**
- * Constructor
- *
- * @access public
- * @param array $settings
- */
- public function __construct(array $settings)
- {
- foreach ($this->requiredAttributes as $attribute) {
- if (! isset($settings[$attribute])) {
- throw new LogicException('This configuration parameter is missing: "'.$attribute.'"');
- }
- }
-
- $this->createConnection($settings);
- $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
- }
-
- /**
- * Get the PDO connection
- *
- * @access public
- * @return PDO
- */
- public function getConnection()
- {
- return $this->pdo;
- }
-
- /**
- * Release the PDO connection
- *
- * @access public
- */
- public function closeConnection()
- {
- $this->pdo = null;
- }
-
- /**
- * Upsert for a key/value variable
- *
- * @access public
- * @param string $table
- * @param string $keyColumn
- * @param string $valueColumn
- * @param array $dictionary
- * @return bool False on failure
- */
- public function upsert($table, $keyColumn, $valueColumn, array $dictionary)
- {
- try {
- $this->pdo->beginTransaction();
-
- foreach ($dictionary as $key => $value) {
-
- $rq = $this->pdo->prepare('SELECT 1 FROM '.$this->escape($table).' WHERE '.$this->escape($keyColumn).'=?');
- $rq->execute(array($key));
-
- if ($rq->fetchColumn()) {
- $rq = $this->pdo->prepare('UPDATE '.$this->escape($table).' SET '.$this->escape($valueColumn).'=? WHERE '.$this->escape($keyColumn).'=?');
- $rq->execute(array($value, $key));
- }
- else {
- $rq = $this->pdo->prepare('INSERT INTO '.$this->escape($table).' ('.$this->escape($keyColumn).', '.$this->escape($valueColumn).') VALUES (?, ?)');
- $rq->execute(array($key, $value));
- }
- }
-
- $this->pdo->commit();
-
- return true;
- }
- catch (PDOException $e) {
- $this->pdo->rollBack();
- return false;
- }
- }
-
- /**
- * Run EXPLAIN command
- *
- * @access public
- * @param string $sql
- * @param array $values
- * @return array
- */
- public function explain($sql, array $values)
- {
- return $this->getConnection()->query('EXPLAIN '.$this->getSqlFromPreparedStatement($sql, $values))->fetchAll(PDO::FETCH_ASSOC);
- }
-
- /**
- * Replace placeholder with values in prepared statement
- *
- * @access protected
- * @param string $sql
- * @param array $values
- * @return string
- */
- protected function getSqlFromPreparedStatement($sql, array $values)
- {
- foreach ($values as $value) {
- $sql = substr_replace($sql, "'$value'", strpos($sql, '?'), 1);
- }
-
- return $sql;
- }
-
- /**
- * Get database version
- *
- * @access public
- * @return array
- */
- public function getDatabaseVersion()
- {
- return $this->getConnection()->query('SELECT VERSION()')->fetchColumn();
- }
-}
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Driver/Mssql.php b/vendor/fguillot/picodb/lib/PicoDb/Driver/Mssql.php
deleted file mode 100644
index 83e75af2..00000000
--- a/vendor/fguillot/picodb/lib/PicoDb/Driver/Mssql.php
+++ /dev/null
@@ -1,178 +0,0 @@
-<?php
-
-namespace PicoDb\Driver;
-
-use PDO;
-
-/**
- * Microsoft SQL Server Driver
- *
- * @package PicoDb\Driver
- * @author Algy Taylor <thomas.taylor@cmft.nhs.uk>
- */
-class Mssql extends Base
-{
- /**
- * List of required settings options
- *
- * @access protected
- * @var array
- */
- protected $requiredAttributes = array(
- 'hostname',
- 'username',
- 'password',
- 'database',
- );
-
- /**
- * Table to store the schema version
- *
- * @access private
- * @var array
- */
- private $schemaTable = 'schema_version';
-
- /**
- * Create a new PDO connection
- *
- * @access public
- * @param array $settings
- */
- public function createConnection(array $settings)
- {
- $dsn = 'sqlsrv:Server=' . $settings['hostname'] . ';Database=' . $settings['database'];
-
- if (! empty($settings['port'])) {
- $dsn .= ';port=' . $settings['port'];
- }
-
- $this->pdo = new PDO($dsn, $settings['username'], $settings['password']);
-
- if (isset($settings['schema_table'])) {
- $this->schemaTable = $settings['schema_table'];
- }
- }
-
- /**
- * Enable foreign keys
- *
- * @access public
- */
- public function enableForeignKeys()
- {
- $this->pdo->exec('EXEC sp_MSforeachtable @command1="ALTER TABLE ? CHECK CONSTRAINT ALL"; GO;');
- }
-
- /**
- * Disable foreign keys
- *
- * @access public
- */
- public function disableForeignKeys()
- {
- $this->pdo->exec('EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"; GO;');
- }
-
- /**
- * Return true if the error code is a duplicate key
- *
- * @access public
- * @param integer $code
- * @return boolean
- */
- public function isDuplicateKeyError($code)
- {
- return $code == 2601;
- }
-
- /**
- * Escape identifier
- *
- * https://msdn.microsoft.com/en-us/library/ms175874.aspx
- *
- * @access public
- * @param string $identifier
- * @return string
- */
- public function escape($identifier)
- {
- return '['.$identifier.']';
- }
-
- /**
- * Get non standard operator
- *
- * @access public
- * @param string $operator
- * @return string
- */
- public function getOperator($operator)
- {
- if ($operator === 'LIKE' || $operator === 'ILIKE') {
- return 'LIKE';
- }
-
- return '';
- }
-
- /**
- * Get last inserted id
- *
- * @access public
- * @return integer
- */
- public function getLastId()
- {
- return $this->pdo->lastInsertId();
- }
-
- /**
- * Get current schema version
- *
- * @access public
- * @return integer
- */
- public function getSchemaVersion()
- {
- $this->pdo->exec("CREATE TABLE IF NOT EXISTS [".$this->schemaTable."] ([version] INT DEFAULT '0')");
-
- $rq = $this->pdo->prepare('SELECT [version] FROM ['.$this->schemaTable.']');
- $rq->execute();
- $result = $rq->fetchColumn();
-
- if ($result !== false) {
- return (int) $result;
- }
- else {
- $this->pdo->exec('INSERT INTO ['.$this->schemaTable.'] VALUES(0)');
- }
-
- return 0;
- }
-
- /**
- * Set current schema version
- *
- * @access public
- * @param integer $version
- */
- public function setSchemaVersion($version)
- {
- $rq = $this->pdo->prepare('UPDATE ['.$this->schemaTable.'] SET [version]=?');
- $rq->execute(array($version));
- }
-
- /**
- * Run EXPLAIN command
- *
- * @param string $sql
- * @param array $values
- * @return array
- */
- public function explain($sql, array $values)
- {
- $this->getConnection()->exec('SET SHOWPLAN_ALL ON');
- return $this->getConnection()->query($this->getSqlFromPreparedStatement($sql, $values))->fetchAll(PDO::FETCH_ASSOC);
- }
-}
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Driver/Mysql.php b/vendor/fguillot/picodb/lib/PicoDb/Driver/Mysql.php
deleted file mode 100644
index 17f44057..00000000
--- a/vendor/fguillot/picodb/lib/PicoDb/Driver/Mysql.php
+++ /dev/null
@@ -1,264 +0,0 @@
-<?php
-
-namespace PicoDb\Driver;
-
-use PDO;
-use PDOException;
-
-/**
- * Mysql Driver
- *
- * @package PicoDb\Driver
- * @author Frederic Guillot
- */
-class Mysql extends Base
-{
- /**
- * List of required settings options
- *
- * @access protected
- * @var array
- */
- protected $requiredAttributes = array(
- 'hostname',
- 'username',
- 'password',
- 'database',
- );
-
- /**
- * Table to store the schema version
- *
- * @access private
- * @var array
- */
- private $schemaTable = 'schema_version';
-
- /**
- * Create a new PDO connection
- *
- * @access public
- * @param array $settings
- */
- public function createConnection(array $settings)
- {
- $this->pdo = new PDO(
- $this->buildDsn($settings),
- $settings['username'],
- $settings['password'],
- $this->buildOptions($settings)
- );
-
- if (isset($settings['schema_table'])) {
- $this->schemaTable = $settings['schema_table'];
- }
- }
-
- /**
- * Build connection DSN
- *
- * @access protected
- * @param array $settings
- * @return string
- */
- protected function buildDsn(array $settings)
- {
- $charset = empty($settings['charset']) ? 'utf8' : $settings['charset'];
- $dsn = 'mysql:host='.$settings['hostname'].';dbname='.$settings['database'].';charset='.$charset;
-
- if (! empty($settings['port'])) {
- $dsn .= ';port='.$settings['port'];
- }
-
- return $dsn;
- }
-
- /**
- * Build connection options
- *
- * @access protected
- * @param array $settings
- * @return array
- */
- protected function buildOptions(array $settings)
- {
- $options = array(
- PDO::MYSQL_ATTR_INIT_COMMAND => 'SET sql_mode = STRICT_ALL_TABLES',
- );
-
- if (! empty($settings['ssl_key'])) {
- $options[PDO::MYSQL_ATTR_SSL_KEY] = $settings['ssl_key'];
- }
-
- if (! empty($settings['ssl_cert'])) {
- $options[PDO::MYSQL_ATTR_SSL_CERT] = $settings['ssl_cert'];
- }
-
- if (! empty($settings['ssl_ca'])) {
- $options[PDO::MYSQL_ATTR_SSL_CA] = $settings['ssl_ca'];
- }
-
- if (! empty($settings['persistent'])) {
- $options[PDO::ATTR_PERSISTENT] = $settings['persistent'];
- }
-
- if (! empty($settings['timeout'])) {
- $options[PDO::ATTR_TIMEOUT] = $settings['timeout'];
- }
-
- if (isset($settings['verify_server_cert'])) {
- $options[PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT] = $settings['verify_server_cert'];
- }
-
- return $options;
- }
-
- /**
- * Enable foreign keys
- *
- * @access public
- */
- public function enableForeignKeys()
- {
- $this->pdo->exec('SET FOREIGN_KEY_CHECKS=1');
- }
-
- /**
- * Disable foreign keys
- *
- * @access public
- */
- public function disableForeignKeys()
- {
- $this->pdo->exec('SET FOREIGN_KEY_CHECKS=0');
- }
-
- /**
- * Return true if the error code is a duplicate key
- *
- * @access public
- * @param integer $code
- * @return boolean
- */
- public function isDuplicateKeyError($code)
- {
- return $code == 23000;
- }
-
- /**
- * Escape identifier
- *
- * @access public
- * @param string $identifier
- * @return string
- */
- public function escape($identifier)
- {
- return '`'.$identifier.'`';
- }
-
- /**
- * Get non standard operator
- *
- * @access public
- * @param string $operator
- * @return string
- */
- public function getOperator($operator)
- {
- if ($operator === 'LIKE') {
- return 'LIKE BINARY';
- }
- else if ($operator === 'ILIKE') {
- return 'LIKE';
- }
-
- return '';
- }
-
- /**
- * Get last inserted id
- *
- * @access public
- * @return integer
- */
- public function getLastId()
- {
- return $this->pdo->lastInsertId();
- }
-
- /**
- * Get current schema version
- *
- * @access public
- * @return integer
- */
- public function getSchemaVersion()
- {
- $this->pdo->exec("CREATE TABLE IF NOT EXISTS `".$this->schemaTable."` (`version` INT DEFAULT '0') ENGINE=InnoDB CHARSET=utf8");
-
- $rq = $this->pdo->prepare('SELECT `version` FROM `'.$this->schemaTable.'`');
- $rq->execute();
- $result = $rq->fetchColumn();
-
- if ($result !== false) {
- return (int) $result;
- }
- else {
- $this->pdo->exec('INSERT INTO `'.$this->schemaTable.'` VALUES(0)');
- }
-
- return 0;
- }
-
- /**
- * Set current schema version
- *
- * @access public
- * @param integer $version
- */
- public function setSchemaVersion($version)
- {
- $rq = $this->pdo->prepare('UPDATE `'.$this->schemaTable.'` SET `version`=?');
- $rq->execute(array($version));
- }
-
- /**
- * Upsert for a key/value variable
- *
- * @access public
- * @param string $table
- * @param string $keyColumn
- * @param string $valueColumn
- * @param array $dictionary
- * @return bool False on failure
- */
- public function upsert($table, $keyColumn, $valueColumn, array $dictionary)
- {
- try {
-
- $sql = sprintf(
- 'REPLACE INTO %s (%s, %s) VALUES %s',
- $this->escape($table),
- $this->escape($keyColumn),
- $this->escape($valueColumn),
- implode(', ', array_fill(0, count($dictionary), '(?, ?)'))
- );
-
- $values = array();
-
- foreach ($dictionary as $key => $value) {
- $values[] = $key;
- $values[] = $value;
- }
-
- $rq = $this->pdo->prepare($sql);
- $rq->execute($values);
-
- return true;
- }
- catch (PDOException $e) {
- return false;
- }
- }
-}
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Driver/Postgres.php b/vendor/fguillot/picodb/lib/PicoDb/Driver/Postgres.php
deleted file mode 100644
index 86036839..00000000
--- a/vendor/fguillot/picodb/lib/PicoDb/Driver/Postgres.php
+++ /dev/null
@@ -1,212 +0,0 @@
-<?php
-
-namespace PicoDb\Driver;
-
-use PDO;
-use PDOException;
-
-/**
- * Postgres Driver
- *
- * @package PicoDb\Driver
- * @author Frederic Guillot
- */
-class Postgres extends Base
-{
- /**
- * List of required settings options
- *
- * @access protected
- * @var array
- */
- protected $requiredAttributes = array(
- 'database',
- );
-
- /**
- * Table to store the schema version
- *
- * @access private
- * @var array
- */
- private $schemaTable = 'schema_version';
-
- /**
- * Create a new PDO connection
- *
- * @access public
- * @param array $settings
- */
- public function createConnection(array $settings)
- {
- $dsn = 'pgsql:dbname='.$settings['database'];
- $username = null;
- $password = null;
- $options = array();
-
- if (! empty($settings['username'])) {
- $username = $settings['username'];
- }
-
- if (! empty($settings['password'])) {
- $password = $settings['password'];
- }
-
- if (! empty($settings['hostname'])) {
- $dsn .= ';host='.$settings['hostname'];
- }
-
- if (! empty($settings['port'])) {
- $dsn .= ';port='.$settings['port'];
- }
-
- if (! empty($settings['timeout'])) {
- $options[PDO::ATTR_TIMEOUT] = $settings['timeout'];
- }
-
- $this->pdo = new PDO($dsn, $username, $password, $options);
-
- if (isset($settings['schema_table'])) {
- $this->schemaTable = $settings['schema_table'];
- }
- }
-
- /**
- * Enable foreign keys
- *
- * @access public
- */
- public function enableForeignKeys()
- {
- }
-
- /**
- * Disable foreign keys
- *
- * @access public
- */
- public function disableForeignKeys()
- {
- }
-
- /**
- * Return true if the error code is a duplicate key
- *
- * @access public
- * @param integer $code
- * @return boolean
- */
- public function isDuplicateKeyError($code)
- {
- return $code == 23505 || $code == 23503;
- }
-
- /**
- * Escape identifier
- *
- * @access public
- * @param string $identifier
- * @return string
- */
- public function escape($identifier)
- {
- return '"'.$identifier.'"';
- }
-
- /**
- * Get non standard operator
- *
- * @access public
- * @param string $operator
- * @return string
- */
- public function getOperator($operator)
- {
- if ($operator === 'LIKE') {
- return 'LIKE';
- }
- else if ($operator === 'ILIKE') {
- return 'ILIKE';
- }
-
- return '';
- }
-
- /**
- * Get last inserted id
- *
- * @access public
- * @return integer
- */
- public function getLastId()
- {
- try {
- $rq = $this->pdo->prepare('SELECT LASTVAL()');
- $rq->execute();
-
- return $rq->fetchColumn();
- }
- catch (PDOException $e) {
- return 0;
- }
- }
-
- /**
- * Get current schema version
- *
- * @access public
- * @return integer
- */
- public function getSchemaVersion()
- {
- $this->pdo->exec("CREATE TABLE IF NOT EXISTS ".$this->schemaTable." (version INTEGER DEFAULT 0)");
-
- $rq = $this->pdo->prepare('SELECT "version" FROM "'.$this->schemaTable.'"');
- $rq->execute();
- $result = $rq->fetchColumn();
-
- if ($result !== false) {
- return (int) $result;
- }
- else {
- $this->pdo->exec('INSERT INTO '.$this->schemaTable.' VALUES(0)');
- }
-
- return 0;
- }
-
- /**
- * Set current schema version
- *
- * @access public
- * @param integer $version
- */
- public function setSchemaVersion($version)
- {
- $rq = $this->pdo->prepare('UPDATE '.$this->schemaTable.' SET version=?');
- $rq->execute(array($version));
- }
-
- /**
- * Run EXPLAIN command
- *
- * @param string $sql
- * @param array $values
- * @return array
- */
- public function explain($sql, array $values)
- {
- return $this->getConnection()->query('EXPLAIN (FORMAT YAML) '.$this->getSqlFromPreparedStatement($sql, $values))->fetchAll(PDO::FETCH_ASSOC);
- }
-
- /**
- * Get database version
- *
- * @access public
- * @return array
- */
- public function getDatabaseVersion()
- {
- return $this->getConnection()->query('SHOW server_version')->fetchColumn();
- }
-}
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Driver/Sqlite.php b/vendor/fguillot/picodb/lib/PicoDb/Driver/Sqlite.php
deleted file mode 100644
index 0503d336..00000000
--- a/vendor/fguillot/picodb/lib/PicoDb/Driver/Sqlite.php
+++ /dev/null
@@ -1,199 +0,0 @@
-<?php
-
-namespace PicoDb\Driver;
-
-use PDO;
-use PDOException;
-
-/**
- * Sqlite Driver
- *
- * @package PicoDb\Driver
- * @author Frederic Guillot
- */
-class Sqlite extends Base
-{
- /**
- * List of required settings options
- *
- * @access protected
- * @var array
- */
- protected $requiredAttributes = array('filename');
-
- /**
- * Create a new PDO connection
- *
- * @access public
- * @param array $settings
- */
- public function createConnection(array $settings)
- {
- $options = array();
-
- if (! empty($settings['timeout'])) {
- $options[PDO::ATTR_TIMEOUT] = $settings['timeout'];
- }
-
- $this->pdo = new PDO('sqlite:'.$settings['filename'], null, null, $options);
- $this->enableForeignKeys();
- }
-
- /**
- * Enable foreign keys
- *
- * @access public
- */
- public function enableForeignKeys()
- {
- $this->pdo->exec('PRAGMA foreign_keys = ON');
- }
-
- /**
- * Disable foreign keys
- *
- * @access public
- */
- public function disableForeignKeys()
- {
- $this->pdo->exec('PRAGMA foreign_keys = OFF');
- }
-
- /**
- * Return true if the error code is a duplicate key
- *
- * @access public
- * @param integer $code
- * @return boolean
- */
- public function isDuplicateKeyError($code)
- {
- return $code == 23000;
- }
-
- /**
- * Escape identifier
- *
- * @access public
- * @param string $identifier
- * @return string
- */
- public function escape($identifier)
- {
- return '"'.$identifier.'"';
- }
-
- /**
- * Get non standard operator
- *
- * @access public
- * @param string $operator
- * @return string
- */
- public function getOperator($operator)
- {
- if ($operator === 'LIKE' || $operator === 'ILIKE') {
- return 'LIKE';
- }
-
- return '';
- }
-
- /**
- * Get last inserted id
- *
- * @access public
- * @return integer
- */
- public function getLastId()
- {
- return $this->pdo->lastInsertId();
- }
-
- /**
- * Get current schema version
- *
- * @access public
- * @return integer
- */
- public function getSchemaVersion()
- {
- $rq = $this->pdo->prepare('PRAGMA user_version');
- $rq->execute();
-
- return (int) $rq->fetchColumn();
- }
-
- /**
- * Set current schema version
- *
- * @access public
- * @param integer $version
- */
- public function setSchemaVersion($version)
- {
- $this->pdo->exec('PRAGMA user_version='.$version);
- }
-
- /**
- * Upsert for a key/value variable
- *
- * @access public
- * @param string $table
- * @param string $keyColumn
- * @param string $valueColumn
- * @param array $dictionary
- * @return bool False on failure
- */
- public function upsert($table, $keyColumn, $valueColumn, array $dictionary)
- {
- try {
- $this->pdo->beginTransaction();
-
- foreach ($dictionary as $key => $value) {
-
- $sql = sprintf(
- 'INSERT OR REPLACE INTO %s (%s, %s) VALUES (?, ?)',
- $this->escape($table),
- $this->escape($keyColumn),
- $this->escape($valueColumn)
- );
-
- $rq = $this->pdo->prepare($sql);
- $rq->execute(array($key, $value));
- }
-
- $this->pdo->commit();
-
- return true;
- }
- catch (PDOException $e) {
- $this->pdo->rollBack();
- return false;
- }
- }
-
- /**
- * Run EXPLAIN command
- *
- * @access public
- * @param string $sql
- * @param array $values
- * @return array
- */
- public function explain($sql, array $values)
- {
- return $this->getConnection()->query('EXPLAIN QUERY PLAN '.$this->getSqlFromPreparedStatement($sql, $values))->fetchAll(PDO::FETCH_ASSOC);
- }
-
- /**
- * Get database version
- *
- * @access public
- * @return array
- */
- public function getDatabaseVersion()
- {
- return $this->getConnection()->query('SELECT sqlite_version()')->fetchColumn();
- }
-}
diff --git a/vendor/fguillot/picodb/lib/PicoDb/DriverFactory.php b/vendor/fguillot/picodb/lib/PicoDb/DriverFactory.php
deleted file mode 100644
index 13151ba7..00000000
--- a/vendor/fguillot/picodb/lib/PicoDb/DriverFactory.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-namespace PicoDb;
-
-use LogicException;
-use PicoDb\Driver\Mssql;
-use PicoDb\Driver\Mysql;
-use PicoDb\Driver\Postgres;
-use PicoDb\Driver\Sqlite;
-
-/**
- * Class DriverFactory
- *
- * @package PicoDb
- * @author Frederic Guillot
- */
-class DriverFactory
-{
- /**
- * Get database driver from settings or environment URL
- *
- * @access public
- * @param array $settings
- * @return Mssql|Mysql|Postgres|Sqlite
- */
- public static function getDriver(array $settings)
- {
- if (! isset($settings['driver'])) {
- throw new LogicException('You must define a database driver');
- }
-
- switch ($settings['driver']) {
- case 'sqlite':
- return new Sqlite($settings);
- case 'mssql':
- return new Mssql($settings);
- case 'mysql':
- return new Mysql($settings);
- case 'postgres':
- return new Postgres($settings);
- default:
- throw new LogicException('This database driver is not supported');
- }
- }
-}
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Hashtable.php b/vendor/fguillot/picodb/lib/PicoDb/Hashtable.php
deleted file mode 100644
index 17afd0e6..00000000
--- a/vendor/fguillot/picodb/lib/PicoDb/Hashtable.php
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-
-namespace PicoDb;
-
-use PDO;
-
-/**
- * HashTable (key/value)
- *
- * @package PicoDb
- * @author Frederic Guillot
- * @author Mathias Kresin
- */
-class Hashtable extends Table
-{
- /**
- * Column for the key
- *
- * @access private
- * @var string
- */
- private $keyColumn = 'key';
-
- /**
- * Column for the value
- *
- * @access private
- * @var string
- */
- private $valueColumn = 'value';
-
- /**
- * Set the key column
- *
- * @access public
- * @param string $column
- * @return $this
- */
- public function columnKey($column)
- {
- $this->keyColumn = $column;
- return $this;
- }
-
- /**
- * Set the value column
- *
- * @access public
- * @param string $column
- * @return $this
- */
- public function columnValue($column)
- {
- $this->valueColumn = $column;
- return $this;
- }
-
- /**
- * Insert or update
- *
- * @access public
- * @param array $hashmap
- * @return boolean
- */
- public function put(array $hashmap)
- {
- return $this->db->getDriver()->upsert($this->getName(), $this->keyColumn, $this->valueColumn, $hashmap);
- }
-
- /**
- * Hashmap result [ [column1 => column2], [], ...]
- *
- * @access public
- * @return array
- */
- public function get()
- {
- $hashmap = array();
-
- // setup where condition
- if (func_num_args() > 0) {
- $this->in($this->keyColumn, func_get_args());
- }
-
- // setup to select columns in case that there are more than two
- $this->columns($this->keyColumn, $this->valueColumn);
-
- $rq = $this->db->execute($this->buildSelectQuery(), $this->conditionBuilder->getValues());
- $rows = $rq->fetchAll(PDO::FETCH_NUM);
-
- foreach ($rows as $row) {
- $hashmap[$row[0]] = $row[1];
- }
-
- return $hashmap;
- }
-
- /**
- * Shortcut method to get a hashmap result
- *
- * @access public
- * @param string $key Key column
- * @param string $value Value column
- * @return array
- */
- public function getAll($key, $value)
- {
- $this->keyColumn = $key;
- $this->valueColumn = $value;
- return $this->get();
- }
-}
diff --git a/vendor/fguillot/picodb/lib/PicoDb/LargeObject.php b/vendor/fguillot/picodb/lib/PicoDb/LargeObject.php
deleted file mode 100644
index ba5e3b92..00000000
--- a/vendor/fguillot/picodb/lib/PicoDb/LargeObject.php
+++ /dev/null
@@ -1,167 +0,0 @@
-<?php
-
-namespace PicoDb;
-
-use PDO;
-use PicoDb\Builder\InsertBuilder;
-use PicoDb\Builder\UpdateBuilder;
-
-/**
- * Handle Large Objects (LOBs)
- *
- * @package PicoDb
- * @author Frederic Guillot
- */
-class LargeObject extends Table
-{
- /**
- * Fetch large object as file descriptor
- *
- * This method is not compatible with Sqlite and Mysql (return a string instead of resource)
- *
- * @access public
- * @param string $column
- * @return resource
- */
- public function findOneColumnAsStream($column)
- {
- $this->limit(1);
- $this->columns($column);
-
- $rq = $this->db->getStatementHandler()
- ->withSql($this->buildSelectQuery())
- ->withPositionalParams($this->conditionBuilder->getValues())
- ->execute();
-
- $rq->bindColumn($column, $fd, PDO::PARAM_LOB);
- $rq->fetch(PDO::FETCH_BOUND);
-
- return $fd;
- }
-
- /**
- * Fetch large object as string
- *
- * @access public
- * @param string $column
- * @return string
- */
- public function findOneColumnAsString($column)
- {
- $fd = $this->findOneColumnAsStream($column);
-
- if (is_string($fd)) {
- return $fd;
- }
-
- return stream_get_contents($fd);
- }
-
- /**
- * Insert large object from stream
- *
- * @access public
- * @param string $blobColumn
- * @param resource|string $blobDescriptor
- * @param array $data
- * @return bool
- */
- public function insertFromStream($blobColumn, &$blobDescriptor, array $data = array())
- {
- $columns = array_merge(array($blobColumn), array_keys($data));
- $this->db->startTransaction();
-
- $result = $this->db->getStatementHandler()
- ->withSql(InsertBuilder::getInstance($this->db, $this->conditionBuilder)
- ->withTable($this->name)
- ->withColumns($columns)
- ->build()
- )
- ->withNamedParams($data)
- ->withLobParam($blobColumn, $blobDescriptor)
- ->execute();
-
- $this->db->closeTransaction();
-
- return $result !== false;
- }
-
- /**
- * Insert large object from file
- *
- * @access public
- * @param string $blobColumn
- * @param string $filename
- * @param array $data
- * @return bool
- */
- public function insertFromFile($blobColumn, $filename, array $data = array())
- {
- $fp = fopen($filename, 'rb');
- $result = $this->insertFromStream($blobColumn, $fp, $data);
- fclose($fp);
- return $result;
- }
-
- /**
- * Insert large object from string
- *
- * @access public
- * @param string $blobColumn
- * @param string $blobData
- * @param array $data
- * @return bool
- */
- public function insertFromString($blobColumn, &$blobData, array $data = array())
- {
- return $this->insertFromStream($blobColumn, $blobData, $data);
- }
-
- /**
- * Update large object from stream
- *
- * @access public
- * @param string $blobColumn
- * @param resource $blobDescriptor
- * @param array $data
- * @return bool
- */
- public function updateFromStream($blobColumn, &$blobDescriptor, array $data = array())
- {
- $values = array_merge(array_values($data), $this->conditionBuilder->getValues());
- $columns = array_merge(array($blobColumn), array_keys($data));
-
- $this->db->startTransaction();
-
- $result = $this->db->getStatementHandler()
- ->withSql(UpdateBuilder::getInstance($this->db, $this->conditionBuilder)
- ->withTable($this->name)
- ->withColumns($columns)
- ->build()
- )
- ->withPositionalParams($values)
- ->withLobParam($blobColumn, $blobDescriptor)
- ->execute();
-
- $this->db->closeTransaction();
-
- return $result !== false;
- }
-
- /**
- * Update large object from file
- *
- * @access public
- * @param string $blobColumn
- * @param string $filename
- * @param array $data
- * @return bool
- */
- public function updateFromFile($blobColumn, $filename, array $data = array())
- {
- $fp = fopen($filename, 'r');
- $result = $this->updateFromStream($blobColumn, $fp, $data);
- fclose($fp);
- return $result;
- }
-}
diff --git a/vendor/fguillot/picodb/lib/PicoDb/SQLException.php b/vendor/fguillot/picodb/lib/PicoDb/SQLException.php
deleted file mode 100644
index 7e570834..00000000
--- a/vendor/fguillot/picodb/lib/PicoDb/SQLException.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-namespace PicoDb;
-
-use Exception;
-
-/**
- * SQLException
- *
- * @package PicoDb
- * @author Frederic Guillot
- */
-class SQLException extends Exception
-{
-}
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Schema.php b/vendor/fguillot/picodb/lib/PicoDb/Schema.php
deleted file mode 100644
index a0280368..00000000
--- a/vendor/fguillot/picodb/lib/PicoDb/Schema.php
+++ /dev/null
@@ -1,119 +0,0 @@
-<?php
-
-namespace PicoDb;
-
-use PDOException;
-
-/**
- * Schema migration class
- *
- * @package PicoDb
- * @author Frederic Guillot
- */
-class Schema
-{
- /**
- * Database instance
- *
- * @access protected
- * @var Database
- */
- protected $db = null;
-
- /**
- * Schema namespace
- *
- * @access protected
- * @var string
- */
- protected $namespace = '\Schema';
-
- /**
- * Constructor
- *
- * @access public
- * @param Database $db
- */
- public function __construct(Database $db)
- {
- $this->db = $db;
- }
-
- /**
- * Set another namespace
- *
- * @access public
- * @param string $namespace
- * @return Schema
- */
- public function setNamespace($namespace)
- {
- $this->namespace = $namespace;
- return $this;
- }
-
- /**
- * Get schema namespace
- *
- * @access public
- * @return string
- */
- public function getNamespace()
- {
- return $this->namespace;
- }
-
- /**
- * Check the schema version and run the migrations
- *
- * @access public
- * @param integer $last_version
- * @return boolean
- */
- public function check($last_version = 1)
- {
- $current_version = $this->db->getDriver()->getSchemaVersion();
-
- if ($current_version < $last_version) {
- return $this->migrateTo($current_version, $last_version);
- }
-
- return true;
- }
-
- /**
- * Migrate the schema to one version to another
- *
- * @access public
- * @param integer $current_version
- * @param integer $next_version
- * @return boolean
- */
- public function migrateTo($current_version, $next_version)
- {
- try {
- for ($i = $current_version + 1; $i <= $next_version; $i++) {
- $this->db->startTransaction();
- $this->db->getDriver()->disableForeignKeys();
-
- $function_name = $this->getNamespace().'\version_'.$i;
-
- if (function_exists($function_name)) {
- $this->db->setLogMessage('Running migration '.$function_name);
- call_user_func($function_name, $this->db->getConnection());
- }
-
- $this->db->getDriver()->setSchemaVersion($i);
- $this->db->getDriver()->enableForeignKeys();
- $this->db->closeTransaction();
- }
- } catch (PDOException $e) {
- $this->db->setLogMessage($e->getMessage());
- $this->db->cancelTransaction();
- $this->db->getDriver()->enableForeignKeys();
- return false;
- }
-
- return true;
- }
-}
diff --git a/vendor/fguillot/picodb/lib/PicoDb/StatementHandler.php b/vendor/fguillot/picodb/lib/PicoDb/StatementHandler.php
deleted file mode 100644
index d0cdaa49..00000000
--- a/vendor/fguillot/picodb/lib/PicoDb/StatementHandler.php
+++ /dev/null
@@ -1,353 +0,0 @@
-<?php
-
-namespace PicoDb;
-
-use PDO;
-use PDOException;
-use PDOStatement;
-
-/**
- * Statement Handler
- *
- * @package PicoDb
- * @author Frederic Guillot
- */
-class StatementHandler
-{
- /**
- * Database instance
- *
- * @access protected
- * @var Database
- */
- protected $db = null;
-
- /**
- * Flag to calculate query time
- *
- * @access protected
- * @var boolean
- */
- protected $stopwatch = false;
-
- /**
- * Start time
- *
- * @access protected
- * @var float
- */
- protected $startTime = 0;
-
- /**
- * Execution time of all queries
- *
- * @access protected
- * @var float
- */
- protected $executionTime = 0;
-
- /**
- * Flag to log generated SQL queries
- *
- * @access protected
- * @var boolean
- */
- protected $logQueries = false;
-
- /**
- * Run explain command on each query
- *
- * @access protected
- * @var boolean
- */
- protected $explain = false;
-
- /**
- * Number of SQL queries executed
- *
- * @access protected
- * @var integer
- */
- protected $nbQueries = 0;
-
- /**
- * SQL query
- *
- * @access protected
- * @var string
- */
- protected $sql = '';
-
- /**
- * Positional SQL parameters
- *
- * @access protected
- * @var array
- */
- protected $positionalParams = array();
-
- /**
- * Named SQL parameters
- *
- * @access protected
- * @var array
- */
- protected $namedParams = array();
-
- /**
- * Flag to use named params
- *
- * @access protected
- * @var boolean
- */
- protected $useNamedParams = false;
-
- /**
- * LOB params
- *
- * @access protected
- * @var array
- */
- protected $lobParams = array();
-
- /**
- * Constructor
- *
- * @access public
- * @param Database $db
- */
- public function __construct(Database $db)
- {
- $this->db = $db;
- }
-
- /**
- * Enable query logging
- *
- * @access public
- * @return $this
- */
- public function withLogging()
- {
- $this->logQueries = true;
- return $this;
- }
-
- /**
- * Record query execution time
- *
- * @access public
- * @return $this
- */
- public function withStopWatch()
- {
- $this->stopwatch = true;
- return $this;
- }
-
- /**
- * Execute explain command on query
- *
- * @access public
- * @return $this
- */
- public function withExplain()
- {
- $this->explain = true;
- return $this;
- }
-
- /**
- * Set SQL query
- *
- * @access public
- * @param string $sql
- * @return $this
- */
- public function withSql($sql)
- {
- $this->sql = $sql;
- return $this;
- }
-
- /**
- * Set positional parameters
- *
- * @access public
- * @param array $params
- * @return $this
- */
- public function withPositionalParams(array $params)
- {
- $this->positionalParams = $params;
- return $this;
- }
-
- /**
- * Set named parameters
- *
- * @access public
- * @param array $params
- * @return $this
- */
- public function withNamedParams(array $params)
- {
- $this->namedParams = $params;
- $this->useNamedParams = true;
- return $this;
- }
-
- /**
- * Bind large object parameter
- *
- * @access public
- * @param $name
- * @param $fp
- * @return $this
- */
- public function withLobParam($name, &$fp)
- {
- $this->lobParams[$name] =& $fp;
- return $this;
- }
-
- /**
- * Get number of queries executed
- *
- * @access public
- * @return int
- */
- public function getNbQueries()
- {
- return $this->nbQueries;
- }
-
- /**
- * Execute a prepared statement
- *
- * Note: returns false on duplicate keys instead of SQLException
- *
- * @access public
- * @return PDOStatement|false
- */
- public function execute()
- {
- try {
- $this->beforeExecute();
-
- $pdoStatement = $this->db->getConnection()->prepare($this->sql);
- $this->bindParams($pdoStatement);
- $pdoStatement->execute();
-
- $this->afterExecute();
- return $pdoStatement;
- } catch (PDOException $e) {
- return $this->handleSqlError($e);
- }
- }
-
- /**
- * Bind parameters to PDOStatement
- *
- * @access protected
- * @param PDOStatement $pdoStatement
- */
- protected function bindParams(PDOStatement $pdoStatement)
- {
- $i = 1;
-
- foreach ($this->lobParams as $name => $variable) {
- if (! $this->useNamedParams) {
- $parameter = $i;
- $i++;
- } else {
- $parameter = $name;
- }
-
- $pdoStatement->bindParam($parameter, $variable, PDO::PARAM_LOB);
- }
-
- foreach ($this->positionalParams as $value) {
- $pdoStatement->bindValue($i, $value, PDO::PARAM_STR);
- $i++;
- }
-
- foreach ($this->namedParams as $name => $value) {
- $pdoStatement->bindValue($name, $value, PDO::PARAM_STR);
- }
- }
-
- /**
- * Method executed before query execution
- *
- * @access protected
- */
- protected function beforeExecute()
- {
- if ($this->logQueries) {
- $this->db->setLogMessage($this->sql);
- }
-
- if ($this->stopwatch) {
- $this->startTime = microtime(true);
- }
- }
-
- /**
- * Method executed after query execution
- *
- * @access protected
- */
- protected function afterExecute()
- {
- if ($this->stopwatch) {
- $duration = microtime(true) - $this->startTime;
- $this->executionTime += $duration;
- $this->db->setLogMessage('query_duration='.$duration);
- $this->db->setLogMessage('total_execution_time='.$this->executionTime);
- }
-
- if ($this->explain) {
- $this->db->setLogMessages($this->db->getDriver()->explain($this->sql, $this->positionalParams));
- }
-
- $this->nbQueries++;
- $this->cleanup();
- }
-
- /**
- * Reset internal properties after execution
- * The same object instance is used
- *
- * @access protected
- */
- protected function cleanup()
- {
- $this->sql = '';
- $this->useNamedParams = false;
- $this->positionalParams = array();
- $this->namedParams = array();
- $this->lobParams = array();
- }
-
- /**
- * Handle PDOException
- *
- * @access public
- * @param PDOException $e
- * @return bool
- * @throws SQLException
- */
- public function handleSqlError(PDOException $e)
- {
- $this->cleanup();
- $this->db->cancelTransaction();
- $this->db->setLogMessage($e->getMessage());
-
- if ($this->db->getDriver()->isDuplicateKeyError($e->getCode())) {
- return false;
- }
-
- throw new SQLException('SQL Error: '.$e->getMessage());
- }
-}
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Table.php b/vendor/fguillot/picodb/lib/PicoDb/Table.php
deleted file mode 100644
index 404b5cbe..00000000
--- a/vendor/fguillot/picodb/lib/PicoDb/Table.php
+++ /dev/null
@@ -1,729 +0,0 @@
-<?php
-
-namespace PicoDb;
-
-use PDO;
-use Closure;
-use PicoDb\Builder\ConditionBuilder;
-use PicoDb\Builder\InsertBuilder;
-use PicoDb\Builder\UpdateBuilder;
-
-/**
- * Table
- *
- * @package PicoDb
- * @author Frederic Guillot
- *
- * @method $this addCondition($sql)
- * @method $this beginOr()
- * @method $this closeOr()
- * @method $this eq($column, $value)
- * @method $this neq($column, $value)
- * @method $this in($column, array $values)
- * @method $this inSubquery($column, Table $subquery)
- * @method $this notIn($column, array $values)
- * @method $this notInSubquery($column, Table $subquery)
- * @method $this like($column, $value)
- * @method $this ilike($column, $value)
- * @method $this gt($column, $value)
- * @method $this gtSubquery($column, Table $subquery)
- * @method $this lt($column, $value)
- * @method $this ltSubquery($column, Table $subquery)
- * @method $this gte($column, $value)
- * @method $this gteSubquery($column, Table $subquery)
- * @method $this lte($column, $value)
- * @method $this lteSubquery($column, Table $subquery)
- * @method $this isNull($column)
- * @method $this notNull($column)
- */
-class Table
-{
- /**
- * Sorting direction
- *
- * @access public
- * @var string
- */
- const SORT_ASC = 'ASC';
- const SORT_DESC = 'DESC';
-
- /**
- * Condition instance
- *
- * @access protected
- * @var ConditionBuilder
- */
- protected $conditionBuilder;
-
- /**
- * Database instance
- *
- * @access protected
- * @var Database
- */
- protected $db;
-
- /**
- * Table name
- *
- * @access protected
- * @var string
- */
- protected $name = '';
-
- /**
- * Columns list for SELECT query
- *
- * @access private
- * @var array
- */
- private $columns = array();
-
- /**
- * Columns to sum during update
- *
- * @access private
- * @var array
- */
- private $sumColumns = array();
-
- /**
- * SQL limit
- *
- * @access private
- * @var string
- */
- private $sqlLimit = '';
-
- /**
- * SQL offset
- *
- * @access private
- * @var string
- */
- private $sqlOffset = '';
-
- /**
- * SQL order
- *
- * @access private
- * @var string
- */
- private $sqlOrder = '';
-
- /**
- * SQL custom SELECT value
- *
- * @access private
- * @var string
- */
- private $sqlSelect = '';
-
- /**
- * SQL joins
- *
- * @access private
- * @var array
- */
- private $joins = array();
-
- /**
- * Use DISTINCT or not?
- *
- * @access private
- * @var boolean
- */
- private $distinct = false;
-
- /**
- * Group by those columns
- *
- * @access private
- * @var array
- */
- private $groupBy = array();
-
- /**
- * Callback for result filtering
- *
- * @access private
- * @var Closure
- */
- private $callback = null;
-
- /**
- * Constructor
- *
- * @access public
- * @param Database $db
- * @param string $name
- */
- public function __construct(Database $db, $name)
- {
- $this->db = $db;
- $this->name = $name;
- $this->conditionBuilder = new ConditionBuilder($db);
- }
-
- /**
- * Return the table name
- *
- * @access public
- * @return string
- */
- public function getName()
- {
- return $this->name;
- }
-
- /**
- * Return ConditionBuilder object
- *
- * @access public
- * @return ConditionBuilder
- */
- public function getConditionBuilder()
- {
- return $this->conditionBuilder;
- }
-
- /**
- * Insert or update
- *
- * @access public
- * @param array $data
- * @return boolean
- */
- public function save(array $data)
- {
- return $this->conditionBuilder->hasCondition() ? $this->update($data) : $this->insert($data);
- }
-
- /**
- * Update
- *
- * @access public
- * @param array $data
- * @return boolean
- */
- public function update(array $data = array())
- {
- $values = array_merge(array_values($data), array_values($this->sumColumns), $this->conditionBuilder->getValues());
- $sql = UpdateBuilder::getInstance($this->db, $this->conditionBuilder)
- ->withTable($this->name)
- ->withColumns(array_keys($data))
- ->withSumColumns(array_keys($this->sumColumns))
- ->build();
-
- return $this->db->execute($sql, $values) !== false;
- }
-
- /**
- * Insert
- *
- * @access public
- * @param array $data
- * @return boolean
- */
- public function insert(array $data)
- {
- return $this->db->getStatementHandler()
- ->withSql(InsertBuilder::getInstance($this->db, $this->conditionBuilder)
- ->withTable($this->name)
- ->withColumns(array_keys($data))
- ->build()
- )
- ->withNamedParams($data)
- ->execute() !== false;
- }
-
- /**
- * Insert a new row and return the ID of the primary key
- *
- * @access public
- * @param array $data
- * @return bool|int
- */
- public function persist(array $data)
- {
- if ($this->insert($data)) {
- return $this->db->getLastId();
- }
-
- return false;
- }
-
- /**
- * Remove
- *
- * @access public
- * @return boolean
- */
- public function remove()
- {
- $sql = sprintf(
- 'DELETE FROM %s %s',
- $this->db->escapeIdentifier($this->name),
- $this->conditionBuilder->build()
- );
-
- $result = $this->db->execute($sql, $this->conditionBuilder->getValues());
- return $result->rowCount() > 0;
- }
-
- /**
- * Fetch all rows
- *
- * @access public
- * @return array
- */
- public function findAll()
- {
- $rq = $this->db->execute($this->buildSelectQuery(), $this->conditionBuilder->getValues());
- $results = $rq->fetchAll(PDO::FETCH_ASSOC);
-
- if (is_callable($this->callback) && ! empty($results)) {
- return call_user_func($this->callback, $results);
- }
-
- return $results;
- }
-
- /**
- * Find all with a single column
- *
- * @access public
- * @param string $column
- * @return mixed
- */
- public function findAllByColumn($column)
- {
- $this->columns = array($column);
- $rq = $this->db->execute($this->buildSelectQuery(), $this->conditionBuilder->getValues());
-
- return $rq->fetchAll(PDO::FETCH_COLUMN, 0);
- }
-
- /**
- * Fetch one row
- *
- * @access public
- * @return array|null
- */
- public function findOne()
- {
- $this->limit(1);
- $result = $this->findAll();
-
- return isset($result[0]) ? $result[0] : null;
- }
-
- /**
- * Fetch one column, first row
- *
- * @access public
- * @param string $column
- * @return string
- */
- public function findOneColumn($column)
- {
- $this->limit(1);
- $this->columns = array($column);
-
- return $this->db->execute($this->buildSelectQuery(), $this->conditionBuilder->getValues())->fetchColumn();
- }
-
- /**
- * Build a subquery with an alias
- *
- * @access public
- * @param string $sql
- * @param string $alias
- * @return $this
- */
- public function subquery($sql, $alias)
- {
- $this->columns[] = '('.$sql.') AS '.$this->db->escapeIdentifier($alias);
- return $this;
- }
-
- /**
- * Exists
- *
- * @access public
- * @return integer
- */
- public function exists()
- {
- $sql = sprintf(
- 'SELECT 1 FROM %s '.implode(' ', $this->joins).$this->conditionBuilder->build(),
- $this->db->escapeIdentifier($this->name)
- );
-
- $rq = $this->db->execute($sql, $this->conditionBuilder->getValues());
- $result = $rq->fetchColumn();
-
- return $result ? true : false;
- }
-
- /**
- * Count
- *
- * @access public
- * @return integer
- */
- public function count()
- {
- $sql = sprintf(
- 'SELECT COUNT(*) FROM %s '.implode(' ', $this->joins).$this->conditionBuilder->build().$this->sqlOrder.$this->sqlLimit.$this->sqlOffset,
- $this->db->escapeIdentifier($this->name)
- );
-
- $rq = $this->db->execute($sql, $this->conditionBuilder->getValues());
- $result = $rq->fetchColumn();
-
- return $result ? (int) $result : 0;
- }
-
- /**
- * Sum
- *
- * @access public
- * @param string $column
- * @return float
- */
- public function sum($column)
- {
- $sql = sprintf(
- 'SELECT SUM(%s) FROM %s '.implode(' ', $this->joins).$this->conditionBuilder->build().$this->sqlOrder.$this->sqlLimit.$this->sqlOffset,
- $this->db->escapeIdentifier($column),
- $this->db->escapeIdentifier($this->name)
- );
-
- $rq = $this->db->execute($sql, $this->conditionBuilder->getValues());
- $result = $rq->fetchColumn();
-
- return $result ? (float) $result : 0;
- }
-
- /**
- * Increment column value
- *
- * @access public
- * @param string $column
- * @param string $value
- * @return boolean
- */
- public function increment($column, $value)
- {
- $sql = sprintf(
- 'UPDATE %s SET %s=%s+%d '.$this->conditionBuilder->build(),
- $this->db->escapeIdentifier($this->name),
- $this->db->escapeIdentifier($column),
- $this->db->escapeIdentifier($column),
- $value
- );
-
- return $this->db->execute($sql, $this->conditionBuilder->getValues()) !== false;
- }
-
- /**
- * Decrement column value
- *
- * @access public
- * @param string $column
- * @param string $value
- * @return boolean
- */
- public function decrement($column, $value)
- {
- $sql = sprintf(
- 'UPDATE %s SET %s=%s-%d '.$this->conditionBuilder->build(),
- $this->db->escapeIdentifier($this->name),
- $this->db->escapeIdentifier($column),
- $this->db->escapeIdentifier($column),
- $value
- );
-
- return $this->db->execute($sql, $this->conditionBuilder->getValues()) !== false;
- }
-
- /**
- * Left join
- *
- * @access public
- * @param string $table Join table
- * @param string $foreign_column Foreign key on the join table
- * @param string $local_column Local column
- * @param string $local_table Local table
- * @param string $alias Join table alias
- * @return $this
- */
- public function join($table, $foreign_column, $local_column, $local_table = '', $alias = '')
- {
- $this->joins[] = sprintf(
- 'LEFT JOIN %s ON %s=%s',
- $this->db->escapeIdentifier($table),
- $this->db->escapeIdentifier($alias ?: $table).'.'.$this->db->escapeIdentifier($foreign_column),
- $this->db->escapeIdentifier($local_table ?: $this->name).'.'.$this->db->escapeIdentifier($local_column)
- );
-
- return $this;
- }
-
- /**
- * Left join
- *
- * @access public
- * @param string $table1
- * @param string $alias1
- * @param string $column1
- * @param string $table2
- * @param string $column2
- * @return $this
- */
- public function left($table1, $alias1, $column1, $table2, $column2)
- {
- $this->joins[] = sprintf(
- 'LEFT JOIN %s AS %s ON %s=%s',
- $this->db->escapeIdentifier($table1),
- $this->db->escapeIdentifier($alias1),
- $this->db->escapeIdentifier($alias1).'.'.$this->db->escapeIdentifier($column1),
- $this->db->escapeIdentifier($table2).'.'.$this->db->escapeIdentifier($column2)
- );
-
- return $this;
- }
-
- /**
- * Inner join
- *
- * @access public
- * @param string $table1
- * @param string $alias1
- * @param string $column1
- * @param string $table2
- * @param string $column2
- * @return $this
- */
- public function inner($table1, $alias1, $column1, $table2, $column2)
- {
- $this->joins[] = sprintf(
- 'JOIN %s AS %s ON %s=%s',
- $this->db->escapeIdentifier($table1),
- $this->db->escapeIdentifier($alias1),
- $this->db->escapeIdentifier($alias1).'.'.$this->db->escapeIdentifier($column1),
- $this->db->escapeIdentifier($table2).'.'.$this->db->escapeIdentifier($column2)
- );
-
- return $this;
- }
-
- /**
- * Order by
- *
- * @access public
- * @param string $column Column name
- * @param string $order Direction ASC or DESC
- * @return $this
- */
- public function orderBy($column, $order = self::SORT_ASC)
- {
- $order = strtoupper($order);
- $order = $order === self::SORT_ASC || $order === self::SORT_DESC ? $order : self::SORT_ASC;
-
- if ($this->sqlOrder === '') {
- $this->sqlOrder = ' ORDER BY '.$this->db->escapeIdentifier($column).' '.$order;
- }
- else {
- $this->sqlOrder .= ', '.$this->db->escapeIdentifier($column).' '.$order;
- }
-
- return $this;
- }
-
- /**
- * Ascending sort
- *
- * @access public
- * @param string $column
- * @return $this
- */
- public function asc($column)
- {
- $this->orderBy($column, self::SORT_ASC);
- return $this;
- }
-
- /**
- * Descending sort
- *
- * @access public
- * @param string $column
- * @return $this
- */
- public function desc($column)
- {
- $this->orderBy($column, self::SORT_DESC);
- return $this;
- }
-
- /**
- * Limit
- *
- * @access public
- * @param integer $value
- * @return $this
- */
- public function limit($value)
- {
- if (! is_null($value)) {
- $this->sqlLimit = ' LIMIT '.(int) $value;
- }
-
- return $this;
- }
-
- /**
- * Offset
- *
- * @access public
- * @param integer $value
- * @return $this
- */
- public function offset($value)
- {
- if (! is_null($value)) {
- $this->sqlOffset = ' OFFSET '.(int) $value;
- }
-
- return $this;
- }
-
- /**
- * Group by
- *
- * @access public
- * @return $this
- */
- public function groupBy()
- {
- $this->groupBy = func_get_args();
- return $this;
- }
-
- /**
- * Custom select
- *
- * @access public
- * @param string $select
- * @return $this
- */
- public function select($select)
- {
- $this->sqlSelect = $select;
- return $this;
- }
-
- /**
- * Define the columns for the select
- *
- * @access public
- * @return $this
- */
- public function columns()
- {
- $this->columns = func_get_args();
- return $this;
- }
-
- /**
- * Sum column
- *
- * @access public
- * @param string $column
- * @param mixed $value
- * @return $this
- */
- public function sumColumn($column, $value)
- {
- $this->sumColumns[$column] = $value;
- return $this;
- }
-
- /**
- * Distinct
- *
- * @access public
- * @return $this
- */
- public function distinct()
- {
- $this->columns = func_get_args();
- $this->distinct = true;
- return $this;
- }
-
- /**
- * Add callback to alter the resultset
- *
- * @access public
- * @param Closure|array $callback
- * @return $this
- */
- public function callback($callback)
- {
- $this->callback = $callback;
- return $this;
- }
-
- /**
- * Build a select query
- *
- * @access public
- * @return string
- */
- public function buildSelectQuery()
- {
- if (empty($this->sqlSelect)) {
- $this->columns = $this->db->escapeIdentifierList($this->columns);
- $this->sqlSelect = ($this->distinct ? 'DISTINCT ' : '').(empty($this->columns) ? '*' : implode(', ', $this->columns));
- }
-
- $this->groupBy = $this->db->escapeIdentifierList($this->groupBy);
-
- return trim(sprintf(
- 'SELECT %s FROM %s %s %s %s %s %s %s',
- $this->sqlSelect,
- $this->db->escapeIdentifier($this->name),
- implode(' ', $this->joins),
- $this->conditionBuilder->build(),
- empty($this->groupBy) ? '' : 'GROUP BY '.implode(', ', $this->groupBy),
- $this->sqlOrder,
- $this->sqlLimit,
- $this->sqlOffset
- ));
- }
-
- /**
- * Magic method for sql conditions
- *
- * @access public
- * @param string $name
- * @param array $arguments
- * @return $this
- */
- public function __call($name, array $arguments)
- {
- call_user_func_array(array($this->conditionBuilder, $name), $arguments);
- return $this;
- }
-
- /**
- * Clone function ensures that cloned objects are really clones
- */
- public function __clone()
- {
- $this->conditionBuilder = clone $this->conditionBuilder;
- }
-}
diff --git a/vendor/fguillot/picodb/lib/PicoDb/UrlParser.php b/vendor/fguillot/picodb/lib/PicoDb/UrlParser.php
deleted file mode 100644
index d8fcaf00..00000000
--- a/vendor/fguillot/picodb/lib/PicoDb/UrlParser.php
+++ /dev/null
@@ -1,93 +0,0 @@
-<?php
-
-namespace PicoDb;
-
-/**
- * Class UrlParser
- *
- * @package PicoDb
- * @author Frederic Guillot
- */
-class UrlParser
-{
- /**
- * URL
- *
- * @access private
- * @var string
- */
- private $url;
-
- /**
- * Constructor
- *
- * @access public
- * @param string $environmentVariable
- */
- public function __construct($environmentVariable = 'DATABASE_URL')
- {
- $this->url = getenv($environmentVariable);
- }
-
- /**
- * Get object instance
- *
- * @access public
- * @param string $environmentVariable
- * @return static
- */
- public static function getInstance($environmentVariable = 'DATABASE_URL')
- {
- return new static($environmentVariable);
- }
-
- /**
- * Return true if the variable is defined
- *
- * @access public
- * @return bool
- */
- public function isEnvironmentVariableDefined()
- {
- return ! empty($this->url);
- }
-
- /**
- * Get settings from URL
- *
- * @access public
- * @param string $url
- * @return array
- */
- public function getSettings($url = '')
- {
- $url = $url ?: $this->url;
- $components = parse_url($url);
-
- if ($components === false) {
- return array();
- }
-
- return array(
- 'driver' => $this->getUrlComponent($components, 'scheme'),
- 'username' => $this->getUrlComponent($components, 'user'),
- 'password' => $this->getUrlComponent($components, 'pass'),
- 'hostname' => $this->getUrlComponent($components, 'host'),
- 'port' => $this->getUrlComponent($components, 'port'),
- 'database' => ltrim($this->getUrlComponent($components, 'path'), '/'),
- );
- }
-
- /**
- * Get URL component
- *
- * @access private
- * @param array $components
- * @param string $component
- * @return mixed|null
- */
- private function getUrlComponent(array $components, $component)
- {
- return ! empty($components[$component]) ? $components[$component] : null;
- }
-}