MSSQL, ODBC, Perl és az UTF-8

 ( zeller | 2018. június 25., hétfő - 16:12 )

Rég nem nyúltam komolyabban Perl scripthez, de most ismét eljött az ideje, hogy egy rendcsinálás és mentés/archiválás optimalizálás okán komolyabb eszközt vegyek elő.

Ami adott CentOS7 meg egy szééép MS-SQL szerver, természetesen Windows-on. A feladat fájok (naná, hogy ékezetes nevekkel...) pakolgatása a Linuxon, és ennek lekövetése az adatbázisban (útvonal+fájlnév egy mezőbe beírva, mert anno így lett kitalálva...)

Az UTF-8/Unicode szép és jó dolog, igaz, Perl-ben talán nem annyira egyszerű, de azért egyelőre úgy néz ki, sikerült megoldani.

Első körben persze az ODBC-t kéne kireszelni - a Microsoft-os msodbcsql csomag ugyan fent van, de nagyon nem akarja az igazságot (mint kiderült tényleg nem működik DBD::ODBC vele), úgyhogy egy próbát megér alapon előszedem a freetds-t.
A freetds legutolsó stabil verziója freetds-patched.tar.gz néven tölthető le, ezt jól átcsomagoltam freetds-1.00.86.tar.bz2 névre, és huss, az rpmbuild -ta freetds-1.00.86.tar.bz2 gyorsan össze is rakta a szükséges csomagokat, amik mentek a központi repóba, onnan meg telepítésre.
odbc.ini-be server, database meg port a minimum, beírom, nagyjából megy a script, "csak" az ékezetek...

Varázsszavak első körben, bár ebben eddig semi új nincs, maximum némi homlokcsapkodás, hogy hogy is maradhatott ki a binmode... :-)

use utf8;
binmode(STDOUT, ":utf8");

A kiírás rendben, de nézzünk egy picit bonyolultabb kérést, mondjuk "select ezt, azt from valami where emez like '%árvíztűrő%'"

Ahogy az a dokisban is írva vagyon, a prepare ezt nem szereti - alapból nem szól, de eredményt sem ad. A megoldás fél mondattal ott van a dokumentációban: odbc_execdirect kikapcsolandó. Ennek a módja meg ennyi:

DBI->connect('dbi:ODBC:MSSQL', $user, $password, {odbc_execdirect=>0});

Innentől már csak a logikát meg az adatok matatását kell belehegeszteni, az meg szerintem menni fog :-)

Update:

Ha valaki nem tudná (ahogy eddig én sem, pedig ott van a FreeTDS FAQ-ban...), egy kapcsolatban egyszerre csak egy query lehet aktív, tehát ha olyat szeretnék, hogy egy select-ben visszakapott összes sorra csináljon valamit a program, és az eredményt írja vissza, ahhoz kettő darab kapcsolatot kell felépíteni a DB felé.
Most, hogy van $dbh1=DBI->connect(...) és $dbh2=DBI->connect(...), elkezdett működni a dolog.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

A Perl sose volt szép nyelv. Kifejezetten ocsmány meg akkor lett, amikor valaki kitalálta, hogy csináljunk úgy, mintha OOP lenne. Aztán amikor ezt megfejelték UTF-8-cal és adatbáziskezeléssel, akkor vált hányadékká. Persze IMHO, YMMV.

=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?

Azért Perl-ben is lehet szépen kódolni, meg lehet szép dolgokat csinálni, még akár az úgy csinálunk, mintha OOP lenne mellett is, bár arra még nem igazán vetemedtem, csak amikor muß olyanul fogalmazni :-)

> Azért Perl-ben is lehet szépen kódolni, meg lehet szép dolgokat csinálni

En meg nem lattam olyan programot perlben, amit ne lehetett volna atirni egysorosra:))

---
Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....

Ha választani lehet, akkor valóban nem ez a jó irány :) De ezért szép a világ :)

De gustibus... Nekem a Perl jobban kézreáll, mint más. Nem gond, ha szóköz van a fájlnévben, nem gond, ha egy sort véletlenül kevesebb whitespace-szel kezdek, nem kell lefordítani - egyszerűen megírom, és működik.

Ezekkel nincs is gond. Csak ha már el is kell olvasni 2 hónap múlva ;-)

=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?

Évekkel ezelőtt írtam egy webes előtétet, szűkített funkcionalitással egy másik webes motyóhoz, és az egyik félkész modult megtaláltam a régi lomjaim között. Olvasható, mi több, érthető volt, hogy mit és miért csináltam benne anno. Igen, olvasható és értelmezhető - nem utolsó sorban azért, mert normálisan tördlet/formázott a kód, és illendő mértékben (vagy picit bővebben) kommenteztem.

A "gyorsan kell valamit csinálni" scriptek meg vagy ilyenek, vagy sem, de ott is van azért néháyn kapaszkodó (név, paraméterezések, konstansok értékei, elnevezések), amik kapaszkodóul szolgálnak, hogy mi a búbánat lehet az a sorminta :-)

A Perl annyira szép, mint a Perl könyv elején a teve ;)

Van, aki szereti a teveket :)