Как я могу поддерживать оператор SQL GO в приложении Java/jtds?

Я работаю над приложением OSS на основе Java SqlHawk, одной из функций которого является запуск обновленных sql-скриптов. против сервера.

Microsoft взяла за правило разбивать скрипт на пакеты с помощью оператора GO, что является хорошей идеей, но просто требует ложных совпадений в строке.

На данный момент у меня есть очень рудиментарный:

// split where GO on its own on a line
Pattern batchSplitter = Pattern.compile("^GO", Pattern.MULTILINE);
...
String[] splitSql = batchSplitter.split(definition);
...

какой вид работает, но склонен сбивать с толку такими вещами, как цитируемые операторы GOили проблемы с отступами.

Я думаю, что единственный способ сделать это действительно надежным — это иметь в приложении анализатор SQL, но я понятия не имею, как это сделать, и может ли это на самом деле оказаться менее надежным (особенно с учетом того, что этот инструмент поддерживает несколько СУБД).

Каким образом я могу решить эту проблему? Примеры кода были бы очень полезны для меня здесь.

Соответствующий код sqlHawkна github.

В настоящее время используется jtdsдля выполнения пакетов, найденных в сценариях.

6
задан Community 23 May 2017 в 12:20
поделиться