Я не уверен, что это вообще возможно. Вам, безусловно, потребуются глубокие знания синтаксиса SQL вашей целевой СУБД. Например, прямо у меня в голове это единственное утверждение MySQL:
INSERT INTO things
SELECT * FROM otherthings ON DUPLICATE KEY
UPDATE thingness=thingness+1
Вероятно, в некоторых СУБД есть конструкции, которые без разделителя могут быть неоднозначными.
Я не хочу требовать, чтобы пользователь вводил точку с запятой после каждого оператора SQL.
Я думаю, тебя могут заставить. Это совершенно стандартный способ разграничения операторов SQL. Даже если вы можете найти эвристику для определения точек, которые, вероятно, в начале SQL-запроса, вы рискуете привести к катастрофическим последствиям, таким как случайное «УДАЛЕНИЕ ИЗ вещей» - без предложения WHERE.
Операторы SQL могут состоять из одной или нескольких строк, поэтому я не могу переносить их в LB / CR
Будет ли приемлемо двойное выражение новой строки для нового оператора?
Я попробовал несколько попыток RegEx, но это не кажется достаточно мощным.
Нет, даже с точками с запятой, регулярное выражение далеко не настолько мощно, чтобы анализировать SQL. Проблемные моменты будут включать в себя:
';'
";"
`;`
'\';'
''';'
-- ;
#;
/*;*/
и любое взаимное расположение этих структур. Ик!