Подсветка синтаксиса My. SQL- запросов | Web- мастеру и не только. При выводе диагностики в своих рабочих проектах я использую вот такую функцию для подсветки синтаксиса My. SQL- запросов. Она преобразует текст запроса, делая все служебные слова языка заглавными буквами и подсвечивает их цветом, а также выделяет различными цветами числовые значения и скобки. Такая подсветка позволяет сразу же увидеть синтаксические ошибки, да и вообще повышает наглядность сообщений при отладке скриптов.//- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // Функция подсветки синтаксиса My. SQL- запроса// (C) Man. Hunter / PCL// http: //www. Array(); // Обработать экранированные кавычки preg_match_all("/\\\'|\\\& quot; /is", $tmp, $quotes); array_unique($quotes); if (count($quotes)) { foreach($quotes[0] as $i) { $k++; $quote_list_symbols[$k]=$i; $tmp=str_replace($i, '< symbol'.$k.'> ', $tmp); } } $matches=Array( "/(& quot; |'|`)(.*?)(\\1)/is", // текст в кавычках "/\/\*.*?\*\//s", // текст комментария "/ \- \- .*\x. D\x. 0A/", // текст ' - -' комментария "/ #.*\x. D\x. 0A/", // текст ' #' комментария ); // Обработать текст foreach($matches as $match) { // Обработать текст $found=array(); preg_match_all($match, $tmp, $found); $quotes=(array)$found[0]; array_unique($quotes); if (count($quotes)) { foreach($quotes as $i) { $k++; $quote_list_text[$k]=$i; $tmp=str_replace($i, '< text'.$k.'> ', $tmp); } } } // Служебные слова My. SQL $keywords=Array( "avg", "as", "auto_increment", "and", "analyze", "alter", "asc", "all", "after", "add", "action", "against", "aes_encrypt", "aes_decrypt", "ascii", "abs", "acos", "asin", "atan", "authors", "between", "btree", "backup", "by", "binary", "before", "binlog", "benchmark", "blob", "bigint", "bit_count", "bit_or", "bit_and", "bin", "bit_length", "both", "create", "count", "comment", "check", "char", "concat", "cipher", "changed", "column", "columns", "change", "constraint", "cascade", "checksum", "cross", "close", "concurrent", "commit", "curdate", "current_date", "curtime", "current_time", "current_timestamp", "cast", "convert", "connection_id", "coalesce", "case", "conv", "concat_ws", "char_length", "character_length", "ceiling", "cos", "cot", "crc. Array(); foreach($keywords as $keyword) { $replace[]='/\b'.$keyword.'\b/ie'; } // Выделить служебные слова в тексте запроса $tmp=preg_replace($replace, '"< b style=\"color: #0. FF\"> ". strtoupper("$0")."< /b> "',$tmp); // Выделить числовые значения в тексте запроса $tmp=preg_replace('/\b([\. Выделить скобки в тексте запроса $tmp=preg_replace('/([\(\)])/', '< b style="color: #FF0. Вернуть обратно строки в кавычках if (count($quote_list_text)) { $quote_list_text=array_reverse($quote_list_text, true); foreach($quote_list_text as $k=> $i) { $tmp=str_replace('< text'.$k.'> ', '< span style="color: #7. Вернуть обратно экранированные символы if (count($quote_list_symbols)) { $quote_list_symbols=array_reverse($quote_list_symbols, true); foreach($quote_list_symbols as $k=> $i) { $tmp=str_replace('< symbol'.$k.'> ', $i, $tmp); } } // Вернуть подсвеченный текст запроса // Если не надо расставлять переносы, то уберите nl. Единственный параметр функции $query - текст исходного запроса. На выходе подсвеченная строка запроса в формате HTML. Цвета подсветки захардкодены в исходнике, если надо, то поменяйте их на свои или вообще замените на определения стилей CSS. Функция может вернуть неправильный результат, если в комментариях запроса содержатся несогласованные кавычки или апострофы, в остальном при тестировании я никаких проблем не нашел. Вот несколько примеров работы скрипта: CREATETABLE`orders`(`o_id`INT(1.
Sublime text 2 - format SQL. I've posted before about formatting SQL in my IDE. Looking at the python-sqlparse library documentation there are some statements to change case for keywords and identifiers.. . When performing a regex find-and-replace in Sublime Text 2, the following modifiers may be used to change the case of a backreference . NOTNULLAUTO_INCREMENT,`o_date`INT(1. NOTNULL,`o_client`INT(1. NOTNULLCOMMENT'пользователь создавший заказ',`o_status`INT(1. NOTNULLCOMMENT'статус заказа',`o_sum`INT(1. NOTNULLCOMMENT'стоимость размещения',`o_nds`DECIMAL(1. NOTNULLDEFAULT'0. VARCHAR(1. 02. 4)NOTNULLCOMMENT'Комментарии к заказу',PRIMARYKEY(`o_id`))ENGINE=My. ISAM /*! 4. 01. 01 DEFAULT CHARSET=utf. SELECTSQL_CACHE`regions`.*,COUNT(`o_id`)AS`o_num`,SUM(IF(`o_map` != 0, 1, 0))AS`sum_map`,SUM(IF(`o_list` != 0, 1, 0))AS`sum_list`,SUM(IF(`p_price`> 0),1,0)AS`sum_free`,FROM`regions`, `orders`LEFTJOIN`prices`ON`p_o_id`=`o_id`AND`p_year`=2. WHERE`o_region`=`r_id`AND`o_deleted`=0. AND`o_type`=0. GROUPBY`r_id`HAVING(`sum_free`> 5. ORDERBY`r_order`DESC, `r_name`Функция предназначена только для подсветки синтаксиса My. SQL, но ее можно легко адаптировать под любой другой диалект SQL. Достаточно просто добавить или убрать служебные слова в соответствующем массиве. Просмотров: 2. 81.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. Archives
November 2016
Categories |