0byt3m1n1-V2
Path:
/
home
/
a
/
c
/
a
/
academiac
/
www
/
[
Home
]
File: mysql.php.tar
home/academiac/www/plugins/content/geshi/geshi/geshi/mysql.php 0000644 00000053441 15137314026 0020526 0 ustar 00 <?php // no direct access defined('_JEXEC') or die; /************************************************************************************* * mysql.php * --------- * Author: Marjolein Katsma (marjolein.is.back@gmail.com) * Copyright: (c) 2008 Marjolein Katsma (http://blog.marjoleinkatsma.com/) * Release Version: 1.0.8.10 * Date Started: 2008-12-12 * * MySQL language file for GeSHi. * * Based on original MySQL language file by Carl Fürstenberg (2004); brought * up-to-date for current MySQL versions, and with more classes for different * types of keywords; several minor errors were corrected as well. * * Some "classes" have two groups here: this is to allow for the fact that some * keywords in MySQL have a double function: many of those are either a function * (must be immediately followed by an opening bracket) or some other keyword: * so they can be distinguished by the presence (or not) of that opening bracket. * (An immediately following opening bracket is a default rule for functions in * MySQL, though this may be overridden; because it's only a default, we use a * regex lookahead only where necessary to distinguish homonyms, not generally * to match any function.) * Other keywords with double usage cannot be distinguished and are classified * in the "Mix" category. * ************************************************************************************* * * This file is part of GeSHi. * * GeSHi is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * GeSHi is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GeSHi; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * ************************************************************************************/ $language_data = array ( 'LANG_NAME' => 'MySQL', //'COMMENT_SINGLE' => array(1 =>'--', 2 => '#'), // '--' MUST be folowed by whitespace,not necessarily a space 'COMMENT_SINGLE' => array( 1 =>'-- ', 2 => '#' ), 'COMMENT_REGEXP' => array( 1 => "/(?:--\s).*?$/", // double dash followed by any whitespace ), 'COMMENT_MULTI' => array('/*' => '*/'), 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, // @@@ would be nice if this could be defined per group! 'QUOTEMARKS' => array("'", '"', '`'), 'ESCAPE_CHAR' => '\\', // by default only, can be specified 'ESCAPE_REGEXP' => array( 1 => "/[_%]/", // search wildcards ), 'NUMBERS' => GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO, 'KEYWORDS' => array( 1 => array( // Mix: statement keywords and keywords that don't fit in any other // category, or have multiple usage/meanings 'ACTION','ADD','AFTER','ALGORITHM','ALL','ALTER','ANALYZE','ANY', 'ASC','AS','BDB','BEGIN','BERKELEYDB','BINARY','BTREE','CALL', 'CASCADED','CASCADE','CHAIN','CHECK','COLUMNS','COLUMN','COMMENT', 'COMMIT','COMMITTED','CONSTRAINT','CONTAINS SQL','CONSISTENT', 'CONVERT','CREATE','CROSS','DATA','DATABASES', 'DECLARE','DEFINER','DELAYED','DELETE','DESCRIBE','DESC', 'DETERMINISTIC','DISABLE','DISCARD','DISTINCTROW','DISTINCT','DO', 'DROP','DUMPFILE','DUPLICATE KEY','ENABLE','ENCLOSED BY','ENGINE', 'ERRORS','ESCAPED BY','EXISTS','EXPLAIN','EXTENDED','FIELDS', 'FIRST','FOR EACH ROW','FORCE','FOREIGN KEY','FROM','FULL', 'FUNCTION','GLOBAL','GRANT','GROUP BY','HANDLER','HASH','HAVING', 'HELP','HIGH_PRIORITY','IF NOT EXISTS','IGNORE','IMPORT','INDEX', 'INFILE','INNER','INNODB','INOUT','INTO','INVOKER', 'ISOLATION LEVEL','JOIN','KEYS','KEY','KILL','LANGUAGE SQL','LAST', 'LIMIT','LINES','LOAD','LOCAL','LOCK','LOW_PRIORITY', 'MASTER_SERVER_ID','MATCH','MERGE','MIDDLEINT','MODIFIES SQL DATA', 'MODIFY','MRG_MYISAM','NATURAL','NEXT','NO SQL','NO','ON', 'OPTIMIZE','OPTIONALLY','OPTION','ORDER BY','OUTER','OUTFILE','OUT', 'PARTIAL','PREV','PRIMARY KEY','PRIVILEGES','PROCEDURE','PURGE', 'QUICK','READS SQL DATA','READ','REFERENCES','RELEASE','RENAME', 'REPEATABLE','REQUIRE','RESTRICT','RETURNS','REVOKE', 'ROLLBACK','ROUTINE','RTREE','SAVEPOINT','SELECT', 'SERIALIZABLE','SESSION','SET','SHARE MODE','SHOW','SIMPLE', 'SNAPSHOT','SOME','SONAME','SQL SECURITY','SQL_BIG_RESULT', 'SQL_BUFFER_RESULT','SQL_CACHE','SQL_CALC_FOUND_ROWS', 'SQL_NO_CACHE','SQL_SMALL_RESULT','SSL','START','STARTING BY', 'STATUS','STRAIGHT_JOIN','STRIPED','TABLESPACE','TABLES','TABLE', 'TEMPORARY','TEMPTABLE','TERMINATED BY','TO','TRANSACTIONS', 'TRANSACTION','TRIGGER','TYPES','TYPE','UNCOMMITTED','UNDEFINED', 'UNION','UNLOCK_TABLES','UPDATE','USAGE','USE','USER_RESOURCES', 'USING','VALUES','VALUE','VIEW','WARNINGS','WHERE','WITH ROLLUP', 'WITH','WORK','WRITE', ), 2 => array( //No ( must follow // Mix: statement keywords distinguished from functions by the same name "CURRENT_USER", "DATABASE", "IN", "INSERT", "DEFAULT", "REPLACE", "SCHEMA", "TRUNCATE" ), 3 => array( // Values (Constants) 'FALSE','NULL','TRUE', ), 4 => array( // Column Data Types 'BIGINT','BIT','BLOB','BOOLEAN','BOOL','CHARACTER VARYING', 'CHAR VARYING','DATETIME','DECIMAL','DEC','DOUBLE PRECISION', 'DOUBLE','ENUM','FIXED','FLOAT','GEOMETRYCOLLECTION','GEOMETRY', 'INTEGER','INT','LINESTRING','LONGBLOB','LONGTEXT','MEDIUMBLOB', 'MEDIUMINT','MEDIUMTEXT','MULTIPOINT','MULTILINESTRING', 'MULTIPOLYGON','NATIONAL CHARACTER','NATIONAL CHARACTER VARYING', 'NATIONAL CHAR VARYING','NATIONAL VARCHAR','NCHAR VARCHAR','NCHAR', 'NUMERIC','POINT','POLYGON','REAL','SERIAL', 'SMALLINT','TEXT','TIMESTAMP','TINYBLOB','TINYINT', 'TINYTEXT','VARBINARY','VARCHARACTER','VARCHAR', ), 5 => array( //No ( must follow // Column data types distinguished from functions by the same name "CHAR", "DATE", "TIME" ), 6 => array( // Table, Column & Index Attributes 'AUTO_INCREMENT','AVG_ROW_LENGTH','BOTH','CHECKSUM','CONNECTION', 'DATA DIRECTORY','DEFAULT NULL','DELAY_KEY_WRITE','FULLTEXT', 'INDEX DIRECTORY','INSERT_METHOD','LEADING','MAX_ROWS','MIN_ROWS', 'NOT NULL','PACK_KEYS','ROW_FORMAT','SERIAL DEFAULT VALUE','SIGNED', 'SPATIAL','TRAILING','UNIQUE','UNSIGNED','ZEROFILL' ), 7 => array( //No ( must follow // Column attribute distinguished from function by the same name "CHARSET" ), 8 => array( // Date and Time Unit Specifiers 'DAY_HOUR','DAY_MICROSECOND','DAY_MINUTE','DAY_SECOND', 'HOUR_MICROSECOND','HOUR_MINUTE','HOUR_SECOND', 'MINUTE_MICROSECOND','MINUTE_SECOND', 'SECOND_MICROSECOND','YEAR_MONTH' ), 9 => array( //No ( must follow // Date-time unit specifiers distinguished from functions by the same name "DAY", "HOUR", "MICROSECOND", "MINUTE", "MONTH", "QUARTER", "SECOND", "WEEK", "YEAR" ), 10 => array( // Operators (see also Symbols) 'AND','BETWEEN','CHARACTER SET','COLLATE','DIV','IS NOT NULL', 'IS NOT','IS NULL','IS','LIKE','NOT','OFFSET','OR','REGEXP','RLIKE', 'SOUNDS LIKE','XOR' ), 11 => array( //No ( must follow // Operator distinghuished from function by the same name "INTERVAL" ), 12 => array( // Control Flow (functions) 'CASE','ELSE','END','IFNULL','IF','NULLIF','THEN','WHEN', ), 13 => array( // String Functions 'ASCII','BIN','BIT_LENGTH','CHAR_LENGTH','CHARACTER_LENGTH', 'CONCAT_WS','CONCAT','ELT','EXPORT_SET','FIELD', 'FIND_IN_SET','FORMAT','HEX','INSTR','LCASE','LEFT','LENGTH', 'LOAD_FILE','LOCATE','LOWER','LPAD','LTRIM','MAKE_SET','MID', 'OCTET_LENGTH','ORD','POSITION','QUOTE','REPEAT','REVERSE', 'RIGHT','RPAD','RTRIM','SOUNDEX','SPACE','STRCMP','SUBSTRING_INDEX', 'SUBSTRING','TRIM','UCASE','UNHEX','UPPER', ), 14 => array( //A ( must follow // String functions distinguished from other keywords by the same name "INSERT", "REPLACE", "CHAR" ), 15 => array( // Numeric Functions 'ABS','ACOS','ASIN','ATAN2','ATAN','CEILING','CEIL', 'CONV','COS','COT','CRC32','DEGREES','EXP','FLOOR','LN','LOG10', 'LOG2','LOG','MOD','OCT','PI','POWER','POW','RADIANS','RAND', 'ROUND','SIGN','SIN','SQRT','TAN', ), 16 => array( //A ( must follow // Numeric function distinguished from other keyword by the same name "TRUNCATE" ), 17 => array( // Date and Time Functions 'ADDDATE','ADDTIME','CONVERT_TZ','CURDATE','CURRENT_DATE', 'CURRENT_TIME','CURRENT_TIMESTAMP','CURTIME','DATE_ADD', 'DATE_FORMAT','DATE_SUB','DATEDIFF','DAYNAME','DAYOFMONTH', 'DAYOFWEEK','DAYOFYEAR','EXTRACT','FROM_DAYS','FROM_UNIXTIME', 'GET_FORMAT','LAST_DAY','LOCALTIME','LOCALTIMESTAMP','MAKEDATE', 'MAKETIME','MONTHNAME','NOW','PERIOD_ADD', 'PERIOD_DIFF','SEC_TO_TIME','STR_TO_DATE','SUBDATE','SUBTIME', 'SYSDATE','TIME_FORMAT','TIME_TO_SEC', 'TIMESTAMPADD','TIMESTAMPDIFF','TO_DAYS', 'UNIX_TIMESTAMP','UTC_DATE','UTC_TIME','UTC_TIMESTAMP','WEEKDAY', 'WEEKOFYEAR','YEARWEEK', ), 18 => array( //A ( must follow // Date-time functions distinguished from other keywords by the same name "DATE", "DAY", "HOUR", "MICROSECOND", "MINUTE", "MONTH", "QUARTER", "SECOND", "TIME", "WEEK", "YEAR" ), 19 => array( // Comparison Functions 'COALESCE','GREATEST','ISNULL','LEAST', ), 20 => array( //A ( must follow // Comparison functions distinguished from other keywords by the same name "IN", "INTERVAL" ), 21 => array( // Encryption and Compression Functions 'AES_DECRYPT','AES_ENCRYPT','COMPRESS','DECODE','DES_DECRYPT', 'DES_ENCRYPT','ENCODE','ENCRYPT','MD5','OLD_PASSWORD','PASSWORD', 'SHA1','SHA','UNCOMPRESS','UNCOMPRESSED_LENGTH', ), 22 => array( // GROUP BY (aggregate) Functions 'AVG','BIT_AND','BIT_OR','BIT_XOR','COUNT','GROUP_CONCAT', 'MAX','MIN','STDDEV_POP','STDDEV_SAMP','STDDEV','STD','SUM', 'VAR_POP','VAR_SAMP','VARIANCE', ), 23 => array( // Information Functions 'BENCHMARK','COERCIBILITY','COLLATION','CONNECTION_ID', 'FOUND_ROWS','LAST_INSERT_ID','ROW_COUNT', 'SESSION_USER','SYSTEM_USER','USER','VERSION', ), 24 => array( //A ( must follow // Information functions distinguished from other keywords by the same name "CURRENT_USER", "DATABASE", "SCHEMA", "CHARSET" ), 25 => array( // Miscellaneous Functions 'ExtractValue','BIT_COUNT','GET_LOCK','INET_ATON','INET_NTOA', 'IS_FREE_LOCK','IS_USED_LOCK','MASTER_POS_WAIT','NAME_CONST', 'RELEASE_LOCK','SLEEP','UpdateXML','UUID', ), 26 => array( //A ( must follow // Miscellaneous function distinguished from other keyword by the same name "DEFAULT" ), 27 => array( // Geometry Functions 'Area','AsBinary','AsText','AsWKB','AsWKT','Boundary','Buffer', 'Centroid','Contains','ConvexHull','Crosses', 'Difference','Dimension','Disjoint','Distance', 'EndPoint','Envelope','Equals','ExteriorRing', 'GLength','GeomCollFromText','GeomCollFromWKB','GeomFromText', 'GeomFromWKB','GeometryCollectionFromText', 'GeometryCollectionFromWKB','GeometryFromText','GeometryFromWKB', 'GeometryN','GeometryType', 'InteriorRingN','Intersection','Intersects','IsClosed','IsEmpty', 'IsRing','IsSimple', 'LineFromText','LineFromWKB','LineStringFromText', 'LineStringFromWKB', 'MBRContains','MBRDisjoint','MBREqual','MBRIntersects', 'MBROverlaps','MBRTouches','MBRWithin','MLineFromText', 'MLineFromWKB','MPointFromText','MPointFromWKB','MPolyFromText', 'MPolyFromWKB','MultiLineStringFromText','MultiLineStringFromWKB', 'MultiPointFromText','MultiPointFromWKB','MultiPolygonFromText', 'MultiPolygonFromWKB', 'NumGeometries','NumInteriorRings','NumPoints', 'Overlaps', 'PointFromText','PointFromWKB','PointN','PointOnSurface', 'PolyFromText','PolyFromWKB','PolygonFromText','PolygonFromWKB', 'Related','SRID','StartPoint','SymDifference', 'Touches', 'Union', 'Within', 'X', 'Y', ), ), 'SYMBOLS' => array( 1 => array( /* Operators */ '=', ':=', // assignment operators '||', '&&', '!', // locical operators '=', '<=>', '>=', '>', '<=', '<', '<>', '!=', // comparison operators '|', '&', '^', '~', '<<', '>>', // bitwise operators '-', '+', '*', '/', '%', // numerical operators ), 2 => array( /* Other syntactical symbols */ '(', ')', ',', ';', ), ), 'CASE_SENSITIVE' => array( GESHI_COMMENTS => false, 1 => false, 2 => false, 3 => false, 4 => false, 5 => false, 6 => false, 7 => false, 8 => false, 9 => false, 10 => false, 11 => false, 12 => false, 13 => false, 13 => false, 14 => false, 15 => false, 16 => false, 17 => false, 18 => false, 19 => false, 20 => false, 21 => false, 22 => false, 23 => false, 24 => false, 25 => false, 26 => false, 27 => false, ), 'STYLES' => array( 'KEYWORDS' => array( 1 => 'color: #990099; font-weight: bold;', // mix 2 => 'color: #990099; font-weight: bold;', // mix 3 => 'color: #9900FF; font-weight: bold;', // constants 4 => 'color: #999900; font-weight: bold;', // column data types 5 => 'color: #999900; font-weight: bold;', // column data types 6 => 'color: #FF9900; font-weight: bold;', // attributes 7 => 'color: #FF9900; font-weight: bold;', // attributes 8 => 'color: #9900FF; font-weight: bold;', // date-time units 9 => 'color: #9900FF; font-weight: bold;', // date-time units 10 => 'color: #CC0099; font-weight: bold;', // operators 11 => 'color: #CC0099; font-weight: bold;', // operators 12 => 'color: #009900;', // control flow (functions) 13 => 'color: #000099;', // string functions 14 => 'color: #000099;', // string functions 15 => 'color: #000099;', // numeric functions 16 => 'color: #000099;', // numeric functions 17 => 'color: #000099;', // date-time functions 18 => 'color: #000099;', // date-time functions 19 => 'color: #000099;', // comparison functions 20 => 'color: #000099;', // comparison functions 21 => 'color: #000099;', // encryption functions 22 => 'color: #000099;', // aggregate functions 23 => 'color: #000099;', // information functions 24 => 'color: #000099;', // information functions 25 => 'color: #000099;', // miscellaneous functions 26 => 'color: #000099;', // miscellaneous functions 27 => 'color: #00CC00;', // geometry functions ), 'COMMENTS' => array( 'MULTI' => 'color: #808000; font-style: italic;', 1 => 'color: #808080; font-style: italic;', 2 => 'color: #808080; font-style: italic;' ), 'ESCAPE_CHAR' => array( 0 => 'color: #004000; font-weight: bold;', 1 => 'color: #008080; font-weight: bold;' // search wildcards ), 'BRACKETS' => array( 0 => 'color: #FF00FF;' ), 'STRINGS' => array( 0 => 'color: #008000;' ), 'NUMBERS' => array( 0 => 'color: #008080;' ), 'METHODS' => array( ), 'SYMBOLS' => array( 1 => 'color: #CC0099;', // operators 2 => 'color: #000033;', // syntax ), 'SCRIPT' => array( ), 'REGEXPS' => array( ) ), 'URLS' => array( 1 => 'http://search.mysql.com/search?site=refman-%35%31&q={FNAME}', 2 => 'http://search.mysql.com/search?site=refman-%35%31&q={FNAME}', 3 => 'http://search.mysql.com/search?site=refman-%35%31&q={FNAME}', 4 => 'http://search.mysql.com/search?site=refman-%35%31&q={FNAME}', 5 => 'http://search.mysql.com/search?site=refman-%35%31&q={FNAME}', 6 => 'http://search.mysql.com/search?site=refman-%35%31&q={FNAME}', 7 => 'http://search.mysql.com/search?site=refman-%35%31&q={FNAME}', 8 => 'http://search.mysql.com/search?site=refman-%35%31&q={FNAME}', 9 => 'http://search.mysql.com/search?site=refman-%35%31&q={FNAME}', 10 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/non-typed-operators.html', 11 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/non-typed-operators.html', 12 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/control-flow-functions.html', 13 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/string-functions.html', 14 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/string-functions.html', 15 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/numeric-functions.html', 16 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/numeric-functions.html', 17 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/date-and-time-functions.html', 18 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/date-and-time-functions.html', 19 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/comparison-operators.html', 20 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/comparison-operators.html', 21 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/encryption-functions.html', 22 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/group-by-functions-and-modifiers.html', 23 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/information-functions.html', 24 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/information-functions.html', 25 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/func-op-summary-ref.html', 26 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/func-op-summary-ref.html', 27 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/analysing-spatial-information.html', ), 'OOLANG' => false, 'OBJECT_SPLITTERS' => array( ), 'REGEXPS' => array( ), 'STRICT_MODE_APPLIES' => GESHI_NEVER, 'SCRIPT_DELIMITERS' => array( ), 'HIGHLIGHT_STRICT_BLOCK' => array( ), 'TAB_WIDTH' => 4, 'PARSER_CONTROL' => array( 'KEYWORDS' => array( 2 => array( 'DISALLOWED_AFTER' => '(?![\(\w])' ), 5 => array( 'DISALLOWED_AFTER' => '(?![\(\w])' ), 7 => array( 'DISALLOWED_AFTER' => '(?![\(\w])' ), 9 => array( 'DISALLOWED_AFTER' => '(?![\(\w])' ), 11 => array( 'DISALLOWED_AFTER' => '(?![\(\w])' ), 14 => array( 'DISALLOWED_AFTER' => '(?=\()' ), 16 => array( 'DISALLOWED_AFTER' => '(?=\()' ), 18 => array( 'DISALLOWED_AFTER' => '(?=\()' ), 20 => array( 'DISALLOWED_AFTER' => '(?=\()' ), 24 => array( 'DISALLOWED_AFTER' => '(?=\()' ), 26 => array( 'DISALLOWED_AFTER' => '(?=\()' ) ) ) ); ?> home/academiac/www/libraries/joomla/database/database/mysql.php 0000644 00000050560 15137336634 0020653 0 ustar 00 <?php /** * @package Joomla.Platform * @subpackage Database * * @copyright Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE */ defined('JPATH_PLATFORM') or die; JLoader::register('JDatabaseQueryMySQL', dirname(__FILE__) . '/mysqlquery.php'); JLoader::register('JDatabaseExporterMySQL', dirname(__FILE__) . '/mysqlexporter.php'); JLoader::register('JDatabaseImporterMySQL', dirname(__FILE__) . '/mysqlimporter.php'); /** * MySQL database driver * * @package Joomla.Platform * @subpackage Database * @see http://dev.mysql.com/doc/ * @since 11.1 */ class JDatabaseMySQL extends JDatabase { /** * The name of the database driver. * * @var string * @since 11.1 */ public $name = 'mysql'; /** * The character(s) used to quote SQL statement names such as table names or field names, * etc. The child classes should define this as necessary. If a single character string the * same character is used for both sides of the quoted name, else the first character will be * used for the opening quote and the second for the closing quote. * * @var string * @since 11.1 */ protected $nameQuote = '`'; /** * The null or zero representation of a timestamp for the database driver. This should be * defined in child classes to hold the appropriate value for the engine. * * @var string * @since 11.1 */ protected $nullDate = '0000-00-00 00:00:00'; /** * @var string The minimum supported database version. * @since 12.1 */ protected $dbMinimum = '5.0.4'; /** * Constructor. * * @param array $options Array of database options with keys: host, user, password, database, select. * * @since 11.1 */ protected function __construct($options) { // Get some basic values from the options. $options['host'] = (isset($options['host'])) ? $options['host'] : 'localhost'; $options['user'] = (isset($options['user'])) ? $options['user'] : 'root'; $options['password'] = (isset($options['password'])) ? $options['password'] : ''; $options['database'] = (isset($options['database'])) ? $options['database'] : ''; $options['select'] = (isset($options['select'])) ? (bool) $options['select'] : true; // Make sure the MySQL extension for PHP is installed and enabled. if (!function_exists('mysql_connect')) { // Legacy error handling switch based on the JError::$legacy switch. // @deprecated 12.1 if (JError::$legacy) { $this->errorNum = 1; $this->errorMsg = JText::_('JLIB_DATABASE_ERROR_ADAPTER_MYSQL'); return; } else { throw new JDatabaseException(JText::_('JLIB_DATABASE_ERROR_ADAPTER_MYSQL')); } } // Attempt to connect to the server. if (!($this->connection = @ mysql_connect($options['host'], $options['user'], $options['password'], true))) { // Legacy error handling switch based on the JError::$legacy switch. // @deprecated 12.1 if (JError::$legacy) { $this->errorNum = 2; $this->errorMsg = JText::_('JLIB_DATABASE_ERROR_CONNECT_MYSQL'); return; } else { throw new JDatabaseException(JText::_('JLIB_DATABASE_ERROR_CONNECT_MYSQL')); } } // Finalize initialisation parent::__construct($options); // Set sql_mode to non_strict mode mysql_query("SET @@SESSION.sql_mode = '';", $this->connection); // If auto-select is enabled select the given database. if ($options['select'] && !empty($options['database'])) { $this->select($options['database']); } } /** * Destructor. * * @since 11.1 */ public function __destruct() { if (is_resource($this->connection)) { mysql_close($this->connection); } } /** * Method to escape a string for usage in an SQL statement. * * @param string $text The string to be escaped. * @param boolean $extra Optional parameter to provide extra escaping. * * @return string The escaped string. * * @since 11.1 */ public function escape($text, $extra = false) { $result = mysql_real_escape_string($text, $this->getConnection()); if ($extra) { $result = addcslashes($result, '%_'); } return $result; } /** * Test to see if the MySQL connector is available. * * @return boolean True on success, false otherwise. * * @since 11.1 */ public static function test() { return (function_exists('mysql_connect')); } /** * Determines if the connection to the server is active. * * @return boolean True if connected to the database engine. * * @since 11.1 */ public function connected() { if (is_resource($this->connection)) { return mysql_ping($this->connection); } return false; } /** * Drops a table from the database. * * @param string $tableName The name of the database table to drop. * @param boolean $ifExists Optionally specify that the table must exist before it is dropped. * * @return JDatabaseMySQL Returns this object to support chaining. * * @since 11.1 * @throws JDatabaseException */ public function dropTable($tableName, $ifExists = true) { $query = $this->getQuery(true); $this->setQuery('DROP TABLE ' . ($ifExists ? 'IF EXISTS ' : '') . $query->quoteName($tableName)); $this->execute(); return $this; } /** * Get the number of affected rows for the previous executed SQL statement. * * @return integer The number of affected rows. * * @since 11.1 */ public function getAffectedRows() { return mysql_affected_rows($this->connection); } /** * Method to get the database collation in use by sampling a text field of a table in the database. * * @return mixed The collation in use by the database (string) or boolean false if not supported. * * @since 11.1 * @throws JDatabaseException */ public function getCollation() { $this->setQuery('SHOW FULL COLUMNS FROM #__users'); $array = $this->loadAssocList(); return $array['2']['Collation']; } /** * Gets an exporter class object. * * @return JDatabaseExporterMySQL An exporter object. * * @since 11.1 * @throws JDatabaseException */ public function getExporter() { // Make sure we have an exporter class for this driver. if (!class_exists('JDatabaseExporterMySQL')) { throw new JDatabaseException(JText::_('JLIB_DATABASE_ERROR_MISSING_EXPORTER')); } $o = new JDatabaseExporterMySQL; $o->setDbo($this); return $o; } /** * Gets an importer class object. * * @return JDatabaseImporterMySQL An importer object. * * @since 11.1 * @throws JDatabaseException */ public function getImporter() { // Make sure we have an importer class for this driver. if (!class_exists('JDatabaseImporterMySQL')) { throw new JDatabaseException(JText::_('JLIB_DATABASE_ERROR_MISSING_IMPORTER')); } $o = new JDatabaseImporterMySQL; $o->setDbo($this); return $o; } /** * Get the number of returned rows for the previous executed SQL statement. * * @param resource $cursor An optional database cursor resource to extract the row count from. * * @return integer The number of returned rows. * * @since 11.1 */ public function getNumRows($cursor = null) { return mysql_num_rows($cursor ? $cursor : $this->cursor); } /** * Get the current or query, or new JDatabaseQuery object. * * @param boolean $new False to return the last query set, True to return a new JDatabaseQuery object. * * @return mixed The current value of the internal SQL variable or a new JDatabaseQuery object. * * @since 11.1 * @throws JDatabaseException */ public function getQuery($new = false) { if ($new) { // Make sure we have a query class for this driver. if (!class_exists('JDatabaseQueryMySQL')) { throw new JDatabaseException(JText::_('JLIB_DATABASE_ERROR_MISSING_QUERY')); } return new JDatabaseQueryMySQL($this); } else { return $this->sql; } } /** * Shows the table CREATE statement that creates the given tables. * * @param mixed $tables A table name or a list of table names. * * @return array A list of the create SQL for the tables. * * @since 11.1 * @throws JDatabaseException */ public function getTableCreate($tables) { // Initialise variables. $result = array(); // Sanitize input to an array and iterate over the list. settype($tables, 'array'); foreach ($tables as $table) { // Set the query to get the table CREATE statement. $this->setQuery('SHOW CREATE table ' . $this->quoteName($this->escape($table))); $row = $this->loadRow(); // Populate the result array based on the create statements. $result[$table] = $row[1]; } return $result; } /** * Retrieves field information about a given table. * * @param string $table The name of the database table. * @param boolean $typeOnly True to only return field types. * * @return array An array of fields for the database table. * * @since 11.1 * @throws JDatabaseException */ public function getTableColumns($table, $typeOnly = true) { $result = array(); // Set the query to get the table fields statement. $this->setQuery('SHOW FULL COLUMNS FROM ' . $this->quoteName($this->escape($table))); $fields = $this->loadObjectList(); // If we only want the type as the value add just that to the list. if ($typeOnly) { foreach ($fields as $field) { $result[$field->Field] = preg_replace("/[(0-9)]/", '', $field->Type); } } // If we want the whole field data object add that to the list. else { foreach ($fields as $field) { $result[$field->Field] = $field; } } return $result; } /** * Get the details list of keys for a table. * * @param string $table The name of the table. * * @return array An array of the column specification for the table. * * @since 11.1 * @throws JDatabaseException */ public function getTableKeys($table) { // Get the details columns information. $this->setQuery('SHOW KEYS FROM ' . $this->quoteName($table)); $keys = $this->loadObjectList(); return $keys; } /** * Method to get an array of all tables in the database. * * @return array An array of all the tables in the database. * * @since 11.1 * @throws JDatabaseException */ public function getTableList() { // Set the query to get the tables statement. $this->setQuery('SHOW TABLES'); $tables = $this->loadColumn(); return $tables; } /** * Get the version of the database connector. * * @return string The database connector version. * * @since 11.1 */ public function getVersion() { return mysql_get_server_info($this->connection); } /** * Determines if the database engine supports UTF-8 character encoding. * * @return boolean True if supported. * * @since 11.1 * @deprecated 12.1 */ public function hasUTF() { JLog::add('JDatabaseMySQL::hasUTF() is deprecated.', JLog::WARNING, 'deprecated'); return true; } /** * Method to get the auto-incremented value from the last INSERT statement. * * @return integer The value of the auto-increment field from the last inserted row. * * @since 11.1 */ public function insertid() { return mysql_insert_id($this->connection); } /** * Locks a table in the database. * * @param string $table The name of the table to unlock. * * @return JDatabaseMySQL Returns this object to support chaining. * * @since 11.4 * @throws JDatabaseException */ public function lockTable($table) { $this->setQuery('LOCK TABLES ' . $this->quoteName($table) . ' WRITE')->execute(); return $this; } /** * Execute the SQL statement. * * @return mixed A database cursor resource on success, boolean false on failure. * * @since 11.1 * @throws JDatabaseException */ public function execute() { if (!is_resource($this->connection)) { // Legacy error handling switch based on the JError::$legacy switch. // @deprecated 12.1 if (JError::$legacy) { if ($this->debug) { JError::raiseError(500, 'JDatabaseMySQL::query: ' . $this->errorNum . ' - ' . $this->errorMsg); } return false; } else { JLog::add(JText::sprintf('JLIB_DATABASE_QUERY_FAILED', $this->errorNum, $this->errorMsg), JLog::ERROR, 'database'); throw new JDatabaseException($this->errorMsg, $this->errorNum); } } // Take a local copy so that we don't modify the original query and cause issues later $sql = $this->replacePrefix((string) $this->sql); if ($this->limit > 0 || $this->offset > 0) { $sql .= ' LIMIT ' . $this->offset . ', ' . $this->limit; } // If debugging is enabled then let's log the query. if ($this->debug) { // Increment the query counter and add the query to the object queue. $this->count++; $this->log[] = $sql; JLog::add($sql, JLog::DEBUG, 'databasequery'); } // Reset the error values. $this->errorNum = 0; $this->errorMsg = ''; // Execute the query. $this->cursor = mysql_query($sql, $this->connection); // If an error occurred handle it. if (!$this->cursor) { $this->errorNum = (int) mysql_errno($this->connection); $this->errorMsg = (string) mysql_error($this->connection) . ' SQL=' . $sql; // Legacy error handling switch based on the JError::$legacy switch. // @deprecated 12.1 if (JError::$legacy) { if ($this->debug) { JError::raiseError(500, 'JDatabaseMySQL::query: ' . $this->errorNum . ' - ' . $this->errorMsg); } return false; } else { JLog::add(JText::sprintf('JLIB_DATABASE_QUERY_FAILED', $this->errorNum, $this->errorMsg), JLog::ERROR, 'databasequery'); throw new JDatabaseException($this->errorMsg, $this->errorNum); } } return $this->cursor; } /** * Renames a table in the database. * * @param string $oldTable The name of the table to be renamed * @param string $newTable The new name for the table. * @param string $backup Not used by MySQL. * @param string $prefix Not used by MySQL. * * @return JDatabase Returns this object to support chaining. * * @since 11.4 * @throws JDatabaseException */ public function renameTable($oldTable, $newTable, $backup = null, $prefix = null) { $this->setQuery('RENAME TABLE ' . $oldTable . ' TO ' . $newTable)->execute(); return $this; } /** * Select a database for use. * * @param string $database The name of the database to select for use. * * @return boolean True if the database was successfully selected. * * @since 11.1 * @throws JDatabaseException */ public function select($database) { if (!$database) { return false; } if (!mysql_select_db($database, $this->connection)) { // Legacy error handling switch based on the JError::$legacy switch. // @deprecated 12.1 if (JError::$legacy) { $this->errorNum = 3; $this->errorMsg = JText::_('JLIB_DATABASE_ERROR_DATABASE_CONNECT'); return false; } else { throw new JDatabaseException(JText::_('JLIB_DATABASE_ERROR_DATABASE_CONNECT')); } } return true; } /** * Set the connection to use UTF-8 character encoding. * * @return boolean True on success. * * @since 11.1 */ public function setUTF() { return mysql_set_charset('utf8', $this->connection); } /** * Method to commit a transaction. * * @return void * * @since 11.1 * @throws JDatabaseException */ public function transactionCommit() { $this->setQuery('COMMIT'); $this->execute(); } /** * Method to roll back a transaction. * * @return void * * @since 11.1 * @throws JDatabaseException */ public function transactionRollback() { $this->setQuery('ROLLBACK'); $this->execute(); } /** * Method to initialize a transaction. * * @return void * * @since 11.1 * @throws JDatabaseException */ public function transactionStart() { $this->setQuery('START TRANSACTION'); $this->execute(); } /** * Method to fetch a row from the result set cursor as an array. * * @param mixed $cursor The optional result set cursor from which to fetch the row. * * @return mixed Either the next row from the result set or false if there are no more rows. * * @since 11.1 */ protected function fetchArray($cursor = null) { return mysql_fetch_row($cursor ? $cursor : $this->cursor); } /** * Method to fetch a row from the result set cursor as an associative array. * * @param mixed $cursor The optional result set cursor from which to fetch the row. * * @return mixed Either the next row from the result set or false if there are no more rows. * * @since 11.1 */ protected function fetchAssoc($cursor = null) { return mysql_fetch_assoc($cursor ? $cursor : $this->cursor); } /** * Method to fetch a row from the result set cursor as an object. * * @param mixed $cursor The optional result set cursor from which to fetch the row. * @param string $class The class name to use for the returned row object. * * @return mixed Either the next row from the result set or false if there are no more rows. * * @since 11.1 */ protected function fetchObject($cursor = null, $class = 'stdClass') { return mysql_fetch_object($cursor ? $cursor : $this->cursor, $class); } /** * Method to free up the memory used for the result set. * * @param mixed $cursor The optional result set cursor from which to fetch the row. * * @return void * * @since 11.1 */ protected function freeResult($cursor = null) { mysql_free_result($cursor ? $cursor : $this->cursor); } /** * Diagnostic method to return explain information for a query. * * @return string The explain output. * * @since 11.1 * @deprecated 12.1 */ public function explain() { // Deprecation warning. JLog::add('JDatabaseMySQL::explain() is deprecated.', JLog::WARNING, 'deprecated'); // Backup the current query so we can reset it later. $backup = $this->sql; // Prepend the current query with EXPLAIN so we get the diagnostic data. $this->sql = 'EXPLAIN ' . $this->sql; // Execute the query and get the result set cursor. if (!($cursor = $this->execute())) { return null; } // Build the HTML table. $first = true; $buffer = '<table id="explain-sql">'; $buffer .= '<thead><tr><td colspan="99">' . $this->getQuery() . '</td></tr>'; while ($row = $this->fetchAssoc($cursor)) { if ($first) { $buffer .= '<tr>'; foreach ($row as $k => $v) { $buffer .= '<th>' . $k . '</th>'; } $buffer .= '</tr></thead><tbody>'; $first = false; } $buffer .= '<tr>'; foreach ($row as $k => $v) { $buffer .= '<td>' . $v . '</td>'; } $buffer .= '</tr>'; } $buffer .= '</tbody></table>'; // Restore the original query to its state before we ran the explain. $this->sql = $backup; // Free up system resources and return. $this->freeResult($cursor); return $buffer; } /** * Execute a query batch. * * @param boolean $abortOnError Abort on error. * @param boolean $transactionSafe Transaction safe queries. * * @return mixed A database resource if successful, false if not. * * @deprecated 12.1 * @since 11.1 */ public function queryBatch($abortOnError = true, $transactionSafe = false) { // Deprecation warning. JLog::add('JDatabaseMySQL::queryBatch() is deprecated.', JLog::WARNING, 'deprecated'); $sql = $this->replacePrefix((string) $this->sql); $this->errorNum = 0; $this->errorMsg = ''; // If the batch is meant to be transaction safe then we need to wrap it in a transaction. if ($transactionSafe) { $sql = 'START TRANSACTION;' . rtrim($sql, "; \t\r\n\0") . '; COMMIT;'; } $queries = $this->splitSql($sql); $error = 0; foreach ($queries as $query) { $query = trim($query); if ($query != '') { $this->cursor = mysql_query($query, $this->connection); if ($this->debug) { $this->count++; $this->log[] = $query; } if (!$this->cursor) { $error = 1; $this->errorNum .= mysql_errno($this->connection) . ' '; $this->errorMsg .= mysql_error($this->connection) . " SQL=$query <br />"; if ($abortOnError) { return $this->cursor; } } } } return $error ? false : true; } /** * Unlocks tables in the database. * * @return JDatabaseMySQL Returns this object to support chaining. * * @since 11.4 * @throws JDatabaseException */ public function unlockTables() { $this->setQuery('UNLOCK TABLES')->execute(); return $this; } }
©
2018.