piątek, 29 stycznia 2016

Liczenie w SQL Server za pomocą CTE i ROW_NUMBER

Czasami proste rzeczy są lepsze, ale żeby te proste rzeczy znaleźć to potrzeba czasu.
Aby policzyć od 1 do 10000 to będziemy mogli wykorzystać pseudorekurencja, która opisałem wcześniej na blogu.
with cte (row)
 as (
SELECT 1
UNION all
SELECT c.row+1 FROM cte c
where c.row < 10000

 )
 select * from cte
 OPTION (MAXRECURSION 10000)
Ale wykorzystanie funkcji ROW_NUMBER jest dużo lepszym sposobem:
SELECT TOP (10000) ROW_NUMBER() OVER (ORDER BY s1.[object_id]) as row
FROM sys.all_objects AS s1 
CROSS JOIN sys.all_objects AS s2​

środa, 27 stycznia 2016

Aliasy w GIT

Aliasy w GIT to fantastyczne narzędzie upraszczające pracę.
Parę aliasów stworzyłem i chciałbym się z Tobą nimi podzielić.

Kod z aliasami jest zamieszczony na github'ie.
Żeby skorzystać z tych aliasów to będziesz musiał zmodyfikować configurację.
git config --global --edit
Dobrze jest zmienić edytor w git. Ja korzystam z atoma. Jak też masz atoma to możesz go używać pisząc taką komendę:
git config --global core.editor "atom --wait"
Przykład pobrany stąd.
Jeżeli chcesz, żeby w czasie otwartego programu atom można było pisać w konsoli to usuń parametr wait.
Na Windowsie mam inny tool. Edytor zawsze możemy zmienić przez modyfikację pliku
[core]
editor = \"c:/program files (x86)/Notepad++/notepad++.exe\" -multiInst -nosession
W pliku gitconfig dodaj ścieżkę do pliku z aliasami.
[include]
    path = /PathToRepos/git_config/gitalias
Jeżeli chcesz sprawdzić czy ścieżka jest skonfigurowana to napisz w konsoli:
git config --global include.path
Pod ścieżką /PathToRepos/git_config/ masz plik gitalias, który zawiera wszystkie aliasy.
Możesz sciągnąć kod źródłowy aliasów za pomocą gita uruchamiająć w katalogu PathToRepos taką komendę:
git clone https://github.com/arekbee/git_config

Jak zapiszesz ten plik to możesz zobaczyć jakie aliasy są zdefiniowane poprzez komendę aliasesd:
git aliases
Aby zobaczyć definicje aliasów wystarczy dopisać literkę d do poprzedniego wywołania
git aliasesd


Poniżej zamieszczam krótki opis niektórych komend. Poniższe komendy będę przedstawiał na sklonowanym repo z github.com/fsharp/fsharp.
Szybkie dodanie i spuszowanie zmian. ACP to skrót od Add, Commit i Push.
git acp "message"
Ściągnięcie kodu źródłowego, ale bez folderu .git
git download https://github.com/arekbee/git_config.git
Pobranie autorów kodu z informacjami o liczbie commitów:
git authors | head -10
Kiedy będziesz refaktoryzował kod i nie będziesz wiedział od czego zacząć to może powinieneś poszukać najczęściej modyfikowane pliki.
git churn
Jeżeli chcesz usunąć wszystkie niezatwierdzone zmiany i niewersjonowane pliki to napisz:
git clean-all
Szukanie nazwy plików, które zawierają dany ciąg znaków
git find-file ".exe"
Wyświetla historię commitów
git hist
Jeżeli napiszesz git histd to uzyskasz historię commitów z wiadomościami.
Wyświetl ścieżkę w której repo. zostało stworzone.
git root
Jeżeli chcesz wyświetlić jakieś poliki, które nie zostaną dodane do repo (bo wzorzec w .gitignore jest spełniony) to wywołaj poniższą komendę:
git ls-ignore
Dodać submodule (git externalne repo.)
git siur
Pokaż wszystkie branche które nie zostały zmergowane:
git unmerged-branches 
Stwórz plik z grafem commitów
git graphviz  -n10 > graph.dot
graphviz\dot.exe -Tpng graph.dot -o graph.png​
Tutaj jeszcze będę musiał popracować. Jak na razie wygląda to tak:

Mam nadzieję, że aliasy się przydadzą. Ja najczęściej korzystam z acp.