... czy istnieje jakikolwiek standard lub konwencja dotycząca formatowania kodu SQL?
Standard, nr W przypadku analizatora składni SQL można umieścić całą instrukcję SQL w jednym wierszu.
Konwencja, na pewno jest wiele. To zależy, czy próbujesz zmaksymalizować zmienność, czy zminimalizować miejsce. Napisałem formaterery SQL dla obu przypadków.
Właśnie użyłem określonych kombinacji znaków, aby powiedzieć mi, gdzie należy złamać instrukcję SQL.
Oto jeden przykład z napisanego przeze mnie formatera Java SQL SQL . Inny program Java wygenerował kod Java. SQL pochodzi bezpośrednio z SYSIBM
tabel.
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
Trochę późno, tylko natknąłem się na to, przepraszam.
Program do formatowania T-SQL ubogiego człowieka to formatator T-SQL typu open source (biblioteka, wtyczka ssms, formatator plików wiersza poleceń itp.) - implementacja jest w miarę modularna i wdrożenie tokenizatora i formatera MySQL nie powinno być trudne aby dopasować te z T-SQL (nie zrobiłem tego przede wszystkim dlatego, że nie mam doświadczenia ani nie korzystam z MySQL, więc nie jest to dobre wykorzystanie mojego czasu).
Biblioteka jest zaimplementowana w języku C # (2.0) z licencją AGPL - oznacza to, że nie można rozpowszechniać jej komercyjnie ani ujawniać jako usługi publicznej bez publikowania jakichkolwiek modyfikacji, ale dla użytkownika wewnętrznego nie powinna przedstawiać problemów, czy jest dostosowana czy nie.
Jak już odpowiedział @Gilbert Le Blank, zdecydowanie nie ma standardu formatowania SQL - nawet dostępne tam formaty komercyjne, z różnymi dostępnymi opcjami, nie są zbieżne z tymi samymi ustawieniami domyślnymi lub nawet koniecznie obsługują te same formaty wyjściowe.
Jeśli chodzi o pisanie własnego narzędzia od zera, odradzam go, jeśli potrzebujesz obsługiwać różne przypadki: przynajmniej w przypadku T-SQL, obsługi partii wielu instrukcji SQL z klauzulami CTE WITH, instrukcji MERGE, zapytań podrzędnych i tabele pochodne itp. okazują się dość trudne :)
W przypadku jakiejkolwiek pomocy: http://www.architectshack.com/PoorMansTSqlFormatter.ashx
źródło