/** * The MySQL PDO driver has issues if you try to reuse a prepared statement * without any placeholders. * * @return void */ private function regenerateStatement() { $is_pdo = $this->database->getExtension() == 'pdo'; $is_mysql = $this->database->getType() == 'mysql'; if ($this->placeholders || !$is_pdo || !$is_mysql) { return; } $this->statement = $this->database->getConnection()->prepare($this->sql); }
/** * Adds a number of math functions to SQLite that MSSQL, MySQL and PostgreSQL have by default * * @return void */ private function createSQLiteFunctions() { $function = array(); $functions[] = array('acos', 'acos', 1); $functions[] = array('asin', 'asin', 1); $functions[] = array('atan', 'atan', 1); $functions[] = array('atan2', 'atan2', 2); $functions[] = array('ceil', 'ceil', 1); $functions[] = array('ceiling', 'ceil', 1); $functions[] = array('cos', 'cos', 1); $functions[] = array('cot', array('fSQLTranslation', 'sqliteCotangent'), 1); $functions[] = array('degrees', 'rad2deg', 1); $functions[] = array('exp', 'exp', 1); $functions[] = array('floor', 'floor', 1); $functions[] = array('ln', 'log', 1); $functions[] = array('log', array('fSQLTranslation', 'sqliteLogBaseFirst'), 2); $functions[] = array('ltrim', 'ltrim', 1); $functions[] = array('pi', 'pi', 0); $functions[] = array('power', 'pow', 2); $functions[] = array('radians', 'deg2rad', 1); $functions[] = array('rtrim', 'rtrim', 1); $functions[] = array('sign', array('fSQLTranslation', 'sqliteSign'), 1); $functions[] = array('sqrt', 'sqrt', 1); $functions[] = array('sin', 'sin', 1); $functions[] = array('tan', 'tan', 1); $functions[] = array('trim', 'trim', 1); if ($this->database->getExtension() == 'sqlite') { $functions[] = array('current_date', array('fSQLTranslation', 'sqliteDate'), 0); $functions[] = array('current_time', array('fSQLTranslation', 'sqliteTime'), 0); $functions[] = array('current_timestamp', array('fSQLTranslation', 'sqliteTimestamp'), 0); } foreach ($functions as $function) { if ($this->database->getExtension() == 'pdo') { $this->database->getConnection()->sqliteCreateFunction($function[0], $function[1], $function[2]); } else { sqlite_create_function($this->database->getConnection(), $function[0], $function[1], $function[2]); } } }
/** * Adds a number of math functions to SQLite that MSSQL, MySQL and PostgreSQL have by default * * @return void */ private function createSQLiteFunctions() { $function = array(); $functions[] = array('acos', 'acos', 1); $functions[] = array('asin', 'asin', 1); $functions[] = array('atan', 'atan', 1); $functions[] = array('atan2', 'atan2', 2); $functions[] = array('ceil', 'ceil', 1); $functions[] = array('ceiling', 'ceil', 1); $functions[] = array('cos', 'cos', 1); $functions[] = array('cot', array('fSQLTranslation', 'sqliteCotangent'), 1); $functions[] = array('degrees', 'rad2deg', 1); $functions[] = array('exp', 'exp', 1); $functions[] = array('floor', 'floor', 1); $functions[] = array('ln', 'log', 1); $functions[] = array('log', array('fSQLTranslation', 'sqliteLogBaseFirst'), 2); $functions[] = array('ltrim', 'ltrim', 1); $functions[] = array('pi', 'pi', 0); $functions[] = array('power', 'pow', 2); $functions[] = array('radians', 'deg2rad', 1); $functions[] = array('rtrim', 'rtrim', 1); $functions[] = array('sign', array('fSQLTranslation', 'sqliteSign'), 1); $functions[] = array('sqrt', 'sqrt', 1); $functions[] = array('sin', 'sin', 1); $functions[] = array('tan', 'tan', 1); $functions[] = array('trim', 'trim', 1); if ($this->database->getExtension() == 'sqlite') { $functions[] = array('current_date', array('fSQLTranslation', 'sqliteDate'), 0); $functions[] = array('current_time', array('fSQLTranslation', 'sqliteTime'), 0); $functions[] = array('current_timestamp', array('fSQLTranslation', 'sqliteTimestamp'), 0); // If SQLite was compiled with ISO-8859-* string handling, we override as best we can // with custom functions that return the correct values. We can't fix LIKE and GLOB // but they don't matter as much since the encoding only affects case transformations. if (strtolower(sqlite_libencoding()) != 'utf-8') { $functions[] = array('length', array('fSQLTranslation', 'sqliteLength'), 1); $functions[] = array('substr', array('fSQLTranslation', 'sqliteSubstr'), 3); } } foreach ($functions as $function) { if ($this->database->getExtension() == 'pdo') { $this->database->getConnection()->sqliteCreateFunction($function[0], $function[1], $function[2]); } else { sqlite_create_function($this->database->getConnection(), $function[0], $function[1], $function[2]); } } }