From 0df1b43af805e29346061bfc3f935bb22463f270 Mon Sep 17 00:00:00 2001 From: Timothy J Warren Date: Mon, 22 Jan 2018 15:40:49 -0500 Subject: [PATCH] Remove firebird test database and sql files --- src/AbstractQueryBuilder.php | 611 ---------------------------------- tests/db_files/FB_TEST_DB.FDB | Bin 905216 -> 0 bytes tests/db_files/firebird.sql | 113 ------- 3 files changed, 724 deletions(-) delete mode 100644 src/AbstractQueryBuilder.php delete mode 100755 tests/db_files/FB_TEST_DB.FDB delete mode 100644 tests/db_files/firebird.sql diff --git a/src/AbstractQueryBuilder.php b/src/AbstractQueryBuilder.php deleted file mode 100644 index 831d774..0000000 --- a/src/AbstractQueryBuilder.php +++ /dev/null @@ -1,611 +0,0 @@ - - * @copyright 2012 - 2018 Timothy J. Warren - * @license http://www.opensource.org/licenses/mit-license.html MIT License - * @link https://git.timshomepage.net/aviat4ion/Query - */ -namespace Query; - -use PDOStatement; - -/** - * Abstract Class for internal implementation methods of the Query Builder - * @package Query - */ -abstract class AbstractQueryBuilder { - - // -------------------------------------------------------------------------- - // ! Constants - // -------------------------------------------------------------------------- - - const KEY = 0; - const VALUE = 1; - const BOTH = 2; - - // -------------------------------------------------------------------------- - // ! SQL Clause Strings - // -------------------------------------------------------------------------- - - /** - * Compiled 'select' clause - * @var string - */ - protected $selectString = ''; - - /** - * Compiled 'from' clause - * @var string - */ - protected $fromString = ''; - - /** - * Compiled arguments for insert / update - * @var string - */ - protected $setString; - - /** - * Order by clause - * @var string - */ - protected $orderString; - - /** - * Group by clause - * @var string - */ - protected $groupString; - - // -------------------------------------------------------------------------- - // ! SQL Clause Arrays - // -------------------------------------------------------------------------- - - /** - * Keys for insert/update statement - * @var array - */ - protected $setArrayKeys = []; - - /** - * Key/val pairs for order by clause - * @var array - */ - protected $orderArray = []; - - /** - * Key/val pairs for group by clause - * @var array - */ - protected $groupArray = []; - - // -------------------------------------------------------------------------- - // ! Other Class vars - // -------------------------------------------------------------------------- - - /** - * Values to apply to prepared statements - * @var array - */ - protected $values = []; - - /** - * Values to apply to where clauses in prepared statements - * @var array - */ - protected $whereValues = []; - - /** - * Value for limit string - * @var string - */ - protected $limit; - - /** - * Value for offset in limit string - * @var integer - */ - protected $offset; - - /** - * Query component order mapping - * for complex select queries - * - * Format: - * array( - * 'type' => 'where', - * 'conjunction' => ' AND ', - * 'string' => 'k=?' - * ) - * - * @var array - */ - protected $queryMap = []; - - /** - * Map for having clause - * @var array - */ - protected $havingMap; - - /** - * Convenience property for connection management - * @var string - */ - public $connName = ""; - - /** - * List of queries executed - * @var array - */ - public $queries; - - /** - * Whether to do only an explain on the query - * @var boolean - */ - protected $explain; - - /** - * The current database driver - * @var \Query\Drivers\DriverInterface - */ - public $db; - - /** - * Query parser class instance - * @var QueryParser - */ - public $parser; - - /** - * Alias to driver util class - * @var \Query\Drivers\AbstractUtil - */ - public $util; - - /** - * Alias to driver sql class - * @var \Query\Drivers\SQLInterface - */ - public $sql; - - // -------------------------------------------------------------------------- - // Methods - // -------------------------------------------------------------------------- - - /** - * Set values in the class, with either an array or key value pair - * - * @param array $var - * @param mixed $key - * @param mixed $val - * @param int $valType - * @return array - */ - protected function _mixedSet(array &$var, $key, $val=NULL, int $valType=self::BOTH): array - { - $arg = (is_scalar($key) && is_scalar($val)) - ? [$key => $val] - : $key; - - foreach($arg as $k => $v) - { - if (\in_array($valType, [self::KEY, self::VALUE], TRUE)) - { - $var[] = ($valType === self::KEY) - ? $k - : $v; - } - else - { - $var[$k] = $v; - } - } - - return $var; - } - - /** - * Method to simplify select_ methods - * - * @param string $field - * @param string|bool $as - * @return string - */ - protected function _select(string $field, $as = FALSE): string - { - // Escape the identifiers - $field = $this->db->quoteIdent($field); - - if ( ! \is_string($as)) - { - return $field; - } - - $as = $this->db->quoteIdent($as); - return "({$field}) AS {$as} "; - } - - /** - * Helper function for returning sql strings - * - * @param string $type - * @param string $table - * @param bool $reset - * @return string - */ - protected function _getCompile(string $type, string $table, bool $reset): string - { - $sql = $this->_compile($type, $table); - - // Reset the query builder for the next query - if ($reset) - { - $this->resetQuery(); - } - - return $sql; - } - - /** - * Simplify 'like' methods - * - * @param string $field - * @param mixed $val - * @param string $pos - * @param string $like - * @param string $conj - * @return self - */ - protected function _like(string $field, $val, string $pos, string $like='LIKE', string $conj='AND'): self - { - $field = $this->db->quoteIdent($field); - - // Add the like string into the order map - $like = $field. " {$like} ?"; - - if ($pos === 'before') - { - $val = "%{$val}"; - } - elseif ($pos === 'after') - { - $val = "{$val}%"; - } - else - { - $val = "%{$val}%"; - } - - $conj = empty($this->queryMap) ? ' WHERE ' : " {$conj} "; - $this->_appendMap($conj, $like, 'like'); - - // Add to the values array - $this->whereValues[] = $val; - - return $this; - } - - /** - * Simplify building having clauses - * - * @param mixed $key - * @param mixed $values - * @param string $conj - * @return self - */ - protected function _having($key, $values=[], string $conj='AND'): self - { - $where = $this->_where($key, $values); - - // Create key/value placeholders - foreach($where as $f => $val) - { - // Split each key by spaces, in case there - // is an operator such as >, <, !=, etc. - $fArray = explode(' ', trim($f)); - - $item = $this->db->quoteIdent($fArray[0]); - - // Simple key value, or an operator - $item .= (count($fArray) === 1) ? '=?' : " {$fArray[1]} ?"; - - // Put in the having map - $this->havingMap[] = [ - 'conjunction' => ( ! empty($this->havingMap)) ? " {$conj} " : ' HAVING ', - 'string' => $item - ]; - } - - return $this; - } - - /** - * Do all the redundant stuff for where/having type methods - * - * @param mixed $key - * @param mixed $val - * @return array - */ - protected function _where($key, $val=[]): array - { - $where = []; - $this->_mixedSet($where, $key, $val); - $this->_mixedSet($this->whereValues, $key, $val, self::VALUE); - return $where; - } - - /** - * Simplify generating where string - * - * @param mixed $key - * @param mixed $values - * @param string $defaultConj - * @return self - */ - protected function _whereString($key, $values=[], string $defaultConj='AND'): self - { - // Create key/value placeholders - foreach($this->_where($key, $values) as $f => $val) - { - // Split each key by spaces, in case there - // is an operator such as >, <, !=, etc. - $fArray = explode(' ', trim($f)); - - $item = $this->db->quoteIdent($fArray[0]); - - // Simple key value, or an operator - $item .= (count($fArray) === 1) ? '=?' : " {$fArray[1]} ?"; - $lastItem = end($this->queryMap); - - // Determine the correct conjunction - $conjunctionList = array_column($this->queryMap, 'conjunction'); - if (empty($this->queryMap) || ( ! regex_in_array($conjunctionList, "/^ ?\n?WHERE/i"))) - { - $conj = "\nWHERE "; - } - elseif ($lastItem['type'] === 'group_start') - { - $conj = ''; - } - else - { - $conj = " {$defaultConj} "; - } - - $this->_appendMap($conj, $item, 'where'); - } - - return $this; - } - - /** - * Simplify where_in methods - * - * @param mixed $key - * @param mixed $val - * @param string $in - The (not) in fragment - * @param string $conj - The where in conjunction - * @return self - */ - protected function _whereIn($key, $val=[], string $in='IN', string $conj='AND'): self - { - $key = $this->db->quoteIdent($key); - $params = array_fill(0, count($val), '?'); - - foreach($val as $v) - { - $this->whereValues[] = $v; - } - - $conjunction = ( ! empty($this->queryMap)) ? " {$conj} " : ' WHERE '; - $str = $key . " {$in} (".implode(',', $params).') '; - - $this->_appendMap($conjunction, $str, 'where_in'); - - return $this; - } - - /** - * Executes the compiled query - * - * @param string $type - * @param string $table - * @param string $sql - * @param array|null $vals - * @param boolean $reset - * @return PDOStatement - */ - protected function _run(string $type, string $table, $sql=NULL, $vals=NULL, bool $reset=TRUE): PDOStatement - { - if ($sql === NULL) - { - $sql = $this->_compile($type, $table); - } - - if ($vals === NULL) - { - $vals = array_merge($this->values, (array) $this->whereValues); - } - - $startTime = microtime(TRUE); - - $res = empty($vals) - ? $this->db->query($sql) - : $this->db->prepareExecute($sql, $vals); - - $endTime = microtime(TRUE); - $totalTime = number_format($endTime - $startTime, 5); - - // Add this query to the list of executed queries - $this->_appendQuery($vals, $sql, (int) $totalTime); - - // Reset class state for next query - if ($reset) - { - $this->resetQuery(); - } - - return $res; - } - - /** - * Add an additional set of mapping pairs to a internal map - * - * @param string $conjunction - * @param string $string - * @param string $type - * @return void - */ - protected function _appendMap(string $conjunction = '', string $string = '', string $type = '') - { - $this->queryMap[] = [ - 'type' => $type, - 'conjunction' => $conjunction, - 'string' => $string - ]; - } - - /** - * Convert the prepared statement into readable sql - * - * @param array $vals - * @param string $sql - * @param int $totalTime - * @return void - */ - protected function _appendQuery($vals, string $sql, int $totalTime) - { - $evals = (is_array($vals)) ? $vals : []; - $esql = str_replace('?', "%s", $sql); - - // Quote string values - foreach($evals as &$v) - { - $v = ( ! is_numeric($v)) ? htmlentities($this->db->quote($v), ENT_NOQUOTES, 'utf-8') : $v; - } - - // Add the query onto the array of values to pass - // as arguments to sprintf - array_unshift($evals, $esql); - - // Add the interpreted query to the list of executed queries - $this->queries[] = [ - 'time' => $totalTime, - 'sql' => sprintf(...$evals) - ]; - - $this->queries['total_time'] += $totalTime; - - // Set the last query to get rowcounts properly - $this->db->setLastQuery($sql); - } - - /** - * Sub-method for generating sql strings - * - * @param string $type - * @param string $table - * @return string - */ - protected function _compileType(string $type='', string $table=''): string - { - switch($type) - { - case 'insert': - $paramCount = count($this->setArrayKeys); - $params = array_fill(0, $paramCount, '?'); - $sql = "INSERT INTO {$table} (" - . implode(',', $this->setArrayKeys) - . ")\nVALUES (".implode(',', $params).')'; - break; - - case 'update': - $sql = "UPDATE {$table}\nSET {$this->setString}"; - break; - - case 'replace': - // @TODO implement - $sql = ''; - break; - - case 'delete': - $sql = "DELETE FROM {$table}"; - break; - - // Get queries - default: - $sql = "SELECT * \nFROM {$this->fromString}"; - - // Set the select string - if ( ! empty($this->selectString)) - { - // Replace the star with the selected fields - $sql = str_replace('*', $this->selectString, $sql); - } - break; - } - - return $sql; - } - - /** - * String together the sql statements for sending to the db - * - * @param string $type - * @param string $table - * @return string - */ - protected function _compile(string $type='', string $table=''): string - { - // Get the base clause for the query - $sql = $this->_compileType($type, $this->db->quoteTable($table)); - - $clauses = [ - 'queryMap', - 'groupString', - 'orderString', - 'havingMap', - ]; - - // Set each type of subclause - foreach($clauses as $clause) - { - $param = $this->$clause; - if (\is_array($param)) - { - foreach($param as $q) - { - $sql .= $q['conjunction'] . $q['string']; - } - } - else - { - $sql .= $param; - } - } - - // Set the limit via the class variables - if (is_numeric($this->limit)) - { - $sql = $this->sql->limit($sql, $this->limit, $this->offset); - } - - // See if the query plan, rather than the - // query data should be returned - if ($this->explain === TRUE) - { - $sql = $this->sql->explain($sql); - } - - return $sql; - } -} \ No newline at end of file diff --git a/tests/db_files/FB_TEST_DB.FDB b/tests/db_files/FB_TEST_DB.FDB deleted file mode 100755 index 1c303f0a1d73d71b44d0d365872b3d17ecf8d61b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 905216 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 OmI2FvW#Em+!2bhjr(3uH diff --git a/tests/db_files/firebird.sql b/tests/db_files/firebird.sql deleted file mode 100644 index 11e2d0b..0000000 --- a/tests/db_files/firebird.sql +++ /dev/null @@ -1,113 +0,0 @@ --- sample data to test Firebird system tables - --- TABLE TEST -CREATE TABLE TEST1 ( - TEST_NAME CHAR(30) CHARACTER SET NONE NOT NULL COLLATE NONE, - TEST_ID INTEGER DEFAULT '0' NOT NULL, - TEST_DATE TIMESTAMP NOT NULL -); -ALTER TABLE TEST1 ADD CONSTRAINT PK_TEST PRIMARY KEY (TEST_ID); - --- TABLE TEST2 with some CONSTRAINTs and an INDEX -CREATE TABLE TEST2 ( - ID INTEGER NOT NULL, - FIELD1 INTEGER, - FIELD2 CHAR(15) CHARACTER SET NONE COLLATE NONE, - FIELD3 VARCHAR(50) CHARACTER SET NONE COLLATE NONE, - FIELD4 INTEGER, - FIELD5 INTEGER, - ID2 INTEGER NOT NULL -); -ALTER TABLE TEST2 ADD PRIMARY KEY (ID2); -CREATE UNIQUE INDEX TEST2_FIELD1ID_IDX ON TEST2(ID, FIELD1); -CREATE UNIQUE INDEX TEST2_FIELD4_IDX ON TEST2(FIELD4); -CREATE INDEX TEST2_FIELD5_IDX ON TEST2(FIELD5); - --- TABLE NUMBERS -CREATE TABLE NUMBERS ( - NUMBER INTEGER DEFAULT '0' NOT NULL, - EN CHAR(100) CHARACTER SET ISO8859_1 NOT NULL COLLATE ISO8859_1, - FR CHAR(100) CHARACTER SET ISO8859_1 NOT NULL COLLATE ISO8859_1 -); - --- TABLE NEWTABLE -CREATE TABLE NEWTABLE ( - ID INT DEFAULT 0 NOT NULL, - SOMENAME VARCHAR (12), - SOMEDESCRIPTION VARCHAR (12) -); -ALTER TABLE NEWTABLE ADD CONSTRAINT PKINDEX_IDX PRIMARY KEY (ID); -CREATE GENERATOR NEWTABLE_SEQ; - --- VIEW on TEST -CREATE VIEW "testview"( - TEST_NAME, - TEST_ID, - TEST_DATE -) AS -SELECT * -FROM TEST1 -WHERE TEST_NAME LIKE 't%'; - --- VIEW on NUMBERS -CREATE VIEW "numbersview"( - NUM, - EN, - FR -) AS -SELECT * -FROM NUMBERS -WHERE NUMBER > 100; - --- TRIGGER on NEWTABLE (emulate autoincrement) -SET TERM ^ ; - -CREATE TRIGGER AUTOINCREMENTPK FOR NEWTABLE -ACTIVE BEFORE INSERT POSITION 0 -AS BEGIN - IF (NEW.ID IS NULL OR NEW.ID = 0) THEN - NEW.ID = GEN_ID(NEWTABLE_SEQ, 1); -END^ - -SET TERM ; ^ - --- SAMPLE STORED PROCEDURE -SET TERM ^ ; - -CREATE PROCEDURE getEnglishNumber(N INTEGER) -RETURNS ( - english_number CHAR(100) -) -AS -BEGIN - FOR - SELECT EN - FROM NUMBERS - WHERE NUMBER = :N - INTO :english_number - DO - BEGIN - SUSPEND; - END -END ^ - -SET TERM ; ^ - --- TABLEs for testing CONSTRAINTs -CREATE TABLE "testconstraints" ( - "someid" integer NOT NULL, - "somename" char(10) NOT NULL, - CONSTRAINT "testconstraints_id_pk" PRIMARY KEY ("someid") -); -CREATE TABLE "testconstraints2" ( - "ext_id" integer NOT NULL, - "modified" date, - "uniquefield" char(10) NOT NULL, - "usraction" integer NOT NULL, - CONSTRAINT "testconstraints_id_fk" FOREIGN KEY ("ext_id") - REFERENCES "testconstraints" ("someid") - ON UPDATE CASCADE - ON DELETE CASCADE, - CONSTRAINT "unique_2_fields_idx" UNIQUE ("modified", "usraction"), - CONSTRAINT "uniquefld_idx" UNIQUE ("uniquefield") -);