SQL query diff

12
DV
На сайте с 01.05.2010
Offline
644
2391

Поделитесь, как справляетесь с длинными SQL запросами?

Нужно что-то вроде diff, чтобы подсветило раницу, чтобы можно было временно выкинуть часть добившись идентичности, а после добавления новых данных вернуть убранное.

На ум приходит только побить по строчкам и смотреть обычным diff, но это опять дополнительная работа.

Желательно, чтобы переваривало PHP включения в виде переменных, опять же, чтобы не выполнять лишнюю работу.

VDS хостинг ( http://clck.ru/0u97l ) Нет нерешаемых задач ( https://searchengines.guru/ru/forum/806725 ) | Перенос сайтов на Drupal 7 с любых CMS. ( https://searchengines.guru/ru/forum/531842/page6#comment_10504844 )
Joker-jar
На сайте с 26.08.2010
Offline
154
#1

А какую задачу преследуете? Не совсем понятно, идентичность чему следует добиться и почему временно.

DV
На сайте с 01.05.2010
Offline
644
#2

Тут больше для "механического" внесения готовых правок в имеющемся коде, а не сочинения запроса с нуля.

К примеру, есть некий "мод" для кода, добавляющий определённые функции.

Представляет из себя набор правок, в т.ч. и SQL запросов.

Записывается как обычный diff или его вариации -- участки различающегося кода, при этом, строки с запросами просто меняются одна на другую.

Производится разработка, во время которой в код вносятся свои правки, и в запрос в том числе, т.е. он существенно видоизменяется.

Теперь нам надо применить "мод" к изменённому коду, но он-то у нас создан относительно кода оригинального, и прямым diff тут ничего не сделать.

Т.е. нам приходится вручную выставлять две строчки с запросом в редактор без переноса, и внимательно смотреть по всей длине, в чём различие нашего кода с оригиналом.

Далее, мы запоминаем позицию, где наши изменения, и "выкусываем" их, чтобы привести код к заменяемому diff'ом виду.

Применяем мод, далее вспоминаем, что где стояло, ставим на место.

Оптимизайка
На сайте с 11.03.2012
Offline
396
#3

В разработке обычно используют миграции

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
DV
На сайте с 01.05.2010
Offline
644
#4

Оптимизайка, это труъ way, я понимаю, что можно и нужно так, но сейчас не об этом.

Подумал, что меня бы устроил просто хороший инструмент сравнения длинных строк, но и его почему-то нет.

В выдаче лишь вопросы, как написать такое на разных языках, что очень странно.

Я не хочу писать такую программу, я хочу найти готовую.

---------- Добавлено 09.06.2017 в 09:30 ----------

Что-то нашёл...

https://unix.stackexchange.com/questions/11128/diff-within-a-line

---------- Добавлено 09.06.2017 в 09:43 ----------

Использование: wdiff [КЛЮЧ]… ФАЙЛ1 ФАЙЛ2

или: wdiff -d [КЛЮЧ]… [ФАЙЛ]

Аргументы, обязательные для длинных ключей, обязательны и для коротких.
-C, --copyright показать информацию об авторских правах и выйти
-1, --no-deleted не выводить удалённые слова
-2, --no-inserted не выводить вставленные слова
-3, --no-common не выводить общие слова
-a, --auto-pager автоматически вызывать программу просмотра
-d, --diff-input использовать одиночный объединённый
фрагмент различия в вводе
-h, --help показать эту справку и выйти
-i, --ignore-case игнорировать регистр букв при сравнении
-l, --less-mode режим вывода «less»
-n, --avoid-wraps не продолжать поля через новую строку
-p, --printer выделять перечеркиванием, как для принтера
-s, --statistics показать сколько слов было удалено,
вставлено и т.д.
-t, --terminal выводить с использованием termcap
-v, --version показ версии программы и выход
-w, --start-delete=СТРОКА СТРОКА, задающая начало удаляемой области
-x, --end-delete=СТРОКА СТРОКА, задающая конец удаляемой области
-y, --start-insert=СТРОКА СТРОКА, задающая начало вставляемой области
-z, --end-insert=СТРОКА СТРОКА, задающая конец вставляемой области
Как мне это нравится :)
Joker-jar
На сайте с 26.08.2010
Offline
154
#5

Возможно, поможет оформление SQL-запросов подобным способом, которым пользусь я (в PHP):

              $sql =
"SELECT {PREFIX}_pubs.id AS pub_id,
Count({PREFIX}_categories_pubs.id) AS count
FROM {PREFIX}_categories_pubs
INNER JOIN {PREFIX}_pubs
ON ( {PREFIX}_pubs.id = {PREFIX}_categories_pubs.pub_id )
WHERE
{PREFIX}_pubs.active = 1
GROUP BY {PREFIX}_pubs.id
ORDER BY count DESC
LIMIT 12";

То есть, форматировать, подобно коду. Выборки, условия и т.п. в разных строках.

P.S. Еще есть утилита diff3, которой я пользуюсь. Она умеет находить различия не на уровне строк, а на уровне части строк внутри строк. Очень удобно. Особенно радует возможность интеграции в файловый менеджер Krusader и Программу KdeSvn.

Joker-jar
На сайте с 26.08.2010
Offline
154
#6

Точнее, я пользуюсь kdiff3, GUI-версией.

png 1.png
PA
На сайте с 12.02.2016
Offline
24
#7

Использую meld, можно править оба файла прямо в нем и видеть изменения. Это ОЧЕНЬ удобно когда нужно слить две версии файла, когда часть кода нужно взять из одного файла, а часть с другого.

Или править во внешнем редакторе и не закрывая meld перечитывать актуальные версии файлов и видеть изменения.

Для винды есть winmerge

. . .
DV
На сайте с 01.05.2010
Offline
644
#8

Отлично, мне это тоже нравится. Всё мелкое, компилится махом.

diff3 в портах как

textproc/diffutils

meld как

textproc/meld

Параллельно поставил на XP. Разбираюсь.

DV
На сайте с 01.05.2010
Offline
644
#9

Всё-таки meld часто лажает. Не синхронизируется, выдаёт кашу.

wdiff намного точнее, чётко указывает, что изменилось, и даже пробелы/табуляция с толку не сбивают.

L
На сайте с 10.02.2015
Offline
221
#10

Пользуйтесь git.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий