SQL raz jeszcze

https://xpil.eu/aTB9h

Od razu uprzedzam: firma RedGate, o której produkcie dziś piszę, nie zapłaciła mi złamanego szeląga za reklamę. Piszę to z własnej, nieprzymuszonej woli 😉

Parałem się w życiu rozmaitymi rzemiosłami; wszystkie były związane w mniejszy lub większy sposób z programowaniem komputerów (nie licząc niechlubnej, trwającej aż dwie godziny przygody z łopatą i kopaniem rowów). Od ponad 10 lat rzeźbię w bazach danych a do tego bez SQL się nie da.

O ile inne, "porządne" języki programowania mają od dawna solidne, dojrzałe i bardzo dobrze działające środowiska programistyczne (przykłady: Visual Studio, Zend, Eclipse, nawet Flash ma swojego DreamwWeavera), o tyle SQL był od zawsze traktowany trochę po macoszemu. Nawet tak podstawowa funkcjonalność jak IntelliSense, dostępna w VBA od samego początku, w SQL-u dopiero raczkuje. Programiści SQL nadal muszą klepać większość kodu z palca bądź używać dość prymitywnych narzędzi wbudowanych standardowo w oprogramowanie serwerów baz danych.

Sytuację zmieniają na lepsze dwa dostępne obecnie na rynku produkty: Toad oraz SQL Prompt.

Toad jest osobnym, zintegrowanym środowiskiem programistycznym zorientowanym na SQL - współpracuje ze wszystkimi głównymi produktami bazodanowymi i jest osobnym, niezależnym kawałkiem oprogramowania.

Co do SQL Prompt natomiast (na którym chcę się dziś skupić) sytuacja jest nieco inna - program jest wtyczką do microsoftowego SSMS i nie pracuje poza tym środowiskiem. Ma to swoje zalety ponieważ nie wymusza uczenia się od zera całkiem nowego środowiska (nadal pracujemy w starym, dobrym SSMS), dodaje tylko własne menu oraz parę klawiszy skrótów.

Główna funkcjonalność SQL Prompt (będę go dalej nazywał P bo mi tak krócej) polega na dodaniu IntelliSense, którego przed wersją SQL Server 2008 nie było w ogóle, a w wersji 2008 jest zrealizowane beznadziejnie. Nie wiem, czy programiści w Microsofcie są złośliwi, czy może zatrudniono tam małpy do tego zadania, w każdym razie podpowiadacz sql-owy (ten wbudowany) to jeden z najgorszych kawałków software-u jaki widziałem ostatnimi czasy. Tak więc, P łata tą dziurę i daje nam mistrzowsko działające IntelliSense.

Dla niebędących w temacie: intellisense polega na podpowiadaniu, w postaci dynamicznie pokazujących się małych list, kolejnych elementów właśnie pisanego kodu. Na przykład chcąc napisać SELECT * FROM dbo.customers WHERE piszemy SE, włączamy intellisense (albo i nie włączmy bo włącza się samo) i na liście pokazuje się SELECT oraz SET, wybieramy SELECT i piszemy dalej. Po gwiazdce i spacji intellisense pokazuje nam samoczynnie wszystkie słówka SQL które są legalne w tym kontekście - wpisujemy FR, lista zawęża się do FROM, pukamy spację, pokazuje się lista dostępnych tabel, wpisujemy cu, lista zawęża się do customers, pukamy tabulację, gotowe. Brzmi to dość skomplikowanie na pierwszy rzut oka, ale w rzeczywistości zaoszczędza ogromne ilości czasu przy pisaniu kodu.

IntelliSense dostarczane przez P jest naprawdę solidnie przemyślane i bardzo "kumate". Rozpoznaje wcześniej zadeklarowane zmienne, wykrywa uprzednio zdefiniowane tabele tymczasowe i pokazuje na liście nazwy ich kolumn (tabela nie musi fizycznie istnieć, wystarczy, że CREATE TABLE #... istnieje w kodzie gdziekolwiek przed pozycją kursora), "rozumie" zmienne tabelaryczne, podzapytania, CTE. Ba, potrafi nawet wyświetlić obiekty z zewnętrznych serwerów ("linked servers"). Radzi sobie też świetnie z parametrami funkcji i procedur oraz obsługuje wszystkie elementy składni (nawet te nowoczesne, z SQL 2008) bez zająknięcia.

O samym InteliSense mógłbym się rozpisywać na kolejnych pięć stron, ale mi się nie chce - jak ktoś jest zainteresowany, niech sobie pogugla albo zainstaluje wersję testową (działa przez 14 dni).

Kolejna, bardzo mocna strona P to snipety (nie wiem czy jest jakiś poprawny polski odpowiednik słowa snippets...), miniaturowe, predefiniowane kawałki kodu dostępne pod ręką w każdym momencie. Po zainstalowaniu P jest od ręki dostępnych kilkadziesiąt snipetów, później można dodawać własne. Parę przykładów:

1. SSF - po wpisaniu ssf i puknięciu tabulatora, ssf zamienia się na SELECT * FROM

2. CT - podobnie, wpisujemy ct, pukamy tabulator i zamiast tego pojawia się CREATE TABLE, z mnóstwem komentarzy odnośnie tworzenia tabel, z nawiasami (pustymi) na kolumny, z kursorem w miejscu nazwy tabeli.

3. CCI - rozwija się w kompletny blok kodu CREATE CLUSTERED INDEX, ze wszystkimi możliwymi opcjami indeksu w komentarzach (więc żeby włączyć dowolną opcję wystarczy tylko usunąć znak komentarza) oraz z kursorem w miejscu nazwy indeksu.

To tylko przykłady, wszystkich "standardowych" snipetów jest obecnie około 100 i co jakiś czas pojawiają się nowe. To może się wydawać zbędnym gadżetem, ale jak się snipety porządnie opanuje okazuje się, że pisanie kodu przyspiesza parokrotnie. Nie trzeba już pisać ORDER BY - wystarczy OB<tab>. Nie trzeba pisać GROUP BY - wystarczy GB<tab>. Nie trzeba pisać UNION ALL SELECT - wystarczy UAS<tab>. LEFT OUTER JOIN zastępuje LOJ<tab> - i tak dalej i tak dalej. Nauczenie się tego zajmuje chwilę, a korzyści są naprawdę ogromne. W końcu czas to pieniądz.

Następna, niezwykle przydatna funkcja P to automatyczne formatowanie kodu SQL. W dowolnym momencie możemy, za pomocą kombinacji ^K-^Y, sformatować kod w bieżącym oknie. Jeżeli chcemy sformatować tylko fragment kodu, trzeba ten fragment najpierw zaznaczyć i punkąć ^K-^Y. Formatowanie kodu jest bardzo szybkie - żeby zauważyć jakiekolwiek opóźnienie, trzeba mieć co najmniej 20-30 tysięcy linii do sformatowania. Można też szczegółowo skonfigurować reguły formatowania tak, żeby odpowiadały naszym preferencjom. W tym momencie każdy kawałek kodu SQL, który wyjdzie spod naszych palców, będzie sformatowany w ten sam, jednolity, spójny sposób co sprawia, że nasza praca wygląda bardziej profesjonalnie.

Kolejna genialna opcja SQL Prompt to podsumowanie bieżącego skryptu. Wyobraźmy sobie 1000 albo 10,000 linii kodu SQL, który musimy przeanalizować. Włączamy podsumowanie skryptu i od razu widzimy nasz kod "zwinięty" do minimum w taki sposób, że każda pojedyncza instrukcja SQL jest przedstawiona w jednej linii, z możliwością przeglądania tego i "rozwijania" poszczególnych bloków kodu (również zagnieżdżonych, jak CTE, podzapytania, bloki TRY-CATCH, pętle WHILE itd). Dodatkowo, kliknięcie kodu w podsumowaniu automatycznie podświetla nam ten kod w oknie głównym dzięki czemu widzimy od razu gdzie to jest.

Jest też kilka opcji, których nie używa się zbyt często, ale które od czasu do czasu się przydają. Są to np. znajdowanie nieużywanych zmiennych lub też podświetlanie nieprawidłowych obiektów (gdy np. zrobimy literówkę w nazwie kolumny bądź też tabela użyta w naszym zapytaniu zostanie usunięta lub przemianowana).

Wszystkie te elementy, połączone razem, dają naprawdę solidnego kopa przy pisaniu kodu SQL - i to bez używania jakiejkolwiek nielegalnej chemii 😉

Oprócz tego, że produkt sam w sobie jest bardzo wysokiej jakości, firma go produkująca ma bardzo rzetelne podejście do obsługi klienta. Jakiekolwiek problemy z działaniem P (jest ich bardzo mało... ale czasem się coś przydarzy) można zgłaszać do biura obsługi klienta mailem - odpowiedź przychodzi na ogół około 15-30 minut później, zawsze rzeczowa, grzeczna i pomocna.

Cena P jest niemała - za jedno stanowisko trzeba zapłacić minimalnie 145€ za wersję podstawową lub 220€ za wersję Professional (różnice wersji - kieruję na stronę producenta). Oczywiście przy zakupie większej ilości licencji są oszczędności. Np. kupując 10 licencji zapłacimy tylko 102€ za wersję podstawową oraz 154€ za wersję Professional.

Cena ta wydaje się faktycznie spora - ale z drugiej strony jest to jednorazowa opłata (nie ma żadnej rocznej subskrypcji), ponadto pamiętajmy, że software zostanie z nami przez lata (aktualizacje są wliczone w cenę produktu), a przez te lata ilość zaoszczędzonego czasu zwróci nam się tysiąckrotnie.

OK, koniec bloku reklamowego, czas na dowcip:

Lekcja matematyki. Jasiu przy tablicy. Pani pyta:
- Masz sześć jabłek, połowę oddajesz bratu. Ile ci zostanie?
- Pięć i pół...

https://xpil.eu/aTB9h

2 komentarze

    1. 400 USD za dożywotnią licencję to praktycznie niecałe dwie dniówki przeciętnego irlandzkiego kontraktora IT. Jeżeli mam firmę zatrudniającą gości za €300 dziennie (+VAT) i mogę im zwiększyć wydajność o 10% kupując każdemu jednorazową licencję za niecałe €400, to to jest inwestycja, która mi się zwraca po dwóch tygodniach. A nawet wcześniej, bo RedGate daje upusty przy zakupie powyżej 4 licencji.

Leave a Comment

Komentarze mile widziane.

Jeżeli chcesz do komentarza wstawić kod, użyj składni:
[code]
tutaj wstaw swój kod
[/code]

Jeżeli zrobisz literówkę lub zmienisz zdanie, możesz edytować komentarz po jego zatwierdzeniu.