Kategoria: Programistyczne

Konwerter dialektów SQL

Tłumacz SQL między MySQL, PostgreSQL, T-SQL, Oracle i 12 innymi dialektami.

Działa na naszym serwerzeDane wejściowe są wysyłane na nasz serwer, tam przetwarzane i automatycznie usuwane w ciągu godziny.Jak przetwarzamy dane wejściowe?

Szczegóły

O tym narzędziu

Przepisuje zapytanie z jednego dialektu SQL na inny, spośród szesnastu. Rozkłada polecenie na drzewo składniowe i wypisuje je z powrotem w dialekcie docelowym, więc wynik jest przepisaniem, a nie zamianą tekstu.

Obsługiwane różnice to dokładnie te, które czynią migrację żmudną. TOP z T-SQL staje się LIMIT albo FETCH FIRST, zależnie od celu. NVL z Oracle'a zamienia się w COALESCE, podobnie IFNULL z MySQL-a. Odwrócone apostrofy stają się cudzysłowami albo nawiasami kwadratowymi. Arytmetyka dat jest przebudowywana od zera: DATE_ADD, DATEADD, INTERVAL i zwykłe dodanie liczby, które przyjmuje Oracle, to cztery zapisy jednego pomysłu i żaden z nich nie przeżyje skopiowania.

Prawdziwym ryzykiem jest pomylenie się po cichu i dlatego silnikiem jest parser, a nie zestaw wyrażeń regularnych. Wzorzec zamieniający TOP 10 na LIMIT 10 zepsuje też kolumnę nazwaną TOP i nie ma pojęcia, że sklejanie napisów to || w PostgreSQL, + w T-SQL i CONCAT w MySQL. Drzewo składniowe wie, czym jest każdy element, więc potrafi zostawić w spokoju to, co zmieniać się nie powinno.

Traktuj wynik jak pierwszą wersję roboczą. Struktura, funkcje i cytowanie tłumaczą się pewnie; czego żadne przepisywanie nie przeskoczy, to wskazówki producenta, bloki proceduralne oraz subtelniejsze różnice w kolejności wartości NULL, w sortowaniu znaków i w dzieleniu całkowitym. Przeczytaj, zanim uruchomisz na czymkolwiek istotnym - a gdy zapytanie się nie parsuje, usługa próbuje pozostałych dialektów i podaje te, które je przyjmują, bo przyczyną jest prawie zawsze wybrany dialekt źródłowy, a nie zepsuty SQL.

To jedyne narzędzie tutaj, które wysyła Twoje dane na serwer, i mówi o tym na stronie. Transpilerem, który robi to poprawnie, jest SQLGlot, a on jest w Pythonie: kompilacja do WebAssembly to 21 MB do pobrania, więcej niż cała reszta tej strony, a port do JavaScriptu nadal błędnie tłumaczy zwyczajne zapytania. Nic nie jest przechowywane - zapytanie zostaje sparsowane, wypisane i zapomniane.

Wypróbuj też

  • Formatuj, wcinaj i porządkuj JSON.

    Działa w przeglądarceProgramistyczne
  • Sprawdź poprawność składni XML i znajdź dokładne miejsce błędu.

    Działa w przeglądarceProgramistyczne

Warto wiedzieć

Najczęstsze pytania

Dlaczego akurat to narzędzie wysyła zapytanie na serwer?
Bo transpiler, który robi to poprawnie, jest w Pythonie. Kompilacja do WebAssembly to 21 MB do pobrania - więcej niż cała reszta tej strony - a port do JavaScriptu nadal błędnie tłumaczy zwyczajne zapytania. Wysłanie tekstu to uczciwy kompromis, więc to narzędzie jest oznaczone jako wysyłające dane, a nie jako działające na Twoim urządzeniu. Nic nie jest przechowywane: zapytanie zostaje sparsowane, wypisane i zapomniane.
Czy wynik nadaje się do uruchomienia?
Traktuj go jak pierwszą wersję roboczą. Struktura, funkcje i cytowanie tłumaczą się pewnie, ale dialekty różnią się w sposób, którego żadne przepisywanie nie przeskoczy - wskazówki producenta, bloki proceduralne, subtelne różnice w kolejności wartości NULL, w sortowaniu znaków i w dzieleniu całkowitym. Przeczytaj, zanim uruchomisz to na czymś, co ma znaczenie.
Pisze, że nie da się sparsować mojego SQL-a, a wygląda dobrze.
Wtedy prawie na pewno zły jest dialekt źródłowy. Odwrócone apostrofy to dla PostgreSQL błąd składni, TOP nic nie znaczy dla MySQL-a, a jedno i drugie kończy się niepowodzeniem parsowania na pierwszym niepasującym znaku. Usługa próbuje pozostałych dialektów i podaje te, które Twoje zapytanie przyjmują, więc komunikat zwykle mówi, na co przełączyć.
Czemu nie wystarczy zamiana tekstu?
Bo wzorzec nie odróżni kodu od nazwy. Reguła zamieniająca TOP 10 na LIMIT 10 zepsuje też kolumnę nazwaną TOP, a żaden wzorzec nie wie, że sklejanie napisów to || w PostgreSQL, + w T-SQL i CONCAT w MySQL. Rozłożenie na drzewo składniowe sprawia, że narzędzie wie, czym jest każdy element, i zostawia w spokoju to, czego ruszać nie należy.
Czy przerobi cały zrzut schematu?
Do pewnej granicy: 200 zapytań albo około 100 kB na przebieg. Powyżej tego narzędzie blokowałoby współdzielony serwer zadaniem, które lepiej wykonać SQLGlotem na własnym komputerze - jest otwartoźródłowy i to ten sam silnik.