... есть ли какой-либо стандарт или соглашение о том, как код SQL должен быть отформатирован?
Стандарт, нет. Вы можете поместить целый оператор SQL в одну строку, если речь идет о синтаксическом анализаторе SQL.
Конвенция, конечно, есть много. Это зависит от того, пытаетесь ли вы максимизировать изменчивость или минимизировать пространство. Я написал средства форматирования SQL для обоих случаев.
Я просто использовал определенные комбинации символов, чтобы сказать мне, где можно нарушить оператор SQL.
Вот один пример из средства форматирования SQL Java DB2, которое я написал. Другая программа Java сгенерировала код Java. SQL пришел прямо из SYSIBM
таблиц.
protected void prepareIndex00Select(String codeFacl)
throws SQLException {
StringBuffer sb = new StringBuffer();
sb.append("SELECT CODE_FACL, SEQ_FACL, FILLER_TOF ");
sb.append(" , CODE_TOF, NAME_FACL, NAME_LENGTH ");
sb.append(" , CODE_FMB, ID_NCIC_ORI, NBR_PRINTER_PREFIX ");
sb.append(" , ID_PERSONNEL_OFC, COMPLEX_CODE ");
sb.append(" , PHS_CODE, DESIG_FACL_GRP, IND_DESIG_AUTH ");
sb.append(" , CODE_FACL_I_T, INTKEY_FACL, IND_CDM_SENTENCING ");
sb.append(" , MAL_FEM_IND, DEL_AFTER, IND_INMATES ");
sb.append(" , VALUE_SO_CPU_STD, VALUE_SO_CPU_DAY ");
sb.append(" , CODE_CAT, VALUE_DCN, XIDBKEY ");
sb.append(" , FACL_FK_REGN ");
sb.append(" FROM ");
sb.append(creator);
sb.append(".FACL ");
sb.append(" WHERE CODE_FACL = ? ");
if (additionalSQL != null) sb.append(additionalSQL);
psIndex00 = connection.prepareStatement(sb.toString());
psIndex00.setString(1, codeFacl);
} // End prepareIndex00Select method
Немного поздно, только наткнулся на это, извините.
T-SQL Formatter для бедного человека - это средство форматирования T-SQL с открытым исходным кодом (библиотека, плагин ssms, средство форматирования файлов командной строки и т. Д.) - реализация является достаточно модульной, и в ней не должно быть сложностей в реализации токенайзера и средства форматирования MySQL. чтобы соответствовать T-SQL (я не сделал этого прежде всего потому, что у меня нет опыта или использования MySQL сейчас, так что это не очень хорошее использование моего времени).
Библиотека реализована в C # (2.0) с лицензией AGPL - это означает, что вы не можете распространять ее на коммерческой основе или предоставлять в качестве общедоступной службы без публикации каких-либо изменений, но для внутреннего пользователя это не должно представлять проблем, независимо от того, настроена она или не.
Как уже ответил @Gilbert Le Blank, стандартного форматирования SQL определенно не существует - даже коммерческие форматеры, которые предоставляют разные опции, не сходятся при одинаковых значениях по умолчанию и даже не обязательно поддерживают одинаковые выходные форматы.
Что касается написания собственного инструмента с нуля, я бы советовал против него, если вам нужно обрабатывать различные случаи: по крайней мере, для T-SQL, обработки пакетов SQL с несколькими операторами с помощью предложений CTE WITH, операторов MERGE, подзапросов и производные таблицы и т. д. оказывается довольно сложным :)
В случае, если это поможет: http://www.architectshack.com/PoorMansTSqlFormatter.ashx
источник