.gitignore 0000666 00000000010 13052362027 0006527 0 ustar 00 vendor/
.travis.yml 0000666 00000000103 13052362027 0006653 0 ustar 00 language: php
php:
- 5.4
- 5.3
script: phpunit --coverage-text
LICENSE.txt 0000666 00000002116 13052362027 0006373 0 ustar 00 The MIT License (MIT)
Copyright (c) 2013 Jeremy Dorn
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
README.md 0000666 00000010532 13052362027 0006030 0 ustar 00 SqlFormatter
=============
A lightweight php class for formatting sql statements.
It can automatically indent and add line breaks in addition to syntax highlighting.
History
============
I found myself having to debug auto-generated SQL statements all the time and
wanted some way to easily output formatted HTML without having to include a
huge library or copy and paste into online formatters.
I was originally planning to extract the formatting code from PhpMyAdmin,
but that was 10,000+ lines of code and used global variables.
I saw that other people had the same problem and used Stack Overflow user
losif's answer as a starting point. http://stackoverflow.com/a/3924147
Usage
============
The SqlFormatter class has a static method 'format' which takes a SQL string
as input and returns a formatted HTML block inside a pre tag.
Sample usage:
```php
= NOW()) )
GROUP BY Column1 ORDER BY Column3 DESC LIMIT 5,10";
echo SqlFormatter::format($query);
```
Output:
![](http://jdorn.github.com/sql-formatter/format-highlight.png)
Formatting Only
-------------------------
If you don't want syntax highlighting and only want the indentations and
line breaks, pass in false as the second parameter.
This is useful for outputting to error logs or other non-html formats.
```php
=5.2.4"
},
"require-dev": {
"phpunit/phpunit": "3.7.*"
},
"authors": [
{
"name": "Jeremy Dorn",
"email": "jeremy@jeremydorn.com",
"homepage": "http://jeremydorn.com/"
}
],
"autoload": {
"classmap": ["lib"]
},
"extra": {
"branch-alias": {
"dev-master": "1.3.x-dev"
}
}
}
composer.lock 0000666 00000033632 13052362027 0007260 0 ustar 00 {
"hash": "a709b40d4a35e7077aa40fbd0f78f6c6",
"packages": [
],
"packages-dev": [
{
"name": "phpunit/php-code-coverage",
"version": "1.2.x-dev",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
"reference": "1.2.9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/1.2.9",
"reference": "1.2.9",
"shasum": ""
},
"require": {
"php": ">=5.3.3",
"phpunit/php-file-iterator": ">=1.3.0@stable",
"phpunit/php-text-template": ">=1.1.1@stable",
"phpunit/php-token-stream": ">=1.1.3@stable"
},
"suggest": {
"ext-dom": "*",
"ext-xdebug": ">=2.0.5"
},
"type": "library",
"autoload": {
"classmap": [
"PHP/"
]
},
"notification-url": "https://packagist.org/downloads/",
"include-path": [
""
],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sb@sebastian-bergmann.de",
"role": "lead"
}
],
"description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
"homepage": "https://github.com/sebastianbergmann/php-code-coverage",
"keywords": [
"coverage",
"testing",
"xunit"
],
"time": "2013-02-26 18:55:56"
},
{
"name": "phpunit/php-file-iterator",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-file-iterator.git",
"reference": "2deb24c65ea78e126daa8d45b2089ddc29ec1d26"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/2deb24c65ea78e126daa8d45b2089ddc29ec1d26",
"reference": "2deb24c65ea78e126daa8d45b2089ddc29ec1d26",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"type": "library",
"autoload": {
"classmap": [
"File/"
]
},
"notification-url": "https://packagist.org/downloads/",
"include-path": [
""
],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sb@sebastian-bergmann.de",
"role": "lead"
}
],
"description": "FilterIterator implementation that filters files based on a list of suffixes.",
"homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
"keywords": [
"filesystem",
"iterator"
],
"time": "2013-01-07 10:47:05"
},
{
"name": "phpunit/php-text-template",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-text-template.git",
"reference": "1eeef106193d2f8c539728e566bb4793071a9e18"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/1eeef106193d2f8c539728e566bb4793071a9e18",
"reference": "1eeef106193d2f8c539728e566bb4793071a9e18",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"type": "library",
"autoload": {
"classmap": [
"Text/"
]
},
"notification-url": "https://packagist.org/downloads/",
"include-path": [
""
],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sb@sebastian-bergmann.de",
"role": "lead"
}
],
"description": "Simple template engine.",
"homepage": "https://github.com/sebastianbergmann/php-text-template/",
"keywords": [
"template"
],
"time": "2013-01-07 10:56:17"
},
{
"name": "phpunit/php-timer",
"version": "1.0.x-dev",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-timer.git",
"reference": "ecf7920b27003a9412b07dad79dbb5ad1249e6c3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/ecf7920b27003a9412b07dad79dbb5ad1249e6c3",
"reference": "ecf7920b27003a9412b07dad79dbb5ad1249e6c3",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"type": "library",
"autoload": {
"classmap": [
"PHP/"
]
},
"notification-url": "https://packagist.org/downloads/",
"include-path": [
""
],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sb@sebastian-bergmann.de",
"role": "lead"
}
],
"description": "Utility class for timing",
"homepage": "https://github.com/sebastianbergmann/php-timer/",
"keywords": [
"timer"
],
"time": "2013-01-30 06:08:51"
},
{
"name": "phpunit/php-token-stream",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-token-stream.git",
"reference": "c25dd88e1592e66dee2553c99ef244203d5a1b98"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/c25dd88e1592e66dee2553c99ef244203d5a1b98",
"reference": "c25dd88e1592e66dee2553c99ef244203d5a1b98",
"shasum": ""
},
"require": {
"ext-tokenizer": "*",
"php": ">=5.3.3"
},
"type": "library",
"autoload": {
"classmap": [
"PHP/"
]
},
"notification-url": "https://packagist.org/downloads/",
"include-path": [
""
],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sb@sebastian-bergmann.de",
"role": "lead"
}
],
"description": "Wrapper around PHP's tokenizer extension.",
"homepage": "https://github.com/sebastianbergmann/php-token-stream/",
"keywords": [
"tokenizer"
],
"time": "2013-01-07 10:56:35"
},
{
"name": "phpunit/phpunit",
"version": "3.7.x-dev",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "2c67e52445416bb7c14046b432acd7eb79e4e612"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2c67e52445416bb7c14046b432acd7eb79e4e612",
"reference": "2c67e52445416bb7c14046b432acd7eb79e4e612",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-pcre": "*",
"ext-reflection": "*",
"ext-spl": "*",
"php": ">=5.3.3",
"phpunit/php-code-coverage": ">=1.2.1,<1.3.0",
"phpunit/php-file-iterator": ">=1.3.1",
"phpunit/php-text-template": ">=1.1.1",
"phpunit/php-timer": ">=1.0.2,<1.1.0",
"phpunit/phpunit-mock-objects": ">=1.2.0,<1.3.0",
"symfony/yaml": ">=2.2.0"
},
"require-dev": {
"pear-pear/pear": "1.9.4"
},
"suggest": {
"ext-json": "*",
"ext-simplexml": "*",
"ext-tokenizer": "*",
"phpunit/php-invoker": ">=1.1.0,<1.2.0"
},
"bin": [
"composer/bin/phpunit"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.7.x-dev"
}
},
"autoload": {
"classmap": [
"PHPUnit/"
]
},
"notification-url": "https://packagist.org/downloads/",
"include-path": [
"",
"../../symfony/yaml/"
],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"description": "The PHP Unit Testing framework.",
"homepage": "http://www.phpunit.de/",
"keywords": [
"phpunit",
"testing",
"xunit"
],
"time": "2013-03-11 07:06:05"
},
{
"name": "phpunit/phpunit-mock-objects",
"version": "1.2.x-dev",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
"reference": "d49b5683200b5db9b1c64cb06f52f50d147891c4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/d49b5683200b5db9b1c64cb06f52f50d147891c4",
"reference": "d49b5683200b5db9b1c64cb06f52f50d147891c4",
"shasum": ""
},
"require": {
"php": ">=5.3.3",
"phpunit/php-text-template": ">=1.1.1@stable"
},
"suggest": {
"ext-soap": "*"
},
"type": "library",
"autoload": {
"classmap": [
"PHPUnit/"
]
},
"notification-url": "https://packagist.org/downloads/",
"include-path": [
""
],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sb@sebastian-bergmann.de",
"role": "lead"
}
],
"description": "Mock Object library for PHPUnit",
"homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
"keywords": [
"mock",
"xunit"
],
"time": "2013-02-05 07:46:41"
},
{
"name": "symfony/yaml",
"version": "dev-master",
"target-dir": "Symfony/Component/Yaml",
"source": {
"type": "git",
"url": "https://github.com/symfony/Yaml.git",
"reference": "f198ac28048eeceae852419c076123aaee59cd1c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/Yaml/zipball/f198ac28048eeceae852419c076123aaee59cd1c",
"reference": "f198ac28048eeceae852419c076123aaee59cd1c",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.3-dev"
}
},
"autoload": {
"psr-0": {
"Symfony\\Component\\Yaml\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "http://symfony.com/contributors"
}
],
"description": "Symfony Yaml Component",
"homepage": "http://symfony.com",
"time": "2013-01-31 21:39:01"
}
],
"aliases": [
],
"minimum-stability": "dev",
"stability-flags": [
],
"platform": {
"php": ">=5.2.4"
},
"platform-dev": [
]
}
examples/cli.php 0000666 00000001244 13052362027 0007647 0 ustar 00 Run this php script from the command line to see CLI syntax highlighting and formatting. It support Unix pipes or command line argument style.
";
echo "
* @copyright 2013 Jeremy Dorn
* @license http://opensource.org/licenses/MIT
* @link http://github.com/jdorn/sql-formatter
* @version 1.2.16
*/
class SqlFormatter
{
// Constants for token types
const TOKEN_TYPE_WHITESPACE = 0;
const TOKEN_TYPE_WORD = 1;
const TOKEN_TYPE_QUOTE = 2;
const TOKEN_TYPE_BACKTICK_QUOTE = 3;
const TOKEN_TYPE_RESERVED = 4;
const TOKEN_TYPE_RESERVED_TOPLEVEL = 5;
const TOKEN_TYPE_RESERVED_NEWLINE = 6;
const TOKEN_TYPE_BOUNDARY = 7;
const TOKEN_TYPE_COMMENT = 8;
const TOKEN_TYPE_BLOCK_COMMENT = 9;
const TOKEN_TYPE_NUMBER = 10;
const TOKEN_TYPE_ERROR = 11;
const TOKEN_TYPE_VARIABLE = 12;
// Constants for different components of a token
const TOKEN_TYPE = 0;
const TOKEN_VALUE = 1;
// Reserved words (for syntax highlighting)
protected static $reserved = array(
'ACCESSIBLE', 'ACTION', 'AGAINST', 'AGGREGATE', 'ALGORITHM', 'ALL', 'ALTER', 'ANALYSE', 'ANALYZE', 'AS', 'ASC',
'AUTOCOMMIT', 'AUTO_INCREMENT', 'BACKUP', 'BEGIN', 'BETWEEN', 'BINLOG', 'BOTH', 'CASCADE', 'CASE', 'CHANGE', 'CHANGED', 'CHARACTER SET',
'CHARSET', 'CHECK', 'CHECKSUM', 'COLLATE', 'COLLATION', 'COLUMN', 'COLUMNS', 'COMMENT', 'COMMIT', 'COMMITTED', 'COMPRESSED', 'CONCURRENT',
'CONSTRAINT', 'CONTAINS', 'CONVERT', 'CREATE', 'CROSS', 'CURRENT_TIMESTAMP', 'DATABASE', 'DATABASES', 'DAY', 'DAY_HOUR', 'DAY_MINUTE',
'DAY_SECOND', 'DEFAULT', 'DEFINER', 'DELAYED', 'DELETE', 'DESC', 'DESCRIBE', 'DETERMINISTIC', 'DISTINCT', 'DISTINCTROW', 'DIV',
'DO', 'DUMPFILE', 'DUPLICATE', 'DYNAMIC', 'ELSE', 'ENCLOSED', 'END', 'ENGINE', 'ENGINE_TYPE', 'ENGINES', 'ESCAPE', 'ESCAPED', 'EVENTS', 'EXECUTE',
'EXISTS', 'EXPLAIN', 'EXTENDED', 'FAST', 'FIELDS', 'FILE', 'FIRST', 'FIXED', 'FLUSH', 'FOR', 'FORCE', 'FOREIGN', 'FULL', 'FULLTEXT',
'FUNCTION', 'GLOBAL', 'GRANT', 'GRANTS', 'GROUP_CONCAT', 'HEAP', 'HIGH_PRIORITY', 'HOSTS', 'HOUR', 'HOUR_MINUTE',
'HOUR_SECOND', 'IDENTIFIED', 'IF', 'IFNULL', 'IGNORE', 'IN', 'INDEX', 'INDEXES', 'INFILE', 'INSERT', 'INSERT_ID', 'INSERT_METHOD', 'INTERVAL',
'INTO', 'INVOKER', 'IS', 'ISOLATION', 'KEY', 'KEYS', 'KILL', 'LAST_INSERT_ID', 'LEADING', 'LEVEL', 'LIKE', 'LINEAR',
'LINES', 'LOAD', 'LOCAL', 'LOCK', 'LOCKS', 'LOGS', 'LOW_PRIORITY', 'MARIA', 'MASTER', 'MASTER_CONNECT_RETRY', 'MASTER_HOST', 'MASTER_LOG_FILE',
'MATCH','MAX_CONNECTIONS_PER_HOUR', 'MAX_QUERIES_PER_HOUR', 'MAX_ROWS', 'MAX_UPDATES_PER_HOUR', 'MAX_USER_CONNECTIONS',
'MEDIUM', 'MERGE', 'MINUTE', 'MINUTE_SECOND', 'MIN_ROWS', 'MODE', 'MODIFY',
'MONTH', 'MRG_MYISAM', 'MYISAM', 'NAMES', 'NATURAL', 'NOT', 'NOW()','NULL', 'OFFSET', 'ON', 'OPEN', 'OPTIMIZE', 'OPTION', 'OPTIONALLY',
'ON UPDATE', 'ON DELETE', 'OUTFILE', 'PACK_KEYS', 'PAGE', 'PARTIAL', 'PARTITION', 'PARTITIONS', 'PASSWORD', 'PRIMARY', 'PRIVILEGES', 'PROCEDURE',
'PROCESS', 'PROCESSLIST', 'PURGE', 'QUICK', 'RANGE', 'RAID0', 'RAID_CHUNKS', 'RAID_CHUNKSIZE','RAID_TYPE', 'READ', 'READ_ONLY',
'READ_WRITE', 'REFERENCES', 'REGEXP', 'RELOAD', 'RENAME', 'REPAIR', 'REPEATABLE', 'REPLACE', 'REPLICATION', 'RESET', 'RESTORE', 'RESTRICT',
'RETURN', 'RETURNS', 'REVOKE', 'RLIKE', 'ROLLBACK', 'ROW', 'ROWS', 'ROW_FORMAT', 'SECOND', 'SECURITY', 'SEPARATOR',
'SERIALIZABLE', 'SESSION', 'SHARE', 'SHOW', 'SHUTDOWN', 'SLAVE', 'SONAME', 'SOUNDS', 'SQL', 'SQL_AUTO_IS_NULL', 'SQL_BIG_RESULT',
'SQL_BIG_SELECTS', 'SQL_BIG_TABLES', 'SQL_BUFFER_RESULT', 'SQL_CALC_FOUND_ROWS', 'SQL_LOG_BIN', 'SQL_LOG_OFF', 'SQL_LOG_UPDATE',
'SQL_LOW_PRIORITY_UPDATES', 'SQL_MAX_JOIN_SIZE', 'SQL_QUOTE_SHOW_CREATE', 'SQL_SAFE_UPDATES', 'SQL_SELECT_LIMIT', 'SQL_SLAVE_SKIP_COUNTER',
'SQL_SMALL_RESULT', 'SQL_WARNINGS', 'SQL_CACHE', 'SQL_NO_CACHE', 'START', 'STARTING', 'STATUS', 'STOP', 'STORAGE',
'STRAIGHT_JOIN', 'STRING', 'STRIPED', 'SUPER', 'TABLE', 'TABLES', 'TEMPORARY', 'TERMINATED', 'THEN', 'TO', 'TRAILING', 'TRANSACTIONAL', 'TRUE',
'TRUNCATE', 'TYPE', 'TYPES', 'UNCOMMITTED', 'UNIQUE', 'UNLOCK', 'UNSIGNED', 'USAGE', 'USE', 'USING', 'VARIABLES',
'VIEW', 'WHEN', 'WITH', 'WORK', 'WRITE', 'YEAR_MONTH'
);
// For SQL formatting
// These keywords will all be on their own line
protected static $reserved_toplevel = array(
'SELECT', 'FROM', 'WHERE', 'SET', 'ORDER BY', 'GROUP BY', 'LIMIT', 'DROP',
'VALUES', 'UPDATE', 'HAVING', 'ADD', 'AFTER', 'ALTER TABLE', 'DELETE FROM', 'UNION ALL', 'UNION', 'EXCEPT', 'INTERSECT'
);
protected static $reserved_newline = array(
'LEFT OUTER JOIN', 'RIGHT OUTER JOIN', 'LEFT JOIN', 'RIGHT JOIN', 'OUTER JOIN', 'INNER JOIN', 'JOIN', 'XOR', 'OR', 'AND'
);
protected static $functions = array (
'ABS', 'ACOS', 'ADDDATE', 'ADDTIME', 'AES_DECRYPT', 'AES_ENCRYPT', 'AREA', 'ASBINARY', 'ASCII', 'ASIN', 'ASTEXT', 'ATAN', 'ATAN2',
'AVG', 'BDMPOLYFROMTEXT', 'BDMPOLYFROMWKB', 'BDPOLYFROMTEXT', 'BDPOLYFROMWKB', 'BENCHMARK', 'BIN', 'BIT_AND', 'BIT_COUNT', 'BIT_LENGTH',
'BIT_OR', 'BIT_XOR', 'BOUNDARY', 'BUFFER', 'CAST', 'CEIL', 'CEILING', 'CENTROID', 'CHAR', 'CHARACTER_LENGTH', 'CHARSET', 'CHAR_LENGTH',
'COALESCE', 'COERCIBILITY', 'COLLATION', 'COMPRESS', 'CONCAT', 'CONCAT_WS', 'CONNECTION_ID', 'CONTAINS', 'CONV', 'CONVERT', 'CONVERT_TZ',
'CONVEXHULL', 'COS', 'COT', 'COUNT', 'CRC32', 'CROSSES', 'CURDATE', 'CURRENT_DATE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_USER',
'CURTIME', 'DATABASE', 'DATE', 'DATEDIFF', 'DATE_ADD', 'DATE_DIFF', 'DATE_FORMAT', 'DATE_SUB', 'DAY', 'DAYNAME', 'DAYOFMONTH', 'DAYOFWEEK',
'DAYOFYEAR', 'DECODE', 'DEFAULT', 'DEGREES', 'DES_DECRYPT', 'DES_ENCRYPT', 'DIFFERENCE', 'DIMENSION', 'DISJOINT', 'DISTANCE', 'ELT', 'ENCODE',
'ENCRYPT', 'ENDPOINT', 'ENVELOPE', 'EQUALS', 'EXP', 'EXPORT_SET', 'EXTERIORRING', 'EXTRACT', 'EXTRACTVALUE', 'FIELD', 'FIND_IN_SET', 'FLOOR',
'FORMAT', 'FOUND_ROWS', 'FROM_DAYS', 'FROM_UNIXTIME', 'GEOMCOLLFROMTEXT', 'GEOMCOLLFROMWKB', 'GEOMETRYCOLLECTION', 'GEOMETRYCOLLECTIONFROMTEXT',
'GEOMETRYCOLLECTIONFROMWKB', 'GEOMETRYFROMTEXT', 'GEOMETRYFROMWKB', 'GEOMETRYN', 'GEOMETRYTYPE', 'GEOMFROMTEXT', 'GEOMFROMWKB', 'GET_FORMAT',
'GET_LOCK', 'GLENGTH', 'GREATEST', 'GROUP_CONCAT', 'GROUP_UNIQUE_USERS', 'HEX', 'HOUR', 'IF', 'IFNULL', 'INET_ATON', 'INET_NTOA', 'INSERT', 'INSTR',
'INTERIORRINGN', 'INTERSECTION', 'INTERSECTS', 'INTERVAL', 'ISCLOSED', 'ISEMPTY', 'ISNULL', 'ISRING', 'ISSIMPLE', 'IS_FREE_LOCK', 'IS_USED_LOCK',
'LAST_DAY', 'LAST_INSERT_ID', 'LCASE', 'LEAST', 'LEFT', 'LENGTH', 'LINEFROMTEXT', 'LINEFROMWKB', 'LINESTRING', 'LINESTRINGFROMTEXT', 'LINESTRINGFROMWKB',
'LN', 'LOAD_FILE', 'LOCALTIME', 'LOCALTIMESTAMP', 'LOCATE', 'LOG', 'LOG10', 'LOG2', 'LOWER', 'LPAD', 'LTRIM', 'MAKEDATE', 'MAKETIME', 'MAKE_SET',
'MASTER_POS_WAIT', 'MAX', 'MBRCONTAINS', 'MBRDISJOINT', 'MBREQUAL', 'MBRINTERSECTS', 'MBROVERLAPS', 'MBRTOUCHES', 'MBRWITHIN', 'MD5', 'MICROSECOND',
'MID', 'MIN', 'MINUTE', 'MLINEFROMTEXT', 'MLINEFROMWKB', 'MOD', 'MONTH', 'MONTHNAME', 'MPOINTFROMTEXT', 'MPOINTFROMWKB', 'MPOLYFROMTEXT', 'MPOLYFROMWKB',
'MULTILINESTRING', 'MULTILINESTRINGFROMTEXT', 'MULTILINESTRINGFROMWKB', 'MULTIPOINT', 'MULTIPOINTFROMTEXT', 'MULTIPOINTFROMWKB', 'MULTIPOLYGON',
'MULTIPOLYGONFROMTEXT', 'MULTIPOLYGONFROMWKB', 'NAME_CONST', 'NULLIF', 'NUMGEOMETRIES', 'NUMINTERIORRINGS', 'NUMPOINTS', 'OCT', 'OCTET_LENGTH',
'OLD_PASSWORD', 'ORD', 'OVERLAPS', 'PASSWORD', 'PERIOD_ADD', 'PERIOD_DIFF', 'PI', 'POINT', 'POINTFROMTEXT', 'POINTFROMWKB', 'POINTN', 'POINTONSURFACE',
'POLYFROMTEXT', 'POLYFROMWKB', 'POLYGON', 'POLYGONFROMTEXT', 'POLYGONFROMWKB', 'POSITION', 'POW', 'POWER', 'QUARTER', 'QUOTE', 'RADIANS', 'RAND',
'RELATED', 'RELEASE_LOCK', 'REPEAT', 'REPLACE', 'REVERSE', 'RIGHT', 'ROUND', 'ROW_COUNT', 'RPAD', 'RTRIM', 'SCHEMA', 'SECOND', 'SEC_TO_TIME',
'SESSION_USER', 'SHA', 'SHA1', 'SIGN', 'SIN', 'SLEEP', 'SOUNDEX', 'SPACE', 'SQRT', 'SRID', 'STARTPOINT', 'STD', 'STDDEV', 'STDDEV_POP', 'STDDEV_SAMP',
'STRCMP', 'STR_TO_DATE', 'SUBDATE', 'SUBSTR', 'SUBSTRING', 'SUBSTRING_INDEX', 'SUBTIME', 'SUM', 'SYMDIFFERENCE', 'SYSDATE', 'SYSTEM_USER', 'TAN',
'TIME', 'TIMEDIFF', 'TIMESTAMP', 'TIMESTAMPADD', 'TIMESTAMPDIFF', 'TIME_FORMAT', 'TIME_TO_SEC', 'TOUCHES', 'TO_DAYS', 'TRIM', 'TRUNCATE', 'UCASE',
'UNCOMPRESS', 'UNCOMPRESSED_LENGTH', 'UNHEX', 'UNIQUE_USERS', 'UNIX_TIMESTAMP', 'UPDATEXML', 'UPPER', 'USER', 'UTC_DATE', 'UTC_TIME', 'UTC_TIMESTAMP',
'UUID', 'VARIANCE', 'VAR_POP', 'VAR_SAMP', 'VERSION', 'WEEK', 'WEEKDAY', 'WEEKOFYEAR', 'WITHIN', 'X', 'Y', 'YEAR', 'YEARWEEK'
);
// Punctuation that can be used as a boundary between other tokens
protected static $boundaries = array(',', ';',':', ')', '(', '.', '=', '<', '>', '+', '-', '*', '/', '!', '^', '%', '|', '&', '#');
// For HTML syntax highlighting
// Styles applied to different token types
public static $quote_attributes = 'style="color: blue;"';
public static $backtick_quote_attributes = 'style="color: purple;"';
public static $reserved_attributes = 'style="font-weight:bold;"';
public static $boundary_attributes = '';
public static $number_attributes = 'style="color: green;"';
public static $word_attributes = 'style="color: #333;"';
public static $error_attributes = 'style="background-color: red;"';
public static $comment_attributes = 'style="color: #aaa;"';
public static $variable_attributes = 'style="color: orange;"';
public static $pre_attributes = 'style="color: black; background-color: white;"';
// Boolean - whether or not the current environment is the CLI
// This affects the type of syntax highlighting
// If not defined, it will be determined automatically
public static $cli;
// For CLI syntax highlighting
public static $cli_quote = "\x1b[34;1m";
public static $cli_backtick_quote = "\x1b[35;1m";
public static $cli_reserved = "\x1b[37m";
public static $cli_boundary = "";
public static $cli_number = "\x1b[32;1m";
public static $cli_word = "";
public static $cli_error = "\x1b[31;1;7m";
public static $cli_comment = "\x1b[30;1m";
public static $cli_functions = "\x1b[37m";
public static $cli_variable = "\x1b[36;1m";
// The tab character to use when formatting SQL
public static $tab = ' ';
// This flag tells us if queries need to be enclosed in tags
public static $use_pre = true;
// This flag tells us if SqlFormatted has been initialized
protected static $init;
// Regular expressions for tokenizing
protected static $regex_boundaries;
protected static $regex_reserved;
protected static $regex_reserved_newline;
protected static $regex_reserved_toplevel;
protected static $regex_function;
// Cache variables
// Only tokens shorter than this size will be cached. Somewhere between 10 and 20 seems to work well for most cases.
public static $max_cachekey_size = 15;
protected static $token_cache = array();
protected static $cache_hits = 0;
protected static $cache_misses = 0;
/**
* Get stats about the token cache
* @return Array An array containing the keys 'hits', 'misses', 'entries', and 'size' in bytes
*/
public static function getCacheStats()
{
return array(
'hits'=>self::$cache_hits,
'misses'=>self::$cache_misses,
'entries'=>count(self::$token_cache),
'size'=>strlen(serialize(self::$token_cache))
);
}
/**
* Stuff that only needs to be done once. Builds regular expressions and sorts the reserved words.
*/
protected static function init()
{
if (self::$init) return;
// Sort reserved word list from longest word to shortest, 3x faster than usort
$reservedMap = array_combine(self::$reserved, array_map('strlen', self::$reserved));
arsort($reservedMap);
self::$reserved = array_keys($reservedMap);
// Set up regular expressions
self::$regex_boundaries = '('.implode('|',array_map(array(__CLASS__, 'quote_regex'),self::$boundaries)).')';
self::$regex_reserved = '('.implode('|',array_map(array(__CLASS__, 'quote_regex'),self::$reserved)).')';
self::$regex_reserved_toplevel = str_replace(' ','\\s+','('.implode('|',array_map(array(__CLASS__, 'quote_regex'),self::$reserved_toplevel)).')');
self::$regex_reserved_newline = str_replace(' ','\\s+','('.implode('|',array_map(array(__CLASS__, 'quote_regex'),self::$reserved_newline)).')');
self::$regex_function = '('.implode('|',array_map(array(__CLASS__, 'quote_regex'),self::$functions)).')';
self::$init = true;
}
/**
* Return the next token and token type in a SQL string.
* Quoted strings, comments, reserved words, whitespace, and punctuation are all their own tokens.
*
* @param String $string The SQL string
* @param array $previous The result of the previous getNextToken() call
*
* @return Array An associative array containing the type and value of the token.
*/
protected static function getNextToken($string, $previous = null)
{
// Whitespace
if (preg_match('/^\s+/',$string,$matches)) {
return array(
self::TOKEN_VALUE => $matches[0],
self::TOKEN_TYPE=>self::TOKEN_TYPE_WHITESPACE
);
}
// Comment
if ($string[0] === '#' || (isset($string[1])&&($string[0]==='-'&&$string[1]==='-') || ($string[0]==='/'&&$string[1]==='*'))) {
// Comment until end of line
if ($string[0] === '-' || $string[0] === '#') {
$last = strpos($string, "\n");
$type = self::TOKEN_TYPE_COMMENT;
} else { // Comment until closing comment tag
$last = strpos($string, "*/", 2) + 2;
$type = self::TOKEN_TYPE_BLOCK_COMMENT;
}
if ($last === false) {
$last = strlen($string);
}
return array(
self::TOKEN_VALUE => substr($string, 0, $last),
self::TOKEN_TYPE => $type
);
}
// Quoted String
if ($string[0]==='"' || $string[0]==='\'' || $string[0]==='`') {
$return = array(
self::TOKEN_TYPE => ($string[0]==='`'? self::TOKEN_TYPE_BACKTICK_QUOTE : self::TOKEN_TYPE_QUOTE),
self::TOKEN_VALUE => self::getQuotedString($string)
);
return $return;
}
// User-defined Variable
if ($string[0] === '@' && isset($string[1])) {
$ret = array(
self::TOKEN_VALUE => null,
self::TOKEN_TYPE => self::TOKEN_TYPE_VARIABLE
);
// If the variable name is quoted
if ($string[1]==='"' || $string[1]==='\'' || $string[1]==='`') {
$ret[self::TOKEN_VALUE] = '@'.self::getQuotedString(substr($string,1));
}
// Non-quoted variable name
else {
preg_match('/^(@[a-zA-Z0-9\._\$]+)/',$string,$matches);
if ($matches) {
$ret[self::TOKEN_VALUE] = $matches[1];
}
}
if($ret[self::TOKEN_VALUE] !== null) return $ret;
}
// Number (decimal, binary, or hex)
if (preg_match('/^([0-9]+(\.[0-9]+)?|0x[0-9a-fA-F]+|0b[01]+)($|\s|"\'`|'.self::$regex_boundaries.')/',$string,$matches)) {
return array(
self::TOKEN_VALUE => $matches[1],
self::TOKEN_TYPE=>self::TOKEN_TYPE_NUMBER
);
}
// Boundary Character (punctuation and symbols)
if (preg_match('/^('.self::$regex_boundaries.')/',$string,$matches)) {
return array(
self::TOKEN_VALUE => $matches[1],
self::TOKEN_TYPE => self::TOKEN_TYPE_BOUNDARY
);
}
// A reserved word cannot be preceded by a '.'
// this makes it so in "mytable.from", "from" is not considered a reserved word
if (!$previous || !isset($previous[self::TOKEN_VALUE]) || $previous[self::TOKEN_VALUE] !== '.') {
$upper = strtoupper($string);
// Top Level Reserved Word
if (preg_match('/^('.self::$regex_reserved_toplevel.')($|\s|'.self::$regex_boundaries.')/', $upper,$matches)) {
return array(
self::TOKEN_TYPE=>self::TOKEN_TYPE_RESERVED_TOPLEVEL,
self::TOKEN_VALUE=>substr($string,0,strlen($matches[1]))
);
}
// Newline Reserved Word
if (preg_match('/^('.self::$regex_reserved_newline.')($|\s|'.self::$regex_boundaries.')/', $upper,$matches)) {
return array(
self::TOKEN_TYPE=>self::TOKEN_TYPE_RESERVED_NEWLINE,
self::TOKEN_VALUE=>substr($string,0,strlen($matches[1]))
);
}
// Other Reserved Word
if (preg_match('/^('.self::$regex_reserved.')($|\s|'.self::$regex_boundaries.')/', $upper,$matches)) {
return array(
self::TOKEN_TYPE=>self::TOKEN_TYPE_RESERVED,
self::TOKEN_VALUE=>substr($string,0,strlen($matches[1]))
);
}
}
// A function must be suceeded by '('
// this makes it so "count(" is considered a function, but "count" alone is not
$upper = strtoupper($string);
// function
if (preg_match('/^('.self::$regex_function.'[(]|\s|[)])/', $upper,$matches)) {
return array(
self::TOKEN_TYPE=>self::TOKEN_TYPE_RESERVED,
self::TOKEN_VALUE=>substr($string,0,strlen($matches[1])-1)
);
}
// Non reserved word
preg_match('/^(.*?)($|\s|["\'`]|'.self::$regex_boundaries.')/',$string,$matches);
return array(
self::TOKEN_VALUE => $matches[1],
self::TOKEN_TYPE => self::TOKEN_TYPE_WORD
);
}
protected static function getQuotedString($string)
{
$ret = null;
// This checks for the following patterns:
// 1. backtick quoted string using `` to escape
// 2. double quoted string using "" or \" to escape
// 3. single quoted string using '' or \' to escape
if ( preg_match('/^(((`[^`]*($|`))+)|(("[^"\\\\]*(?:\\\\.[^"\\\\]*)*("|$))+)|((\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*(\'|$))+))/s', $string, $matches)) {
$ret = $matches[1];
}
return $ret;
}
/**
* Takes a SQL string and breaks it into tokens.
* Each token is an associative array with type and value.
*
* @param String $string The SQL string
*
* @return Array An array of tokens.
*/
protected static function tokenize($string)
{
self::init();
$tokens = array();
// Used for debugging if there is an error while tokenizing the string
$original_length = strlen($string);
// Used to make sure the string keeps shrinking on each iteration
$old_string_len = strlen($string) + 1;
$token = null;
$current_length = strlen($string);
// Keep processing the string until it is empty
while ($current_length) {
// If the string stopped shrinking, there was a problem
if ($old_string_len <= $current_length) {
$tokens[] = array(
self::TOKEN_VALUE=>$string,
self::TOKEN_TYPE=>self::TOKEN_TYPE_ERROR
);
return $tokens;
}
$old_string_len = $current_length;
// Determine if we can use caching
if ($current_length >= self::$max_cachekey_size) {
$cacheKey = substr($string,0,self::$max_cachekey_size);
} else {
$cacheKey = false;
}
// See if the token is already cached
if ($cacheKey && isset(self::$token_cache[$cacheKey])) {
// Retrieve from cache
$token = self::$token_cache[$cacheKey];
$token_length = strlen($token[self::TOKEN_VALUE]);
self::$cache_hits++;
} else {
// Get the next token and the token type
$token = self::getNextToken($string, $token);
$token_length = strlen($token[self::TOKEN_VALUE]);
self::$cache_misses++;
// If the token is shorter than the max length, store it in cache
if ($cacheKey && $token_length < self::$max_cachekey_size) {
self::$token_cache[$cacheKey] = $token;
}
}
$tokens[] = $token;
// Advance the string
$string = substr($string, $token_length);
$current_length -= $token_length;
}
return $tokens;
}
/**
* Format the whitespace in a SQL string to make it easier to read.
*
* @param String $string The SQL string
* @param boolean $highlight If true, syntax highlighting will also be performed
*
* @return String The SQL string with HTML styles and formatting wrapped in a tag
*/
public static function format($string, $highlight=true)
{
// This variable will be populated with formatted html
$return = '';
// Use an actual tab while formatting and then switch out with self::$tab at the end
$tab = "\t";
$indent_level = 0;
$newline = false;
$inline_parentheses = false;
$increase_special_indent = false;
$increase_block_indent = false;
$indent_types = array();
$added_newline = false;
$inline_count = 0;
$inline_indented = false;
$clause_limit = false;
// Tokenize String
$original_tokens = self::tokenize($string);
// Remove existing whitespace
$tokens = array();
foreach ($original_tokens as $i=>$token) {
if ($token[self::TOKEN_TYPE] !== self::TOKEN_TYPE_WHITESPACE) {
$token['i'] = $i;
$tokens[] = $token;
}
}
// Format token by token
foreach ($tokens as $i=>$token) {
// Get highlighted token if doing syntax highlighting
if ($highlight) {
$highlighted = self::highlightToken($token);
} else { // If returning raw text
$highlighted = $token[self::TOKEN_VALUE];
}
// If we are increasing the special indent level now
if ($increase_special_indent) {
$indent_level++;
$increase_special_indent = false;
array_unshift($indent_types,'special');
}
// If we are increasing the block indent level now
if ($increase_block_indent) {
$indent_level++;
$increase_block_indent = false;
array_unshift($indent_types,'block');
}
// If we need a new line before the token
if ($newline) {
$return .= "\n" . str_repeat($tab, $indent_level);
$newline = false;
$added_newline = true;
} else {
$added_newline = false;
}
// Display comments directly where they appear in the source
if ($token[self::TOKEN_TYPE] === self::TOKEN_TYPE_COMMENT || $token[self::TOKEN_TYPE] === self::TOKEN_TYPE_BLOCK_COMMENT) {
if ($token[self::TOKEN_TYPE] === self::TOKEN_TYPE_BLOCK_COMMENT) {
$indent = str_repeat($tab,$indent_level);
$return .= "\n" . $indent;
$highlighted = str_replace("\n","\n".$indent,$highlighted);
}
$return .= $highlighted;
$newline = true;
continue;
}
if ($inline_parentheses) {
// End of inline parentheses
if ($token[self::TOKEN_VALUE] === ')') {
$return = rtrim($return,' ');
if ($inline_indented) {
array_shift($indent_types);
$indent_level --;
$return .= "\n" . str_repeat($tab, $indent_level);
}
$inline_parentheses = false;
$return .= $highlighted . ' ';
continue;
}
if ($token[self::TOKEN_VALUE] === ',') {
if ($inline_count >= 30) {
$inline_count = 0;
$newline = true;
}
}
$inline_count += strlen($token[self::TOKEN_VALUE]);
}
// Opening parentheses increase the block indent level and start a new line
if ($token[self::TOKEN_VALUE] === '(') {
// First check if this should be an inline parentheses block
// Examples are "NOW()", "COUNT(*)", "int(10)", key(`somecolumn`), DECIMAL(7,2)
// Allow up to 3 non-whitespace tokens inside inline parentheses
$length = 0;
for ($j=1;$j<=250;$j++) {
// Reached end of string
if (!isset($tokens[$i+$j])) break;
$next = $tokens[$i+$j];
// Reached closing parentheses, able to inline it
if ($next[self::TOKEN_VALUE] === ')') {
$inline_parentheses = true;
$inline_count = 0;
$inline_indented = false;
break;
}
// Reached an invalid token for inline parentheses
if ($next[self::TOKEN_VALUE]===';' || $next[self::TOKEN_VALUE]==='(') {
break;
}
// Reached an invalid token type for inline parentheses
if ($next[self::TOKEN_TYPE]===self::TOKEN_TYPE_RESERVED_TOPLEVEL || $next[self::TOKEN_TYPE]===self::TOKEN_TYPE_RESERVED_NEWLINE || $next[self::TOKEN_TYPE]===self::TOKEN_TYPE_COMMENT || $next[self::TOKEN_TYPE]===self::TOKEN_TYPE_BLOCK_COMMENT) {
break;
}
$length += strlen($next[self::TOKEN_VALUE]);
}
if ($inline_parentheses && $length > 30) {
$increase_block_indent = true;
$inline_indented = true;
$newline = true;
}
// Take out the preceding space unless there was whitespace there in the original query
if (isset($original_tokens[$token['i']-1]) && $original_tokens[$token['i']-1][self::TOKEN_TYPE] !== self::TOKEN_TYPE_WHITESPACE) {
$return = rtrim($return,' ');
}
if (!$inline_parentheses) {
$increase_block_indent = true;
// Add a newline after the parentheses
$newline = true;
}
}
// Closing parentheses decrease the block indent level
elseif ($token[self::TOKEN_VALUE] === ')') {
// Remove whitespace before the closing parentheses
$return = rtrim($return,' ');
$indent_level--;
// Reset indent level
while ($j=array_shift($indent_types)) {
if ($j==='special') {
$indent_level--;
} else {
break;
}
}
if ($indent_level < 0) {
// This is an error
$indent_level = 0;
if ($highlight) {
$return .= "\n".self::highlightError($token[self::TOKEN_VALUE]);
continue;
}
}
// Add a newline before the closing parentheses (if not already added)
if (!$added_newline) {
$return .= "\n" . str_repeat($tab, $indent_level);
}
}
// Top level reserved words start a new line and increase the special indent level
elseif ($token[self::TOKEN_TYPE] === self::TOKEN_TYPE_RESERVED_TOPLEVEL) {
$increase_special_indent = true;
// If the last indent type was 'special', decrease the special indent for this round
reset($indent_types);
if (current($indent_types)==='special') {
$indent_level--;
array_shift($indent_types);
}
// Add a newline after the top level reserved word
$newline = true;
// Add a newline before the top level reserved word (if not already added)
if (!$added_newline) {
$return .= "\n" . str_repeat($tab, $indent_level);
}
// If we already added a newline, redo the indentation since it may be different now
else {
$return = rtrim($return,$tab).str_repeat($tab, $indent_level);
}
// If the token may have extra whitespace
if (strpos($token[self::TOKEN_VALUE],' ')!==false || strpos($token[self::TOKEN_VALUE],"\n")!==false || strpos($token[self::TOKEN_VALUE],"\t")!==false) {
$highlighted = preg_replace('/\s+/',' ',$highlighted);
}
//if SQL 'LIMIT' clause, start variable to reset newline
if ($token[self::TOKEN_VALUE] === 'LIMIT' && !$inline_parentheses) {
$clause_limit = true;
}
}
// Checks if we are out of the limit clause
elseif ($clause_limit && $token[self::TOKEN_VALUE] !== "," && $token[self::TOKEN_TYPE] !== self::TOKEN_TYPE_NUMBER && $token[self::TOKEN_TYPE] !== self::TOKEN_TYPE_WHITESPACE) {
$clause_limit = false;
}
// Commas start a new line (unless within inline parentheses or SQL 'LIMIT' clause)
elseif ($token[self::TOKEN_VALUE] === ',' && !$inline_parentheses) {
//If the previous TOKEN_VALUE is 'LIMIT', resets new line
if ($clause_limit === true) {
$newline = false;
$clause_limit = false;
}
// All other cases of commas
else {
$newline = true;
}
}
// Newline reserved words start a new line
elseif ($token[self::TOKEN_TYPE] === self::TOKEN_TYPE_RESERVED_NEWLINE) {
// Add a newline before the reserved word (if not already added)
if (!$added_newline) {
$return .= "\n" . str_repeat($tab, $indent_level);
}
// If the token may have extra whitespace
if (strpos($token[self::TOKEN_VALUE],' ')!==false || strpos($token[self::TOKEN_VALUE],"\n")!==false || strpos($token[self::TOKEN_VALUE],"\t")!==false) {
$highlighted = preg_replace('/\s+/',' ',$highlighted);
}
}
// Multiple boundary characters in a row should not have spaces between them (not including parentheses)
elseif ($token[self::TOKEN_TYPE] === self::TOKEN_TYPE_BOUNDARY) {
if ($tokens[$i-1][self::TOKEN_TYPE] === self::TOKEN_TYPE_BOUNDARY) {
if (isset($original_tokens[$token['i']-1]) && $original_tokens[$token['i']-1][self::TOKEN_TYPE] !== self::TOKEN_TYPE_WHITESPACE) {
$return = rtrim($return,' ');
}
}
}
// If the token shouldn't have a space before it
if ($token[self::TOKEN_VALUE] === '.' || $token[self::TOKEN_VALUE] === ',' || $token[self::TOKEN_VALUE] === ';') {
$return = rtrim($return, ' ');
}
$return .= $highlighted.' ';
// If the token shouldn't have a space after it
if ($token[self::TOKEN_VALUE] === '(' || $token[self::TOKEN_VALUE] === '.') {
$return = rtrim($return,' ');
}
// If this is the "-" of a negative number, it shouldn't have a space after it
if($token[self::TOKEN_VALUE] === '-' && isset($tokens[$i+1]) && $tokens[$i+1][self::TOKEN_TYPE] === self::TOKEN_TYPE_NUMBER && isset($tokens[$i-1])) {
$prev = $tokens[$i-1][self::TOKEN_TYPE];
if($prev !== self::TOKEN_TYPE_QUOTE && $prev !== self::TOKEN_TYPE_BACKTICK_QUOTE && $prev !== self::TOKEN_TYPE_WORD && $prev !== self::TOKEN_TYPE_NUMBER) {
$return = rtrim($return,' ');
}
}
}
// If there are unmatched parentheses
if ($highlight && array_search('block',$indent_types) !== false) {
$return .= "\n".self::highlightError("WARNING: unclosed parentheses or section");
}
// Replace tab characters with the configuration tab character
$return = trim(str_replace("\t",self::$tab,$return));
if ($highlight) {
$return = self::output($return);
}
return $return;
}
/**
* Add syntax highlighting to a SQL string
*
* @param String $string The SQL string
*
* @return String The SQL string with HTML styles applied
*/
public static function highlight($string)
{
$tokens = self::tokenize($string);
$return = '';
foreach ($tokens as $token) {
$return .= self::highlightToken($token);
}
return self::output($return);
}
/**
* Split a SQL string into multiple queries.
* Uses ";" as a query delimiter.
*
* @param String $string The SQL string
*
* @return Array An array of individual query strings without trailing semicolons
*/
public static function splitQuery($string)
{
$queries = array();
$current_query = '';
$empty = true;
$tokens = self::tokenize($string);
foreach ($tokens as $token) {
// If this is a query separator
if ($token[self::TOKEN_VALUE] === ';') {
if (!$empty) {
$queries[] = $current_query.';';
}
$current_query = '';
$empty = true;
continue;
}
// If this is a non-empty character
if ($token[self::TOKEN_TYPE] !== self::TOKEN_TYPE_WHITESPACE && $token[self::TOKEN_TYPE] !== self::TOKEN_TYPE_COMMENT && $token[self::TOKEN_TYPE] !== self::TOKEN_TYPE_BLOCK_COMMENT) {
$empty = false;
}
$current_query .= $token[self::TOKEN_VALUE];
}
if (!$empty) {
$queries[] = trim($current_query);
}
return $queries;
}
/**
* Remove all comments from a SQL string
*
* @param String $string The SQL string
*
* @return String The SQL string without comments
*/
public static function removeComments($string)
{
$result = '';
$tokens = self::tokenize($string);
foreach ($tokens as $token) {
// Skip comment tokens
if ($token[self::TOKEN_TYPE] === self::TOKEN_TYPE_COMMENT || $token[self::TOKEN_TYPE] === self::TOKEN_TYPE_BLOCK_COMMENT) {
continue;
}
$result .= $token[self::TOKEN_VALUE];
}
$result = self::format( $result,false);
return $result;
}
/**
* Compress a query by collapsing white space and removing comments
*
* @param String $string The SQL string
*
* @return String The SQL string without comments
*/
public static function compress($string)
{
$result = '';
$tokens = self::tokenize($string);
$whitespace = true;
foreach ($tokens as $token) {
// Skip comment tokens
if ($token[self::TOKEN_TYPE] === self::TOKEN_TYPE_COMMENT || $token[self::TOKEN_TYPE] === self::TOKEN_TYPE_BLOCK_COMMENT) {
continue;
}
// Remove extra whitespace in reserved words (e.g "OUTER JOIN" becomes "OUTER JOIN")
elseif ($token[self::TOKEN_TYPE] === self::TOKEN_TYPE_RESERVED || $token[self::TOKEN_TYPE] === self::TOKEN_TYPE_RESERVED_NEWLINE || $token[self::TOKEN_TYPE] === self::TOKEN_TYPE_RESERVED_TOPLEVEL) {
$token[self::TOKEN_VALUE] = preg_replace('/\s+/',' ',$token[self::TOKEN_VALUE]);
}
if ($token[self::TOKEN_TYPE] === self::TOKEN_TYPE_WHITESPACE) {
// If the last token was whitespace, don't add another one
if ($whitespace) {
continue;
} else {
$whitespace = true;
// Convert all whitespace to a single space
$token[self::TOKEN_VALUE] = ' ';
}
} else {
$whitespace = false;
}
$result .= $token[self::TOKEN_VALUE];
}
return rtrim($result);
}
/**
* Highlights a token depending on its type.
*
* @param Array $token An associative array containing type and value.
*
* @return String HTML code of the highlighted token.
*/
protected static function highlightToken($token)
{
$type = $token[self::TOKEN_TYPE];
if (self::is_cli()) {
$token = $token[self::TOKEN_VALUE];
} else {
$token = htmlentities($token[self::TOKEN_VALUE],ENT_COMPAT,'UTF-8');
}
if ($type===self::TOKEN_TYPE_BOUNDARY) {
return self::highlightBoundary($token);
} elseif ($type===self::TOKEN_TYPE_WORD) {
return self::highlightWord($token);
} elseif ($type===self::TOKEN_TYPE_BACKTICK_QUOTE) {
return self::highlightBacktickQuote($token);
} elseif ($type===self::TOKEN_TYPE_QUOTE) {
return self::highlightQuote($token);
} elseif ($type===self::TOKEN_TYPE_RESERVED) {
return self::highlightReservedWord($token);
} elseif ($type===self::TOKEN_TYPE_RESERVED_TOPLEVEL) {
return self::highlightReservedWord($token);
} elseif ($type===self::TOKEN_TYPE_RESERVED_NEWLINE) {
return self::highlightReservedWord($token);
} elseif ($type===self::TOKEN_TYPE_NUMBER) {
return self::highlightNumber($token);
} elseif ($type===self::TOKEN_TYPE_VARIABLE) {
return self::highlightVariable($token);
} elseif ($type===self::TOKEN_TYPE_COMMENT || $type===self::TOKEN_TYPE_BLOCK_COMMENT) {
return self::highlightComment($token);
}
return $token;
}
/**
* Highlights a quoted string
*
* @param String $value The token's value
*
* @return String HTML code of the highlighted token.
*/
protected static function highlightQuote($value)
{
if (self::is_cli()) {
return self::$cli_quote . $value . "\x1b[0m";
} else {
return '' . $value . '';
}
}
/**
* Highlights a backtick quoted string
*
* @param String $value The token's value
*
* @return String HTML code of the highlighted token.
*/
protected static function highlightBacktickQuote($value)
{
if (self::is_cli()) {
return self::$cli_backtick_quote . $value . "\x1b[0m";
} else {
return '' . $value . '';
}
}
/**
* Highlights a reserved word
*
* @param String $value The token's value
*
* @return String HTML code of the highlighted token.
*/
protected static function highlightReservedWord($value)
{
if (self::is_cli()) {
return self::$cli_reserved . $value . "\x1b[0m";
} else {
return '' . $value . '';
}
}
/**
* Highlights a boundary token
*
* @param String $value The token's value
*
* @return String HTML code of the highlighted token.
*/
protected static function highlightBoundary($value)
{
if ($value==='(' || $value===')') return $value;
if (self::is_cli()) {
return self::$cli_boundary . $value . "\x1b[0m";
} else {
return '' . $value . '';
}
}
/**
* Highlights a number
*
* @param String $value The token's value
*
* @return String HTML code of the highlighted token.
*/
protected static function highlightNumber($value)
{
if (self::is_cli()) {
return self::$cli_number . $value . "\x1b[0m";
} else {
return '' . $value . '';
}
}
/**
* Highlights an error
*
* @param String $value The token's value
*
* @return String HTML code of the highlighted token.
*/
protected static function highlightError($value)
{
if (self::is_cli()) {
return self::$cli_error . $value . "\x1b[0m";
} else {
return '' . $value . '';
}
}
/**
* Highlights a comment
*
* @param String $value The token's value
*
* @return String HTML code of the highlighted token.
*/
protected static function highlightComment($value)
{
if (self::is_cli()) {
return self::$cli_comment . $value . "\x1b[0m";
} else {
return '' . $value . '';
}
}
/**
* Highlights a word token
*
* @param String $value The token's value
*
* @return String HTML code of the highlighted token.
*/
protected static function highlightWord($value)
{
if (self::is_cli()) {
return self::$cli_word . $value . "\x1b[0m";
} else {
return '' . $value . '';
}
}
/**
* Highlights a variable token
*
* @param String $value The token's value
*
* @return String HTML code of the highlighted token.
*/
protected static function highlightVariable($value)
{
if (self::is_cli()) {
return self::$cli_variable . $value . "\x1b[0m";
} else {
return '' . $value . '';
}
}
/**
* Helper function for building regular expressions for reserved words and boundary characters
*
* @param String $a The string to be quoted
*
* @return String The quoted string
*/
private static function quote_regex($a)
{
return preg_quote($a,'/');
}
/**
* Helper function for building string output
*
* @param String $string The string to be quoted
*
* @return String The quoted string
*/
private static function output($string)
{
if (self::is_cli()) {
return $string."\n";
} else {
$string=trim($string);
if (!self::$use_pre) {
return $string;
}
return '' . $string . '
';
}
}
private static function is_cli()
{
if (isset(self::$cli)) return self::$cli;
else return php_sapi_name() === 'cli';
}
}
phpunit.xml.dist 0000666 00000001021 13052362027 0007715 0 ustar 00
./tests
./
./tests
./vendor
./examples
tests/SqlFormatterTest.php 0000666 00000011614 13052362027 0011711 0 ustar 00 assertEquals(trim($html), trim(SqlFormatter::format($sql)));
}
/**
* @dataProvider formatData
*/
function testFormat($sql, $html) {
$this->assertEquals(trim($html), trim(SqlFormatter::format($sql, false)));
}
/**
* @dataProvider highlightData
*/
function testHighlight($sql, $html) {
$this->assertEquals(trim($html), trim(SqlFormatter::highlight($sql)));
}
/**
* @dataProvider highlightCliData
*/
function testCliHighlight($sql, $html) {
SqlFormatter::$cli = true;
$this->assertEquals(trim($html), trim(SqlFormatter::format($sql)));
SqlFormatter::$cli = false;
}
/**
* @dataProvider compressData
*/
function testCompress($sql, $html) {
$this->assertEquals(trim($html), trim(SqlFormatter::compress($sql)));
}
function testUsePre() {
SqlFormatter::$use_pre = false;
$actual = SqlFormatter::highlight("test");
$expected = 'test';
$this->assertEquals($actual,$expected);
SqlFormatter::$use_pre = true;
$actual = SqlFormatter::highlight("test");
$expected = 'test
';
$this->assertEquals($actual,$expected);
}
function testSplitQuery() {
$expected = array(
"SELECT 'test' FROM MyTable;",
"SELECT Column2 FROM SomeOther Table WHERE (test = true);"
);
$actual = SqlFormatter::splitQuery(implode(';',$expected));
$this->assertEquals($expected, $actual);
}
function testSplitQueryEmpty() {
$sql = "SELECT 1;SELECT 2;\n-- This is a comment\n;SELECT 3";
$expected = array("SELECT 1;","SELECT 2;","SELECT 3");
$actual = SqlFormatter::splitQuery($sql);
$this->assertEquals($expected, $actual);
}
function testRemoveComments() {
$expected = SqlFormatter::format("SELECT\n * FROM\n MyTable",false);
$sql = "/* this is a comment */SELECT#This is another comment\n * FROM-- One final comment\n MyTable";
$actual = SqlFormatter::removeComments($sql);
$this->assertEquals($expected, $actual);
}
function testCacheStats() {
$stats = SqlFormatter::getCacheStats();
$this->assertGreaterThan(1,$stats['hits']);
}
function formatHighlightData() {
$formatHighlightData = explode("\n\n",file_get_contents(__DIR__."/format-highlight.html"));
$sqlData = $this->sqlData();
$return = array();
foreach($formatHighlightData as $i=>$data) {
$return[] = array(
$sqlData[$i],
$data
);
}
return $return;
}
function highlightCliData() {
$clidata = explode("\n\n",file_get_contents(__DIR__."/clihighlight.html"));
$sqlData = $this->sqlData();
$return = array();
foreach($clidata as $i=>$data) {
$return[] = array(
$sqlData[$i],
$data
);
}
return $return;
}
function formatData() {
$formatData = explode("\n\n",file_get_contents(__DIR__."/format.html"));
$sqlData = $this->sqlData();
$return = array();
foreach($formatData as $i=>$data) {
$return[] = array(
$sqlData[$i],
$data
);
}
return $return;
}
function compressData() {
$compressData = explode("\n\n",file_get_contents(__DIR__."/compress.html"));
$sqlData = $this->sqlData();
$return = array();
foreach($compressData as $i=>$data) {
$return[] = array(
$sqlData[$i],
$data
);
}
return $return;
}
function highlightData() {
$highlightData = explode("\n\n",file_get_contents(__DIR__."/highlight.html"));
$sqlData = $this->sqlData();
$return = array();
foreach($highlightData as $i=>$data) {
$return[] = array(
$sqlData[$i],
$data
);
}
return $return;
}
function sqlData() {
if(!$this->sqlData) {
$this->sqlData = explode("\n\n",file_get_contents(__DIR__."/sql.sql"));
}
/**
$formatHighlight = array();
$highlight = array();
$format = array();
$compress = array();
$clihighlight = array();
foreach($this->sqlData as $sql) {
$formatHighlight[] = trim(SqlFormatter::format($sql));
$highlight[] = trim(SqlFormatter::highlight($sql));
$format[] = trim(SqlFormatter::format($sql, false));
$compress[] = trim(SqlFormatter::compress($sql));
SqlFormatter::$cli = true;
$clihighlight[] = trim(SqlFormatter::format($sql));
SqlFormatter::$cli = false;
}
file_put_contents(__DIR__."/format-highlight.html", implode("\n\n",$formatHighlight));
file_put_contents(__DIR__."/highlight.html", implode("\n\n",$highlight));
file_put_contents(__DIR__."/format.html", implode("\n\n",$format));
file_put_contents(__DIR__."/compress.html", implode("\n\n",$compress));
file_put_contents(__DIR__."/clihighlight.html", implode("\n\n",$clihighlight));
/**/
return $this->sqlData;
}
}
tests/clihighlight.html 0000666 00000066562 13052362027 0011256 0 ustar 00 [37mSELECT[0m
customer_id[0m,[0m
customer_name[0m,[0m
[37mCOUNT[0m(order_id[0m) [37mas[0m total[0m
[37mFROM[0m
customers[0m
[37mINNER JOIN[0m orders[0m [37mON[0m customers[0m.[0mcustomer_id[0m =[0m orders[0m.[0mcustomer_id[0m
[37mGROUP BY[0m
customer_id[0m,[0m
customer_name[0m
[37mHAVING[0m
[37mCOUNT[0m(order_id[0m) >[0m [32;1m5[0m
[37mORDER BY[0m
[37mCOUNT[0m(order_id[0m) [37mDESC[0m;[0m
[37mUPDATE[0m
customers[0m
[37mSET[0m
totalorders[0m =[0m ordersummary[0m.[0mtotal[0m
[37mFROM[0m
(
[37mSELECT[0m
customer_id[0m,[0m
[37mcount[0m(order_id[0m) [37mAs[0m total[0m
[37mFROM[0m
orders[0m
[37mGROUP BY[0m
customer_id[0m
) [37mAs[0m ordersummary[0m
[37mWHERE[0m
customers[0m.[0mcustomer_id[0m =[0m ordersummary[0m.[0mcustomer_id[0m
[37mSELECT[0m
*[0m
[37mFROM[0m
sometable[0m
[37mUNION ALL[0m
[37mSELECT[0m
*[0m
[37mFROM[0m
someothertable[0m;[0m
[37mSET[0m
[37mNAMES[0m [34;1m'utf8'[0m;[0m
[37mCREATE[0m [37mTABLE[0m [35;1m`PREFIX_address`[0m (
[35;1m`id_address`[0m int[0m([32;1m10[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m [37mauto_increment[0m,[0m
[35;1m`id_country`[0m int[0m([32;1m10[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m,[0m
[35;1m`id_state`[0m int[0m([32;1m10[0m) [37munsigned[0m [37mdefault[0m [37mNULL[0m,[0m
[35;1m`id_customer`[0m int[0m([32;1m10[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m [37mdefault[0m [34;1m'0'[0m,[0m
[35;1m`id_manufacturer`[0m int[0m([32;1m10[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m [37mdefault[0m [34;1m'0'[0m,[0m
[35;1m`id_supplier`[0m int[0m([32;1m10[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m [37mdefault[0m [34;1m'0'[0m,[0m
[35;1m`id_warehouse`[0m int[0m([32;1m10[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m [37mdefault[0m [34;1m'0'[0m,[0m
[35;1m`alias`[0m varchar[0m([32;1m32[0m) [37mNOT[0m [37mNULL[0m,[0m
[35;1m`company`[0m varchar[0m([32;1m64[0m) [37mdefault[0m [37mNULL[0m,[0m
[35;1m`lastname`[0m varchar[0m([32;1m32[0m) [37mNOT[0m [37mNULL[0m,[0m
[35;1m`firstname`[0m varchar[0m([32;1m32[0m) [37mNOT[0m [37mNULL[0m,[0m
[35;1m`address1`[0m varchar[0m([32;1m128[0m) [37mNOT[0m [37mNULL[0m,[0m
[35;1m`address2`[0m varchar[0m([32;1m128[0m) [37mdefault[0m [37mNULL[0m,[0m
[35;1m`postcode`[0m varchar[0m([32;1m12[0m) [37mdefault[0m [37mNULL[0m,[0m
[35;1m`city`[0m varchar[0m([32;1m64[0m) [37mNOT[0m [37mNULL[0m,[0m
[35;1m`other`[0m text[0m,[0m
[35;1m`phone`[0m varchar[0m([32;1m16[0m) [37mdefault[0m [37mNULL[0m,[0m
[35;1m`phone_mobile`[0m varchar[0m([32;1m16[0m) [37mdefault[0m [37mNULL[0m,[0m
[35;1m`vat_number`[0m varchar[0m([32;1m32[0m) [37mdefault[0m [37mNULL[0m,[0m
[35;1m`dni`[0m varchar[0m([32;1m16[0m) [37mDEFAULT[0m [37mNULL[0m,[0m
[35;1m`date_add`[0m datetime[0m [37mNOT[0m [37mNULL[0m,[0m
[35;1m`date_upd`[0m datetime[0m [37mNOT[0m [37mNULL[0m,[0m
[35;1m`active`[0m tinyint[0m([32;1m1[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m [37mdefault[0m [34;1m'1'[0m,[0m
[35;1m`deleted`[0m tinyint[0m([32;1m1[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m [37mdefault[0m [34;1m'0'[0m,[0m
[37mPRIMARY[0m [37mKEY[0m ([35;1m`id_address`[0m),[0m
[37mKEY[0m [35;1m`address_customer`[0m ([35;1m`id_customer`[0m),[0m
[37mKEY[0m [35;1m`id_country`[0m ([35;1m`id_country`[0m),[0m
[37mKEY[0m [35;1m`id_state`[0m ([35;1m`id_state`[0m),[0m
[37mKEY[0m [35;1m`id_manufacturer`[0m ([35;1m`id_manufacturer`[0m),[0m
[37mKEY[0m [35;1m`id_supplier`[0m ([35;1m`id_supplier`[0m),[0m
[37mKEY[0m [35;1m`id_warehouse`[0m ([35;1m`id_warehouse`[0m)
) [37mENGINE[0m =[0m [37mENGINE_TYPE[0m [37mDEFAULT[0m [37mCHARSET[0m =[0m utf8[0m
[37mCREATE[0m [37mTABLE[0m [35;1m`PREFIX_alias`[0m (
[35;1m`id_alias`[0m int[0m([32;1m10[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m [37mauto_increment[0m,[0m
[35;1m`alias`[0m varchar[0m([32;1m255[0m) [37mNOT[0m [37mNULL[0m,[0m
[35;1m`search`[0m varchar[0m([32;1m255[0m) [37mNOT[0m [37mNULL[0m,[0m
[35;1m`active`[0m tinyint[0m([32;1m1[0m) [37mNOT[0m [37mNULL[0m [37mdefault[0m [34;1m'1'[0m,[0m
[37mPRIMARY[0m [37mKEY[0m ([35;1m`id_alias`[0m),[0m
[37mUNIQUE[0m [37mKEY[0m [35;1m`alias`[0m ([35;1m`alias`[0m)
) [37mENGINE[0m =[0m [37mENGINE_TYPE[0m [37mDEFAULT[0m [37mCHARSET[0m =[0m utf8[0m
[37mCREATE[0m [37mTABLE[0m [35;1m`PREFIX_carrier`[0m (
[35;1m`id_carrier`[0m int[0m([32;1m10[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m [37mAUTO_INCREMENT[0m,[0m
[35;1m`id_reference`[0m int[0m([32;1m10[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m,[0m
[35;1m`id_tax_rules_group`[0m int[0m([32;1m10[0m) [37munsigned[0m [37mDEFAULT[0m [34;1m'0'[0m,[0m
[35;1m`name`[0m varchar[0m([32;1m64[0m) [37mNOT[0m [37mNULL[0m,[0m
[35;1m`url`[0m varchar[0m([32;1m255[0m) [37mDEFAULT[0m [37mNULL[0m,[0m
[35;1m`active`[0m tinyint[0m([32;1m1[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m [37mDEFAULT[0m [34;1m'0'[0m,[0m
[35;1m`deleted`[0m tinyint[0m([32;1m1[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m [37mDEFAULT[0m [34;1m'0'[0m,[0m
[35;1m`shipping_handling`[0m tinyint[0m([32;1m1[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m [37mDEFAULT[0m [34;1m'1'[0m,[0m
[35;1m`range_behavior`[0m tinyint[0m([32;1m1[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m [37mDEFAULT[0m [34;1m'0'[0m,[0m
[35;1m`is_module`[0m tinyint[0m([32;1m1[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m [37mDEFAULT[0m [34;1m'0'[0m,[0m
[35;1m`is_free`[0m tinyint[0m([32;1m1[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m [37mDEFAULT[0m [34;1m'0'[0m,[0m
[35;1m`shipping_external`[0m tinyint[0m([32;1m1[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m [37mDEFAULT[0m [34;1m'0'[0m,[0m
[35;1m`need_range`[0m tinyint[0m([32;1m1[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m [37mDEFAULT[0m [34;1m'0'[0m,[0m
[35;1m`external_module_name`[0m varchar[0m([32;1m64[0m) [37mDEFAULT[0m [37mNULL[0m,[0m
[35;1m`shipping_method`[0m int[0m([32;1m2[0m) [37mNOT[0m [37mNULL[0m [37mDEFAULT[0m [34;1m'0'[0m,[0m
[35;1m`position`[0m int[0m([32;1m10[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m [37mdefault[0m [34;1m'0'[0m,[0m
[35;1m`max_width`[0m int[0m([32;1m10[0m) [37mDEFAULT[0m [32;1m0[0m,[0m
[35;1m`max_height`[0m int[0m([32;1m10[0m) [37mDEFAULT[0m [32;1m0[0m,[0m
[35;1m`max_depth`[0m int[0m([32;1m10[0m) [37mDEFAULT[0m [32;1m0[0m,[0m
[35;1m`max_weight`[0m int[0m([32;1m10[0m) [37mDEFAULT[0m [32;1m0[0m,[0m
[35;1m`grade`[0m int[0m([32;1m10[0m) [37mDEFAULT[0m [32;1m0[0m,[0m
[37mPRIMARY[0m [37mKEY[0m ([35;1m`id_carrier`[0m),[0m
[37mKEY[0m [35;1m`deleted`[0m ([35;1m`deleted`[0m,[0m [35;1m`active`[0m),[0m
[37mKEY[0m [35;1m`id_tax_rules_group`[0m ([35;1m`id_tax_rules_group`[0m)
) [37mENGINE[0m =[0m [37mENGINE_TYPE[0m [37mDEFAULT[0m [37mCHARSET[0m =[0m utf8[0m
[37mCREATE[0m [37mTABLE[0m [37mIF[0m [37mNOT[0m [37mEXISTS[0m [35;1m`PREFIX_specific_price_rule`[0m (
[35;1m`id_specific_price_rule`[0m int[0m([32;1m10[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m [37mAUTO_INCREMENT[0m,[0m
[35;1m`name`[0m VARCHAR[0m([32;1m255[0m) [37mNOT[0m [37mNULL[0m,[0m
[35;1m`id_shop`[0m int[0m([32;1m11[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m [37mDEFAULT[0m [34;1m'1'[0m,[0m
[35;1m`id_currency`[0m int[0m([32;1m10[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m,[0m
[35;1m`id_country`[0m int[0m([32;1m10[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m,[0m
[35;1m`id_group`[0m int[0m([32;1m10[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m,[0m
[35;1m`from_quantity`[0m mediumint[0m([32;1m8[0m) [37munsigned[0m [37mNOT[0m [37mNULL[0m,[0m
[35;1m`price`[0m DECIMAL[0m([32;1m20[0m,[0m [32;1m6[0m),[0m
[35;1m`reduction`[0m decimal[0m([32;1m20[0m,[0m [32;1m6[0m) [37mNOT[0m [37mNULL[0m,[0m
[35;1m`reduction_type`[0m enum[0m([34;1m'amount'[0m,[0m [34;1m'percentage'[0m) [37mNOT[0m [37mNULL[0m,[0m
[35;1m`from`[0m datetime[0m [37mNOT[0m [37mNULL[0m,[0m
[35;1m`to`[0m datetime[0m [37mNOT[0m [37mNULL[0m,[0m
[37mPRIMARY[0m [37mKEY[0m ([35;1m`id_specific_price_rule`[0m),[0m
[37mKEY[0m [35;1m`id_product`[0m (
[35;1m`id_shop`[0m,[0m [35;1m`id_currency`[0m,[0m [35;1m`id_country`[0m,[0m
[35;1m`id_group`[0m,[0m [35;1m`from_quantity`[0m,[0m [35;1m`from`[0m,[0m
[35;1m`to`[0m
)
) [37mENGINE[0m =[0m [37mENGINE_TYPE[0m [37mDEFAULT[0m [37mCHARSET[0m =[0m utf8[0m
[37mUPDATE[0m
[35;1m`PREFIX_configuration`[0m
[37mSET[0m
value[0m =[0m [34;1m'6'[0m
[37mWHERE[0m
name[0m =[0m [34;1m'PS_SEARCH_WEIGHT_PNAME'[0m
[37mUPDATE[0m
[35;1m`PREFIX_hook_module`[0m
[37mSET[0m
position[0m =[0m [32;1m1[0m
[37mWHERE[0m
id_hook[0m =[0m (
[37mSELECT[0m
id_hook[0m
[37mFROM[0m
[35;1m`PREFIX_hook`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'displayPayment'[0m
)
[37mAND[0m id_module[0m =[0m (
[37mSELECT[0m
id_module[0m
[37mFROM[0m
[35;1m`PREFIX_module`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'cheque'[0m
)
[37mOR[0m id_hook[0m =[0m (
[37mSELECT[0m
id_hook[0m
[37mFROM[0m
[35;1m`PREFIX_hook`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'displayPaymentReturn'[0m
)
[37mAND[0m id_module[0m =[0m (
[37mSELECT[0m
id_module[0m
[37mFROM[0m
[35;1m`PREFIX_module`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'cheque'[0m
)
[37mOR[0m id_hook[0m =[0m (
[37mSELECT[0m
id_hook[0m
[37mFROM[0m
[35;1m`PREFIX_hook`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'displayHome'[0m
)
[37mAND[0m id_module[0m =[0m (
[37mSELECT[0m
id_module[0m
[37mFROM[0m
[35;1m`PREFIX_module`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'homeslider'[0m
)
[37mOR[0m id_hook[0m =[0m (
[37mSELECT[0m
id_hook[0m
[37mFROM[0m
[35;1m`PREFIX_hook`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'actionAuthentication'[0m
)
[37mAND[0m id_module[0m =[0m (
[37mSELECT[0m
id_module[0m
[37mFROM[0m
[35;1m`PREFIX_module`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'statsdata'[0m
)
[37mOR[0m id_hook[0m =[0m (
[37mSELECT[0m
id_hook[0m
[37mFROM[0m
[35;1m`PREFIX_hook`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'actionShopDataDuplication'[0m
)
[37mAND[0m id_module[0m =[0m (
[37mSELECT[0m
id_module[0m
[37mFROM[0m
[35;1m`PREFIX_module`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'homeslider'[0m
)
[37mOR[0m id_hook[0m =[0m (
[37mSELECT[0m
id_hook[0m
[37mFROM[0m
[35;1m`PREFIX_hook`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'displayTop'[0m
)
[37mAND[0m id_module[0m =[0m (
[37mSELECT[0m
id_module[0m
[37mFROM[0m
[35;1m`PREFIX_module`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'blocklanguages'[0m
)
[37mOR[0m id_hook[0m =[0m (
[37mSELECT[0m
id_hook[0m
[37mFROM[0m
[35;1m`PREFIX_hook`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'actionCustomerAccountAdd'[0m
)
[37mAND[0m id_module[0m =[0m (
[37mSELECT[0m
id_module[0m
[37mFROM[0m
[35;1m`PREFIX_module`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'statsdata'[0m
)
[37mOR[0m id_hook[0m =[0m (
[37mSELECT[0m
id_hook[0m
[37mFROM[0m
[35;1m`PREFIX_hook`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'displayCustomerAccount'[0m
)
[37mAND[0m id_module[0m =[0m (
[37mSELECT[0m
id_module[0m
[37mFROM[0m
[35;1m`PREFIX_module`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'favoriteproducts'[0m
)
[37mOR[0m id_hook[0m =[0m (
[37mSELECT[0m
id_hook[0m
[37mFROM[0m
[35;1m`PREFIX_hook`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'displayAdminStatsModules'[0m
)
[37mAND[0m id_module[0m =[0m (
[37mSELECT[0m
id_module[0m
[37mFROM[0m
[35;1m`PREFIX_module`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'statsvisits'[0m
)
[37mOR[0m id_hook[0m =[0m (
[37mSELECT[0m
id_hook[0m
[37mFROM[0m
[35;1m`PREFIX_hook`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'displayAdminStatsGraphEngine'[0m
)
[37mAND[0m id_module[0m =[0m (
[37mSELECT[0m
id_module[0m
[37mFROM[0m
[35;1m`PREFIX_module`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'graphvisifire'[0m
)
[37mOR[0m id_hook[0m =[0m (
[37mSELECT[0m
id_hook[0m
[37mFROM[0m
[35;1m`PREFIX_hook`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'displayAdminStatsGridEngine'[0m
)
[37mAND[0m id_module[0m =[0m (
[37mSELECT[0m
id_module[0m
[37mFROM[0m
[35;1m`PREFIX_module`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'gridhtml'[0m
)
[37mOR[0m id_hook[0m =[0m (
[37mSELECT[0m
id_hook[0m
[37mFROM[0m
[35;1m`PREFIX_hook`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'displayLeftColumnProduct'[0m
)
[37mAND[0m id_module[0m =[0m (
[37mSELECT[0m
id_module[0m
[37mFROM[0m
[35;1m`PREFIX_module`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'blocksharefb'[0m
)
[37mOR[0m id_hook[0m =[0m (
[37mSELECT[0m
id_hook[0m
[37mFROM[0m
[35;1m`PREFIX_hook`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'actionSearch'[0m
)
[37mAND[0m id_module[0m =[0m (
[37mSELECT[0m
id_module[0m
[37mFROM[0m
[35;1m`PREFIX_module`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'statssearch'[0m
)
[37mOR[0m id_hook[0m =[0m (
[37mSELECT[0m
id_hook[0m
[37mFROM[0m
[35;1m`PREFIX_hook`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'actionCategoryAdd'[0m
)
[37mAND[0m id_module[0m =[0m (
[37mSELECT[0m
id_module[0m
[37mFROM[0m
[35;1m`PREFIX_module`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'blockcategories'[0m
)
[37mOR[0m id_hook[0m =[0m (
[37mSELECT[0m
id_hook[0m
[37mFROM[0m
[35;1m`PREFIX_hook`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'actionCategoryUpdate'[0m
)
[37mAND[0m id_module[0m =[0m (
[37mSELECT[0m
id_module[0m
[37mFROM[0m
[35;1m`PREFIX_module`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'blockcategories'[0m
)
[37mOR[0m id_hook[0m =[0m (
[37mSELECT[0m
id_hook[0m
[37mFROM[0m
[35;1m`PREFIX_hook`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'actionCategoryDelete'[0m
)
[37mAND[0m id_module[0m =[0m (
[37mSELECT[0m
id_module[0m
[37mFROM[0m
[35;1m`PREFIX_module`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'blockcategories'[0m
)
[37mOR[0m id_hook[0m =[0m (
[37mSELECT[0m
id_hook[0m
[37mFROM[0m
[35;1m`PREFIX_hook`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'actionAdminMetaSave'[0m
)
[37mAND[0m id_module[0m =[0m (
[37mSELECT[0m
id_module[0m
[37mFROM[0m
[35;1m`PREFIX_module`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'blockcategories'[0m
)
[37mOR[0m id_hook[0m =[0m (
[37mSELECT[0m
id_hook[0m
[37mFROM[0m
[35;1m`PREFIX_hook`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'displayMyAccountBlock'[0m
)
[37mAND[0m id_module[0m =[0m (
[37mSELECT[0m
id_module[0m
[37mFROM[0m
[35;1m`PREFIX_module`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'favoriteproducts'[0m
)
[37mOR[0m id_hook[0m =[0m (
[37mSELECT[0m
id_hook[0m
[37mFROM[0m
[35;1m`PREFIX_hook`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'displayFooter'[0m
)
[37mAND[0m id_module[0m =[0m (
[37mSELECT[0m
id_module[0m
[37mFROM[0m
[35;1m`PREFIX_module`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'blockreinsurance'[0m
)
[37mALTER TABLE[0m
[35;1m`PREFIX_employee`[0m
[37mADD[0m
[35;1m`bo_color`[0m varchar[0m([32;1m32[0m) [37mdefault[0m [37mNULL[0m
[37mAFTER[0m
[35;1m`stats_date_to`[0m
[37mINSERT[0m [37mINTO[0m [35;1m`PREFIX_cms_category_lang`[0m
[37mVALUES[0m
(
[32;1m1[0m,[0m [32;1m3[0m,[0m [34;1m'Inicio'[0m,[0m [34;1m''[0m,[0m [34;1m'home'[0m,[0m [37mNULL[0m,[0m [37mNULL[0m,[0m
[37mNULL[0m
)
[37mINSERT[0m [37mINTO[0m [35;1m`PREFIX_cms_category`[0m
[37mVALUES[0m
([32;1m1[0m,[0m [32;1m0[0m,[0m [32;1m0[0m,[0m [32;1m1[0m,[0m [37mNOW()[0m,[0m [37mNOW()[0m,[0m [32;1m0[0m)
[37mUPDATE[0m
[35;1m`PREFIX_cms_category`[0m
[37mSET[0m
[35;1m`position`[0m =[0m [32;1m0[0m
[37mALTER TABLE[0m
[35;1m`PREFIX_customer`[0m
[37mADD[0m
[35;1m`note`[0m text[0m
[37mAFTER[0m
[35;1m`secure_key`[0m
[37mALTER TABLE[0m
[35;1m`PREFIX_contact`[0m
[37mADD[0m
[35;1m`customer_service`[0m tinyint[0m([32;1m1[0m) [37mNOT[0m [37mNULL[0m [37mDEFAULT[0m [32;1m0[0m
[37mAFTER[0m
[35;1m`email`[0m
[37mINSERT[0m [37mINTO[0m [35;1m`PREFIX_specific_price`[0m (
[35;1m`id_product`[0m,[0m [35;1m`id_shop`[0m,[0m [35;1m`id_currency`[0m,[0m
[35;1m`id_country`[0m,[0m [35;1m`id_group`[0m,[0m [35;1m`priority`[0m,[0m
[35;1m`price`[0m,[0m [35;1m`from_quantity`[0m,[0m [35;1m`reduction`[0m,[0m
[35;1m`reduction_type`[0m,[0m [35;1m`from`[0m,[0m [35;1m`to`[0m
) (
[37mSELECT[0m
dq[0m.[0m[35;1m`id_product`[0m,[0m
[32;1m1[0m,[0m
[32;1m1[0m,[0m
[32;1m0[0m,[0m
[32;1m1[0m,[0m
[32;1m0[0m,[0m
[32;1m0.00[0m,[0m
dq[0m.[0m[35;1m`quantity`[0m,[0m
[37mIF[0m(
dq[0m.[0m[35;1m`id_discount_type`[0m =[0m [32;1m2[0m,[0m dq[0m.[0m[35;1m`value`[0m,[0m
dq[0m.[0m[35;1m`value`[0m /[0m [32;1m100[0m
),[0m
[37mIF[0m (
dq[0m.[0m[35;1m`id_discount_type`[0m =[0m [32;1m2[0m,[0m [34;1m'amount'[0m,[0m
[34;1m'percentage'[0m
),[0m
[34;1m'0000-00-00 00:00:00'[0m,[0m
[34;1m'0000-00-00 00:00:00'[0m
[37mFROM[0m
[35;1m`PREFIX_discount_quantity`[0m dq[0m
[37mINNER JOIN[0m [35;1m`PREFIX_product`[0m p[0m [37mON[0m (p[0m.[0m[35;1m`id_product`[0m =[0m dq[0m.[0m[35;1m`id_product`[0m)
)
[37mDROP[0m
[37mTABLE[0m [35;1m`PREFIX_discount_quantity`[0m
[37mINSERT[0m [37mINTO[0m [35;1m`PREFIX_specific_price`[0m (
[35;1m`id_product`[0m,[0m [35;1m`id_shop`[0m,[0m [35;1m`id_currency`[0m,[0m
[35;1m`id_country`[0m,[0m [35;1m`id_group`[0m,[0m [35;1m`priority`[0m,[0m
[35;1m`price`[0m,[0m [35;1m`from_quantity`[0m,[0m [35;1m`reduction`[0m,[0m
[35;1m`reduction_type`[0m,[0m [35;1m`from`[0m,[0m [35;1m`to`[0m
) (
[37mSELECT[0m
p[0m.[0m[35;1m`id_product`[0m,[0m
[32;1m1[0m,[0m
[32;1m0[0m,[0m
[32;1m0[0m,[0m
[32;1m0[0m,[0m
[32;1m0[0m,[0m
[32;1m0.00[0m,[0m
[32;1m1[0m,[0m
[37mIF[0m(
p[0m.[0m[35;1m`reduction_price`[0m >[0m [32;1m0[0m,[0m p[0m.[0m[35;1m`reduction_price`[0m,[0m
p[0m.[0m[35;1m`reduction_percent`[0m /[0m [32;1m100[0m
),[0m
[37mIF[0m(
p[0m.[0m[35;1m`reduction_price`[0m >[0m [32;1m0[0m,[0m [34;1m'amount'[0m,[0m
[34;1m'percentage'[0m
),[0m
[37mIF[0m (
p[0m.[0m[35;1m`reduction_from`[0m =[0m p[0m.[0m[35;1m`reduction_to`[0m,[0m
[34;1m'0000-00-00 00:00:00'[0m,[0m p[0m.[0m[35;1m`reduction_from`[0m
),[0m
[37mIF[0m (
p[0m.[0m[35;1m`reduction_from`[0m =[0m p[0m.[0m[35;1m`reduction_to`[0m,[0m
[34;1m'0000-00-00 00:00:00'[0m,[0m p[0m.[0m[35;1m`reduction_to`[0m
)
[37mFROM[0m
[35;1m`PREFIX_product`[0m p[0m
[37mWHERE[0m
p[0m.[0m[35;1m`reduction_price`[0m
[37mOR[0m p[0m.[0m[35;1m`reduction_percent`[0m
)
[37mALTER TABLE[0m
[35;1m`PREFIX_product`[0m
[37mDROP[0m
[35;1m`reduction_price`[0m,[0m
[37mDROP[0m
[35;1m`reduction_percent`[0m,[0m
[37mDROP[0m
[35;1m`reduction_from`[0m,[0m
[37mDROP[0m
[35;1m`reduction_to`[0m
[37mINSERT[0m [37mINTO[0m [35;1m`PREFIX_configuration`[0m (
[35;1m`name`[0m,[0m [35;1m`value`[0m,[0m [35;1m`date_add`[0m,[0m [35;1m`date_upd`[0m
)
[37mVALUES[0m
(
[34;1m'PS_SPECIFIC_PRICE_PRIORITIES'[0m,[0m
[34;1m'id_shop;id_currency;id_country;id_group'[0m,[0m
[37mNOW()[0m,[0m [37mNOW()[0m
),[0m
([34;1m'PS_TAX_DISPLAY'[0m,[0m [32;1m0[0m,[0m [37mNOW()[0m,[0m [37mNOW()[0m),[0m
(
[34;1m'PS_SMARTY_FORCE_COMPILE'[0m,[0m [32;1m1[0m,[0m [37mNOW()[0m,[0m
[37mNOW()[0m
),[0m
(
[34;1m'PS_DISTANCE_UNIT'[0m,[0m [34;1m'km'[0m,[0m [37mNOW()[0m,[0m [37mNOW()[0m
),[0m
(
[34;1m'PS_STORES_DISPLAY_CMS'[0m,[0m [32;1m0[0m,[0m [37mNOW()[0m,[0m
[37mNOW()[0m
),[0m
(
[34;1m'PS_STORES_DISPLAY_FOOTER'[0m,[0m [32;1m0[0m,[0m [37mNOW()[0m,[0m
[37mNOW()[0m
),[0m
(
[34;1m'PS_STORES_SIMPLIFIED'[0m,[0m [32;1m0[0m,[0m [37mNOW()[0m,[0m
[37mNOW()[0m
),[0m
(
[34;1m'PS_STATSDATA_CUSTOMER_PAGESVIEWS'[0m,[0m
[32;1m1[0m,[0m [37mNOW()[0m,[0m [37mNOW()[0m
),[0m
(
[34;1m'PS_STATSDATA_PAGESVIEWS'[0m,[0m [32;1m1[0m,[0m [37mNOW()[0m,[0m
[37mNOW()[0m
),[0m
(
[34;1m'PS_STATSDATA_PLUGINS'[0m,[0m [32;1m1[0m,[0m [37mNOW()[0m,[0m
[37mNOW()[0m
)
[37mINSERT[0m [37mINTO[0m [35;1m`PREFIX_configuration`[0m (
[35;1m`name`[0m,[0m [35;1m`value`[0m,[0m [35;1m`date_add`[0m,[0m [35;1m`date_upd`[0m
)
[37mVALUES[0m
(
[34;1m'PS_CONDITIONS_CMS_ID'[0m,[0m
[37mIFNULL[0m(
(
[37mSELECT[0m
[35;1m`id_cms`[0m
[37mFROM[0m
[35;1m`PREFIX_cms`[0m
[37mWHERE[0m
[35;1m`id_cms`[0m =[0m [32;1m3[0m
),[0m
[32;1m0[0m
),[0m
[37mNOW()[0m,[0m
[37mNOW()[0m
)
[37mCREATE[0m [37mTEMPORARY[0m [37mTABLE[0m [35;1m`PREFIX_configuration_tmp`[0m ([35;1m`value`[0m text[0m)
[37mSET[0m
[36;1m@defaultOOS[0m =[0m (
[37mSELECT[0m
value[0m
[37mFROM[0m
[35;1m`PREFIX_configuration`[0m
[37mWHERE[0m
name[0m =[0m [34;1m'PS_ORDER_OUT_OF_STOCK'[0m
)
[37mUPDATE[0m
[35;1m`PREFIX_product`[0m p[0m
[37mSET[0m
[35;1m`cache_default_attribute`[0m =[0m [32;1m0[0m
[37mWHERE[0m
[35;1m`id_product`[0m [37mNOT[0m [37mIN[0m (
[37mSELECT[0m
[35;1m`id_product`[0m
[37mFROM[0m
[35;1m`PREFIX_product_attribute`[0m
)
[37mINSERT[0m [37mINTO[0m [35;1m`PREFIX_hook`[0m (
[35;1m`name`[0m,[0m [35;1m`title`[0m,[0m [35;1m`description`[0m,[0m [35;1m`position`[0m
)
[37mVALUES[0m
(
[34;1m'processCarrier'[0m,[0m [34;1m'Carrier Process'[0m,[0m
[37mNULL[0m,[0m [32;1m0[0m
)
[37mINSERT[0m [37mINTO[0m [35;1m`PREFIX_stock_mvt_reason_lang`[0m (
[35;1m`id_stock_mvt_reason`[0m,[0m [35;1m`id_lang`[0m,[0m
[35;1m`name`[0m
)
[37mVALUES[0m
([32;1m1[0m,[0m [32;1m1[0m,[0m [34;1m'Order'[0m),[0m
([32;1m1[0m,[0m [32;1m2[0m,[0m [34;1m'Commande'[0m),[0m
([32;1m2[0m,[0m [32;1m1[0m,[0m [34;1m'Missing Stock Movement'[0m),[0m
(
[32;1m2[0m,[0m [32;1m2[0m,[0m [34;1m'Mouvement de stock manquant'[0m
),[0m
([32;1m3[0m,[0m [32;1m1[0m,[0m [34;1m'Restocking'[0m),[0m
([32;1m3[0m,[0m [32;1m2[0m,[0m [34;1m'Réassort'[0m)
[37mINSERT[0m [37mINTO[0m [35;1m`PREFIX_meta_lang`[0m (
[35;1m`id_lang`[0m,[0m [35;1m`id_meta`[0m,[0m [35;1m`title`[0m,[0m [35;1m`url_rewrite`[0m
)
[37mVALUES[0m
(
[32;1m1[0m,[0m
(
[37mSELECT[0m
[35;1m`id_meta`[0m
[37mFROM[0m
[35;1m`PREFIX_meta`[0m
[37mWHERE[0m
[35;1m`page`[0m =[0m [34;1m'authentication'[0m
),[0m
[34;1m'Authentication'[0m,[0m
[34;1m'authentication'[0m
),[0m
(
[32;1m2[0m,[0m
(
[37mSELECT[0m
[35;1m`id_meta`[0m
[37mFROM[0m
[35;1m`PREFIX_meta`[0m
[37mWHERE[0m
[35;1m`page`[0m =[0m [34;1m'authentication'[0m
),[0m
[34;1m'Authentification'[0m,[0m
[34;1m'authentification'[0m
),[0m
(
[32;1m3[0m,[0m
(
[37mSELECT[0m
[35;1m`id_meta`[0m
[37mFROM[0m
[35;1m`PREFIX_meta`[0m
[37mWHERE[0m
[35;1m`page`[0m =[0m [34;1m'authentication'[0m
),[0m
[34;1m'Autenticación'[0m,[0m
[34;1m'autenticacion'[0m
)
[37mLOCK[0m [37mTABLES[0m [35;1m`admin_assert`[0m [37mWRITE[0m
[37mUNLOCK[0m [37mTABLES[0m
[37mDROP[0m
[37mTABLE[0m [37mIF[0m [37mEXISTS[0m [35;1m`admin_role`[0m
[37mSELECT[0m
*[0m
[37mFROM[0m
[30;1m-- This is another comment[0m
MyTable[0m [30;1m# One final comment[0m
[30;1m/* This is a block comment
*/[0m
[37mWHERE[0m
[32;1m1[0m =[0m [32;1m2[0m;[0m
[37mSELECT[0m
[30;1m-- This is a test[0m
[37mSELECT[0m
Test[0m
[37mFROM[0m
Test[0m
[37mWHERE[0m
(MyColumn[0m =[0m [32;1m1[0m)
[31;1;7m)[0m
[37mAND[0m (
(
(SomeOtherColumn[0m =[0m [32;1m2[0m);[0m
[31;1;7mWARNING: unclosed parentheses or section[0m
[37mSELECT[0m
*[0m
[37mLIMIT[0m
[32;1m1[0m;[0m
[37mSELECT[0m
a[0m,[0m
b[0m,[0m
c[0m,[0m
d[0m
[37mFROM[0m
e[0m
[37mLIMIT[0m
[32;1m1[0m,[0m [32;1m2[0m;[0m
[37mSELECT[0m
[32;1m1[0m,[0m
[32;1m2[0m,[0m
[32;1m3[0m
[37mWHERE[0m
a[0m [37min[0m ([32;1m1[0m,[0m [32;1m2[0m,[0m [32;1m3[0m,[0m [32;1m4[0m,[0m [32;1m5[0m)
[37mand[0m b[0m =[0m [32;1m5[0m;[0m
[37mSELECT[0m
count[0m -[0m [32;1m50[0m
[37mWHERE[0m
a[0m -[0m [32;1m50[0m =[0m b[0m
[37mWHERE[0m
[32;1m1[0m
[37mand[0m -[0m[32;1m50[0m
[37mWHERE[0m
-[0m[32;1m50[0m =[0m a[0m
[37mWHERE[0m
a[0m =[0m -[0m[32;1m50[0m
[37mWHERE[0m
[32;1m1[0m
[30;1m/*test*/[0m
-[0m[32;1m50[0m
[37mWHERE[0m
[32;1m1[0m
[37mand[0m -[0m[32;1m50[0m;[0m
[37mSELECT[0m
@[0m
[37mand[0m b[0m;[0m
[37mSELECT[0m
[36;1m@"weird variable name"[0m;[0m
[37mSELECT[0m
[34;1m"no closing quote
[0m tests/compress.html 0000666 00000026205 13052362027 0010440 0 ustar 00 SELECT customer_id, customer_name, COUNT(order_id) as total FROM customers INNER JOIN orders ON customers.customer_id = orders.customer_id GROUP BY customer_id, customer_name HAVING COUNT(order_id) > 5 ORDER BY COUNT(order_id) DESC;
UPDATE customers SET totalorders = ordersummary.total FROM (SELECT customer_id, count(order_id) As total FROM orders GROUP BY customer_id) As ordersummary WHERE customers.customer_id = ordersummary.customer_id
SELECT * FROM sometable UNION ALL SELECT * FROM someothertable;
SET NAMES 'utf8';
CREATE TABLE `PREFIX_address` ( `id_address` int(10) unsigned NOT NULL auto_increment, `id_country` int(10) unsigned NOT NULL, `id_state` int(10) unsigned default NULL, `id_customer` int(10) unsigned NOT NULL default '0', `id_manufacturer` int(10) unsigned NOT NULL default '0', `id_supplier` int(10) unsigned NOT NULL default '0', `id_warehouse` int(10) unsigned NOT NULL default '0', `alias` varchar(32) NOT NULL, `company` varchar(64) default NULL, `lastname` varchar(32) NOT NULL, `firstname` varchar(32) NOT NULL, `address1` varchar(128) NOT NULL, `address2` varchar(128) default NULL, `postcode` varchar(12) default NULL, `city` varchar(64) NOT NULL, `other` text, `phone` varchar(16) default NULL, `phone_mobile` varchar(16) default NULL, `vat_number` varchar(32) default NULL, `dni` varchar(16) DEFAULT NULL, `date_add` datetime NOT NULL, `date_upd` datetime NOT NULL, `active` tinyint(1) unsigned NOT NULL default '1', `deleted` tinyint(1) unsigned NOT NULL default '0', PRIMARY KEY (`id_address`), KEY `address_customer` (`id_customer`), KEY `id_country` (`id_country`), KEY `id_state` (`id_state`), KEY `id_manufacturer` (`id_manufacturer`), KEY `id_supplier` (`id_supplier`), KEY `id_warehouse` (`id_warehouse`) ) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8
CREATE TABLE `PREFIX_alias` ( `id_alias` int(10) unsigned NOT NULL auto_increment, `alias` varchar(255) NOT NULL, `search` varchar(255) NOT NULL, `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`id_alias`), UNIQUE KEY `alias` (`alias`) ) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8
CREATE TABLE `PREFIX_carrier` ( `id_carrier` int(10) unsigned NOT NULL AUTO_INCREMENT, `id_reference` int(10) unsigned NOT NULL, `id_tax_rules_group` int(10) unsigned DEFAULT '0', `name` varchar(64) NOT NULL, `url` varchar(255) DEFAULT NULL, `active` tinyint(1) unsigned NOT NULL DEFAULT '0', `deleted` tinyint(1) unsigned NOT NULL DEFAULT '0', `shipping_handling` tinyint(1) unsigned NOT NULL DEFAULT '1', `range_behavior` tinyint(1) unsigned NOT NULL DEFAULT '0', `is_module` tinyint(1) unsigned NOT NULL DEFAULT '0', `is_free` tinyint(1) unsigned NOT NULL DEFAULT '0', `shipping_external` tinyint(1) unsigned NOT NULL DEFAULT '0', `need_range` tinyint(1) unsigned NOT NULL DEFAULT '0', `external_module_name` varchar(64) DEFAULT NULL, `shipping_method` int(2) NOT NULL DEFAULT '0', `position` int(10) unsigned NOT NULL default '0', `max_width` int(10) DEFAULT 0, `max_height` int(10) DEFAULT 0, `max_depth` int(10) DEFAULT 0, `max_weight` int(10) DEFAULT 0, `grade` int(10) DEFAULT 0, PRIMARY KEY (`id_carrier`), KEY `deleted` (`deleted`,`active`), KEY `id_tax_rules_group` (`id_tax_rules_group`) ) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8
CREATE TABLE IF NOT EXISTS `PREFIX_specific_price_rule` ( `id_specific_price_rule` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL, `id_shop` int(11) unsigned NOT NULL DEFAULT '1', `id_currency` int(10) unsigned NOT NULL, `id_country` int(10) unsigned NOT NULL, `id_group` int(10) unsigned NOT NULL, `from_quantity` mediumint(8) unsigned NOT NULL, `price` DECIMAL(20,6), `reduction` decimal(20,6) NOT NULL, `reduction_type` enum('amount','percentage') NOT NULL, `from` datetime NOT NULL, `to` datetime NOT NULL, PRIMARY KEY (`id_specific_price_rule`), KEY `id_product` (`id_shop`,`id_currency`,`id_country`,`id_group`,`from_quantity`,`from`,`to`) ) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8
UPDATE `PREFIX_configuration` SET value = '6' WHERE name = 'PS_SEARCH_WEIGHT_PNAME'
UPDATE `PREFIX_hook_module` SET position = 1 WHERE id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayPayment') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'cheque') OR id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayPaymentReturn') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'cheque') OR id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayHome') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'homeslider') OR id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'actionAuthentication') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'statsdata') OR id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'actionShopDataDuplication') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'homeslider') OR id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayTop') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blocklanguages') OR id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'actionCustomerAccountAdd') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'statsdata') OR id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayCustomerAccount') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'favoriteproducts') OR id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayAdminStatsModules') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'statsvisits') OR id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayAdminStatsGraphEngine') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'graphvisifire') OR id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayAdminStatsGridEngine') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'gridhtml') OR id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayLeftColumnProduct') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blocksharefb') OR id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'actionSearch') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'statssearch') OR id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'actionCategoryAdd') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blockcategories') OR id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'actionCategoryUpdate') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blockcategories') OR id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'actionCategoryDelete') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blockcategories') OR id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'actionAdminMetaSave') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blockcategories') OR id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayMyAccountBlock') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'favoriteproducts') OR id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayFooter') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blockreinsurance')
ALTER TABLE `PREFIX_employee` ADD `bo_color` varchar(32) default NULL AFTER `stats_date_to`
INSERT INTO `PREFIX_cms_category_lang` VALUES(1, 3, 'Inicio', '', 'home', NULL, NULL, NULL)
INSERT INTO `PREFIX_cms_category` VALUES(1, 0, 0, 1, NOW(), NOW(),0)
UPDATE `PREFIX_cms_category` SET `position` = 0
ALTER TABLE `PREFIX_customer` ADD `note` text AFTER `secure_key`
ALTER TABLE `PREFIX_contact` ADD `customer_service` tinyint(1) NOT NULL DEFAULT 0 AFTER `email`
INSERT INTO `PREFIX_specific_price` (`id_product`, `id_shop`, `id_currency`, `id_country`, `id_group`, `priority`, `price`, `from_quantity`, `reduction`, `reduction_type`, `from`, `to`) ( SELECT dq.`id_product`, 1, 1, 0, 1, 0, 0.00, dq.`quantity`, IF(dq.`id_discount_type` = 2, dq.`value`, dq.`value` / 100), IF (dq.`id_discount_type` = 2, 'amount', 'percentage'), '0000-00-00 00:00:00', '0000-00-00 00:00:00' FROM `PREFIX_discount_quantity` dq INNER JOIN `PREFIX_product` p ON (p.`id_product` = dq.`id_product`) )
DROP TABLE `PREFIX_discount_quantity`
INSERT INTO `PREFIX_specific_price` (`id_product`, `id_shop`, `id_currency`, `id_country`, `id_group`, `priority`, `price`, `from_quantity`, `reduction`, `reduction_type`, `from`, `to`) ( SELECT p.`id_product`, 1, 0, 0, 0, 0, 0.00, 1, IF(p.`reduction_price` > 0, p.`reduction_price`, p.`reduction_percent` / 100), IF(p.`reduction_price` > 0, 'amount', 'percentage'), IF (p.`reduction_from` = p.`reduction_to`, '0000-00-00 00:00:00', p.`reduction_from`), IF (p.`reduction_from` = p.`reduction_to`, '0000-00-00 00:00:00', p.`reduction_to`) FROM `PREFIX_product` p WHERE p.`reduction_price` OR p.`reduction_percent` )
ALTER TABLE `PREFIX_product` DROP `reduction_price`, DROP `reduction_percent`, DROP `reduction_from`, DROP `reduction_to`
INSERT INTO `PREFIX_configuration` (`name`, `value`, `date_add`, `date_upd`) VALUES ('PS_SPECIFIC_PRICE_PRIORITIES', 'id_shop;id_currency;id_country;id_group', NOW(), NOW()), ('PS_TAX_DISPLAY', 0, NOW(), NOW()), ('PS_SMARTY_FORCE_COMPILE', 1, NOW(), NOW()), ('PS_DISTANCE_UNIT', 'km', NOW(), NOW()), ('PS_STORES_DISPLAY_CMS', 0, NOW(), NOW()), ('PS_STORES_DISPLAY_FOOTER', 0, NOW(), NOW()), ('PS_STORES_SIMPLIFIED', 0, NOW(), NOW()), ('PS_STATSDATA_CUSTOMER_PAGESVIEWS', 1, NOW(), NOW()), ('PS_STATSDATA_PAGESVIEWS', 1, NOW(), NOW()), ('PS_STATSDATA_PLUGINS', 1, NOW(), NOW())
INSERT INTO `PREFIX_configuration` (`name`, `value`, `date_add`, `date_upd`) VALUES ('PS_CONDITIONS_CMS_ID', IFNULL((SELECT `id_cms` FROM `PREFIX_cms` WHERE `id_cms` = 3), 0), NOW(), NOW())
CREATE TEMPORARY TABLE `PREFIX_configuration_tmp` ( `value` text )
SET @defaultOOS = (SELECT value FROM `PREFIX_configuration` WHERE name = 'PS_ORDER_OUT_OF_STOCK')
UPDATE `PREFIX_product` p SET `cache_default_attribute` = 0 WHERE `id_product` NOT IN (SELECT `id_product` FROM `PREFIX_product_attribute`)
INSERT INTO `PREFIX_hook` (`name`, `title`, `description`, `position`) VALUES ('processCarrier', 'Carrier Process', NULL, 0)
INSERT INTO `PREFIX_stock_mvt_reason_lang` (`id_stock_mvt_reason`, `id_lang`, `name`) VALUES (1, 1, 'Order'), (1, 2, 'Commande'), (2, 1, 'Missing Stock Movement'), (2, 2, 'Mouvement de stock manquant'), (3, 1, 'Restocking'), (3, 2, 'Réassort')
INSERT INTO `PREFIX_meta_lang` (`id_lang`, `id_meta`, `title`, `url_rewrite`) VALUES (1, (SELECT `id_meta` FROM `PREFIX_meta` WHERE `page` = 'authentication'), 'Authentication', 'authentication'), (2, (SELECT `id_meta` FROM `PREFIX_meta` WHERE `page` = 'authentication'), 'Authentification', 'authentification'), (3, (SELECT `id_meta` FROM `PREFIX_meta` WHERE `page` = 'authentication'), 'Autenticación', 'autenticacion')
LOCK TABLES `admin_assert` WRITE
UNLOCK TABLES
DROP TABLE IF EXISTS `admin_role`
SELECT * FROM MyTable WHERE 1 = 2;
SELECT
SELECT Test FROM Test WHERE ( MyColumn = 1 )) AND ((( SomeOtherColumn = 2);
SELECT * LIMIT 1; SELECT a,b,c,d FROM e LIMIT 1, 2; SELECT 1,2,3 WHERE a in (1,2,3,4,5) and b=5;
SELECT count - 50 WHERE a-50 = b WHERE 1 and - 50 WHERE -50 = a WHERE a = -50 WHERE 1 - 50 WHERE 1 and -50;
SELECT @ and b;
SELECT @"weird variable name";
SELECT "no closing quote tests/format-highlight.html 0000666 00000213215 13052362027 0012041 0 ustar 00 SELECT
customer_id,
customer_name,
COUNT(order_id) as total
FROM
customers
INNER JOIN orders ON customers.customer_id = orders.customer_id
GROUP BY
customer_id,
customer_name
HAVING
COUNT(order_id) > 5
ORDER BY
COUNT(order_id) DESC;
UPDATE
customers
SET
totalorders = ordersummary.total
FROM
(
SELECT
customer_id,
count(order_id) As total
FROM
orders
GROUP BY
customer_id
) As ordersummary
WHERE
customers.customer_id = ordersummary.customer_id
SELECT
*
FROM
sometable
UNION ALL
SELECT
*
FROM
someothertable;
SET
NAMES 'utf8';
CREATE TABLE `PREFIX_address` (
`id_address` int(10) unsigned NOT NULL auto_increment,
`id_country` int(10) unsigned NOT NULL,
`id_state` int(10) unsigned default NULL,
`id_customer` int(10) unsigned NOT NULL default '0',
`id_manufacturer` int(10) unsigned NOT NULL default '0',
`id_supplier` int(10) unsigned NOT NULL default '0',
`id_warehouse` int(10) unsigned NOT NULL default '0',
`alias` varchar(32) NOT NULL,
`company` varchar(64) default NULL,
`lastname` varchar(32) NOT NULL,
`firstname` varchar(32) NOT NULL,
`address1` varchar(128) NOT NULL,
`address2` varchar(128) default NULL,
`postcode` varchar(12) default NULL,
`city` varchar(64) NOT NULL,
`other` text,
`phone` varchar(16) default NULL,
`phone_mobile` varchar(16) default NULL,
`vat_number` varchar(32) default NULL,
`dni` varchar(16) DEFAULT NULL,
`date_add` datetime NOT NULL,
`date_upd` datetime NOT NULL,
`active` tinyint(1) unsigned NOT NULL default '1',
`deleted` tinyint(1) unsigned NOT NULL default '0',
PRIMARY KEY (`id_address`),
KEY `address_customer` (`id_customer`),
KEY `id_country` (`id_country`),
KEY `id_state` (`id_state`),
KEY `id_manufacturer` (`id_manufacturer`),
KEY `id_supplier` (`id_supplier`),
KEY `id_warehouse` (`id_warehouse`)
) ENGINE = ENGINE_TYPE DEFAULT CHARSET = utf8
CREATE TABLE `PREFIX_alias` (
`id_alias` int(10) unsigned NOT NULL auto_increment,
`alias` varchar(255) NOT NULL,
`search` varchar(255) NOT NULL,
`active` tinyint(1) NOT NULL default '1',
PRIMARY KEY (`id_alias`),
UNIQUE KEY `alias` (`alias`)
) ENGINE = ENGINE_TYPE DEFAULT CHARSET = utf8
CREATE TABLE `PREFIX_carrier` (
`id_carrier` int(10) unsigned NOT NULL AUTO_INCREMENT,
`id_reference` int(10) unsigned NOT NULL,
`id_tax_rules_group` int(10) unsigned DEFAULT '0',
`name` varchar(64) NOT NULL,
`url` varchar(255) DEFAULT NULL,
`active` tinyint(1) unsigned NOT NULL DEFAULT '0',
`deleted` tinyint(1) unsigned NOT NULL DEFAULT '0',
`shipping_handling` tinyint(1) unsigned NOT NULL DEFAULT '1',
`range_behavior` tinyint(1) unsigned NOT NULL DEFAULT '0',
`is_module` tinyint(1) unsigned NOT NULL DEFAULT '0',
`is_free` tinyint(1) unsigned NOT NULL DEFAULT '0',
`shipping_external` tinyint(1) unsigned NOT NULL DEFAULT '0',
`need_range` tinyint(1) unsigned NOT NULL DEFAULT '0',
`external_module_name` varchar(64) DEFAULT NULL,
`shipping_method` int(2) NOT NULL DEFAULT '0',
`position` int(10) unsigned NOT NULL default '0',
`max_width` int(10) DEFAULT 0,
`max_height` int(10) DEFAULT 0,
`max_depth` int(10) DEFAULT 0,
`max_weight` int(10) DEFAULT 0,
`grade` int(10) DEFAULT 0,
PRIMARY KEY (`id_carrier`),
KEY `deleted` (`deleted`, `active`),
KEY `id_tax_rules_group` (`id_tax_rules_group`)
) ENGINE = ENGINE_TYPE DEFAULT CHARSET = utf8
CREATE TABLE IF NOT EXISTS `PREFIX_specific_price_rule` (
`id_specific_price_rule` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`id_shop` int(11) unsigned NOT NULL DEFAULT '1',
`id_currency` int(10) unsigned NOT NULL,
`id_country` int(10) unsigned NOT NULL,
`id_group` int(10) unsigned NOT NULL,
`from_quantity` mediumint(8) unsigned NOT NULL,
`price` DECIMAL(20, 6),
`reduction` decimal(20, 6) NOT NULL,
`reduction_type` enum('amount', 'percentage') NOT NULL,
`from` datetime NOT NULL,
`to` datetime NOT NULL,
PRIMARY KEY (`id_specific_price_rule`),
KEY `id_product` (
`id_shop`, `id_currency`, `id_country`,
`id_group`, `from_quantity`, `from`,
`to`
)
) ENGINE = ENGINE_TYPE DEFAULT CHARSET = utf8
UPDATE
`PREFIX_configuration`
SET
value = '6'
WHERE
name = 'PS_SEARCH_WEIGHT_PNAME'
UPDATE
`PREFIX_hook_module`
SET
position = 1
WHERE
id_hook = (
SELECT
id_hook
FROM
`PREFIX_hook`
WHERE
name = 'displayPayment'
)
AND id_module = (
SELECT
id_module
FROM
`PREFIX_module`
WHERE
name = 'cheque'
)
OR id_hook = (
SELECT
id_hook
FROM
`PREFIX_hook`
WHERE
name = 'displayPaymentReturn'
)
AND id_module = (
SELECT
id_module
FROM
`PREFIX_module`
WHERE
name = 'cheque'
)
OR id_hook = (
SELECT
id_hook
FROM
`PREFIX_hook`
WHERE
name = 'displayHome'
)
AND id_module = (
SELECT
id_module
FROM
`PREFIX_module`
WHERE
name = 'homeslider'
)
OR id_hook = (
SELECT
id_hook
FROM
`PREFIX_hook`
WHERE
name = 'actionAuthentication'
)
AND id_module = (
SELECT
id_module
FROM
`PREFIX_module`
WHERE
name = 'statsdata'
)
OR id_hook = (
SELECT
id_hook
FROM
`PREFIX_hook`
WHERE
name = 'actionShopDataDuplication'
)
AND id_module = (
SELECT
id_module
FROM
`PREFIX_module`
WHERE
name = 'homeslider'
)
OR id_hook = (
SELECT
id_hook
FROM
`PREFIX_hook`
WHERE
name = 'displayTop'
)
AND id_module = (
SELECT
id_module
FROM
`PREFIX_module`
WHERE
name = 'blocklanguages'
)
OR id_hook = (
SELECT
id_hook
FROM
`PREFIX_hook`
WHERE
name = 'actionCustomerAccountAdd'
)
AND id_module = (
SELECT
id_module
FROM
`PREFIX_module`
WHERE
name = 'statsdata'
)
OR id_hook = (
SELECT
id_hook
FROM
`PREFIX_hook`
WHERE
name = 'displayCustomerAccount'
)
AND id_module = (
SELECT
id_module
FROM
`PREFIX_module`
WHERE
name = 'favoriteproducts'
)
OR id_hook = (
SELECT
id_hook
FROM
`PREFIX_hook`
WHERE
name = 'displayAdminStatsModules'
)
AND id_module = (
SELECT
id_module
FROM
`PREFIX_module`
WHERE
name = 'statsvisits'
)
OR id_hook = (
SELECT
id_hook
FROM
`PREFIX_hook`
WHERE
name = 'displayAdminStatsGraphEngine'
)
AND id_module = (
SELECT
id_module
FROM
`PREFIX_module`
WHERE
name = 'graphvisifire'
)
OR id_hook = (
SELECT
id_hook
FROM
`PREFIX_hook`
WHERE
name = 'displayAdminStatsGridEngine'
)
AND id_module = (
SELECT
id_module
FROM
`PREFIX_module`
WHERE
name = 'gridhtml'
)
OR id_hook = (
SELECT
id_hook
FROM
`PREFIX_hook`
WHERE
name = 'displayLeftColumnProduct'
)
AND id_module = (
SELECT
id_module
FROM
`PREFIX_module`
WHERE
name = 'blocksharefb'
)
OR id_hook = (
SELECT
id_hook
FROM
`PREFIX_hook`
WHERE
name = 'actionSearch'
)
AND id_module = (
SELECT
id_module
FROM
`PREFIX_module`
WHERE
name = 'statssearch'
)
OR id_hook = (
SELECT
id_hook
FROM
`PREFIX_hook`
WHERE
name = 'actionCategoryAdd'
)
AND id_module = (
SELECT
id_module
FROM
`PREFIX_module`
WHERE
name = 'blockcategories'
)
OR id_hook = (
SELECT
id_hook
FROM
`PREFIX_hook`
WHERE
name = 'actionCategoryUpdate'
)
AND id_module = (
SELECT
id_module
FROM
`PREFIX_module`
WHERE
name = 'blockcategories'
)
OR id_hook = (
SELECT
id_hook
FROM
`PREFIX_hook`
WHERE
name = 'actionCategoryDelete'
)
AND id_module = (
SELECT
id_module
FROM
`PREFIX_module`
WHERE
name = 'blockcategories'
)
OR id_hook = (
SELECT
id_hook
FROM
`PREFIX_hook`
WHERE
name = 'actionAdminMetaSave'
)
AND id_module = (
SELECT
id_module
FROM
`PREFIX_module`
WHERE
name = 'blockcategories'
)
OR id_hook = (
SELECT
id_hook
FROM
`PREFIX_hook`
WHERE
name = 'displayMyAccountBlock'
)
AND id_module = (
SELECT
id_module
FROM
`PREFIX_module`
WHERE
name = 'favoriteproducts'
)
OR id_hook = (
SELECT
id_hook
FROM
`PREFIX_hook`
WHERE
name = 'displayFooter'
)
AND id_module = (
SELECT
id_module
FROM
`PREFIX_module`
WHERE
name = 'blockreinsurance'
)
ALTER TABLE
`PREFIX_employee`
ADD
`bo_color` varchar(32) default NULL
AFTER
`stats_date_to`
INSERT INTO `PREFIX_cms_category_lang`
VALUES
(
1, 3, 'Inicio', '', 'home', NULL, NULL,
NULL
)
INSERT INTO `PREFIX_cms_category`
VALUES
(1, 0, 0, 1, NOW(), NOW(), 0)
UPDATE
`PREFIX_cms_category`
SET
`position` = 0
ALTER TABLE
`PREFIX_customer`
ADD
`note` text
AFTER
`secure_key`
ALTER TABLE
`PREFIX_contact`
ADD
`customer_service` tinyint(1) NOT NULL DEFAULT 0
AFTER
`email`
INSERT INTO `PREFIX_specific_price` (
`id_product`, `id_shop`, `id_currency`,
`id_country`, `id_group`, `priority`,
`price`, `from_quantity`, `reduction`,
`reduction_type`, `from`, `to`
) (
SELECT
dq.`id_product`,
1,
1,
0,
1,
0,
0.00,
dq.`quantity`,
IF(
dq.`id_discount_type` = 2, dq.`value`,
dq.`value` / 100
),
IF (
dq.`id_discount_type` = 2, 'amount',
'percentage'
),
'0000-00-00 00:00:00',
'0000-00-00 00:00:00'
FROM
`PREFIX_discount_quantity` dq
INNER JOIN `PREFIX_product` p ON (p.`id_product` = dq.`id_product`)
)
DROP
TABLE `PREFIX_discount_quantity`
INSERT INTO `PREFIX_specific_price` (
`id_product`, `id_shop`, `id_currency`,
`id_country`, `id_group`, `priority`,
`price`, `from_quantity`, `reduction`,
`reduction_type`, `from`, `to`
) (
SELECT
p.`id_product`,
1,
0,
0,
0,
0,
0.00,
1,
IF(
p.`reduction_price` > 0, p.`reduction_price`,
p.`reduction_percent` / 100
),
IF(
p.`reduction_price` > 0, 'amount',
'percentage'
),
IF (
p.`reduction_from` = p.`reduction_to`,
'0000-00-00 00:00:00', p.`reduction_from`
),
IF (
p.`reduction_from` = p.`reduction_to`,
'0000-00-00 00:00:00', p.`reduction_to`
)
FROM
`PREFIX_product` p
WHERE
p.`reduction_price`
OR p.`reduction_percent`
)
ALTER TABLE
`PREFIX_product`
DROP
`reduction_price`,
DROP
`reduction_percent`,
DROP
`reduction_from`,
DROP
`reduction_to`
INSERT INTO `PREFIX_configuration` (
`name`, `value`, `date_add`, `date_upd`
)
VALUES
(
'PS_SPECIFIC_PRICE_PRIORITIES',
'id_shop;id_currency;id_country;id_group',
NOW(), NOW()
),
('PS_TAX_DISPLAY', 0, NOW(), NOW()),
(
'PS_SMARTY_FORCE_COMPILE', 1, NOW(),
NOW()
),
(
'PS_DISTANCE_UNIT', 'km', NOW(), NOW()
),
(
'PS_STORES_DISPLAY_CMS', 0, NOW(),
NOW()
),
(
'PS_STORES_DISPLAY_FOOTER', 0, NOW(),
NOW()
),
(
'PS_STORES_SIMPLIFIED', 0, NOW(),
NOW()
),
(
'PS_STATSDATA_CUSTOMER_PAGESVIEWS',
1, NOW(), NOW()
),
(
'PS_STATSDATA_PAGESVIEWS', 1, NOW(),
NOW()
),
(
'PS_STATSDATA_PLUGINS', 1, NOW(),
NOW()
)
INSERT INTO `PREFIX_configuration` (
`name`, `value`, `date_add`, `date_upd`
)
VALUES
(
'PS_CONDITIONS_CMS_ID',
IFNULL(
(
SELECT
`id_cms`
FROM
`PREFIX_cms`
WHERE
`id_cms` = 3
),
0
),
NOW(),
NOW()
)
CREATE TEMPORARY TABLE `PREFIX_configuration_tmp` (`value` text)
SET
@defaultOOS = (
SELECT
value
FROM
`PREFIX_configuration`
WHERE
name = 'PS_ORDER_OUT_OF_STOCK'
)
UPDATE
`PREFIX_product` p
SET
`cache_default_attribute` = 0
WHERE
`id_product` NOT IN (
SELECT
`id_product`
FROM
`PREFIX_product_attribute`
)
INSERT INTO `PREFIX_hook` (
`name`, `title`, `description`, `position`
)
VALUES
(
'processCarrier', 'Carrier Process',
NULL, 0
)
INSERT INTO `PREFIX_stock_mvt_reason_lang` (
`id_stock_mvt_reason`, `id_lang`,
`name`
)
VALUES
(1, 1, 'Order'),
(1, 2, 'Commande'),
(2, 1, 'Missing Stock Movement'),
(
2, 2, 'Mouvement de stock manquant'
),
(3, 1, 'Restocking'),
(3, 2, 'Réassort')
INSERT INTO `PREFIX_meta_lang` (
`id_lang`, `id_meta`, `title`, `url_rewrite`
)
VALUES
(
1,
(
SELECT
`id_meta`
FROM
`PREFIX_meta`
WHERE
`page` = 'authentication'
),
'Authentication',
'authentication'
),
(
2,
(
SELECT
`id_meta`
FROM
`PREFIX_meta`
WHERE
`page` = 'authentication'
),
'Authentification',
'authentification'
),
(
3,
(
SELECT
`id_meta`
FROM
`PREFIX_meta`
WHERE
`page` = 'authentication'
),
'Autenticación',
'autenticacion'
)
LOCK TABLES `admin_assert` WRITE
UNLOCK TABLES
DROP
TABLE IF EXISTS `admin_role`
SELECT
*
FROM
-- This is another comment
MyTable # One final comment
/* This is a block comment
*/
WHERE
1 = 2;
SELECT
-- This is a test
SELECT
Test
FROM
Test
WHERE
(MyColumn = 1)
)
AND (
(
(SomeOtherColumn = 2);
WARNING: unclosed parentheses or section
SELECT
*
LIMIT
1;
SELECT
a,
b,
c,
d
FROM
e
LIMIT
1, 2;
SELECT
1,
2,
3
WHERE
a in (1, 2, 3, 4, 5)
and b = 5;
SELECT
count - 50
WHERE
a - 50 = b
WHERE
1
and -50
WHERE
-50 = a
WHERE
a = -50
WHERE
1
/*test*/
-50
WHERE
1
and -50;
SELECT
@
and b;
SELECT
@"weird variable name";
SELECT
"no closing quote