Article View: pl.comp.lang.perl
Article #51427Re: Dopasowanie do komentarzy w skryptach SQL przy pomocy wyrażenia regularnego
From: =?UTF-8?B?SmFyb3
Date: Sun, 24 Mar 2013 13:48
Date: Sun, 24 Mar 2013 13:48
82 lines
3500 bytes
3500 bytes
W dniu 2013-03-21 22:16, JarosÅaw LubczyÅski pisze: > W dniu 2013-03-21 15:46, hubert depesz lubaczewski pisze: >> On 2013-03-21, JarosÅaw LubczyÅski <guess@who.com.pl> wrote: >>> PotrzebujÄ wyrażenia regularnego, za pomocÄ którego mógÅbym usunÄ Ä >>> komentarze w skryptach SQL. Generalnie rzeczony regex powinien >>> dopasowywaÄ siÄ do ciÄ gu znaków, który: >>> 1. zaczyna siÄ od "--" i koÅczy wraz z koÅcem linii; >>> 2. nie jest czÄÅciÄ napisu otoczonego apostrofami "'" (z uwzglÄdnieniem >>> escape'owania tychże w stylu a) PostgreSQL "\'" b) Oracle "''") >>> >>> SpeÅnienie pierwszego warunku oczywiÅcie jest proÅciutkie, drugiego >>> zdecydowanie przekracza moje możliwoÅci :(. PróbowaÅem skorzystaÄ z >>> Regexp::Common ale ten wykÅada siÄ już na takim banalnym zapytaniu jak: >>> >>> select '--this is not a sql comment!' from dual; >> >> to jest możliwe, ale powtaje pytanie: a po co? chodzi o to, że może da >> siÄ to proÅciej zaÅatwiÄ. może np. jest to wynik dziaÅania jakiegoÅ >> programu i da siÄ to inaczej rozwiÄ zaÄ. > > ZmajstrowaÅem egzekutora skryptów sql (takich solidnie obkomentowanych > też), który nie potrzebuje do szczÄÅcia ani klienta bazy danych ani tym > bardziej natywnego parsera, wspóÅpracuje (póki co na razie, ale ze > Åwietlanymi perspektywami na rozwój w miarÄ potrzeby) z Oracle, > PostgreSQL i Sybase ASA, grzecznie przepycha do serwera polecenia z > usuniÄtymi komentarzami, ale niestety przy uruchamianiu zrzutu z bazy > wyÅożyÅ siÄ na kolumnach typu znakowego z magicznym '--' w Årodku... > > Moja skleroza podpowiada mi, że jakiÅ czas temu ÅciÄ gnÄ Åem takiego > regexpa (a wÅaÅciwie gotowego s///) z Sieci, miaÅ z kilometr dÅugoÅci, > ale *dziaÅaÅ*. Niestety jakoÅ nie mogÄ siÄ teraz do niego dogrzebaÄ, a i > Wujek Google dziwnie rozgadaÅ siÄ nie na temat :). W CPAN'ie znalazÅem > tylko wspomniane Regexp::Common::Comment, zajrzaÅem w gÅÄ b i wyszÅo mi, > że regexp dla SQLa nie na prawa dziaÅaÄ poprawnie w moim przypadku (nie > obsÅuguje apostrofów w ogóle). > >> >> depesz >> >> p.s. \' i '' to nie sÄ escape'owania w stylu "postgresql" i "oracle". >> pierwsze jest wziÄte z c, a drugie ze standardu sql. > > > Prawda :) > >> PostgreSQL >> supportuje obie wersje, przy czym \' dziaÅa (bez warningów) tylko >> w E-literaÅach. >> > > No, dla PostgreSQL'a ostatni raz testowaÅem to zachowanie chyba na > starożytnej dzisiaj wersji 7.4 (i zdaje siÄ wtedy dziaÅaÅo tylko "\'") a > teraz wersja 9.1 akurat na zÅoÅÄ zbiesiÅa misie - dzisiaj już nie > sprawdzÄ. Oracle 11 i ASA 12 faktycznie akceptujÄ tylko standardowe ''. > > Aha - czÅowiek uczy siÄ caÅe życie - grzebiÄ c dziÅ po Sieci dowiedziaÅem > siÄ, że można (a ponoÄ nawet należy) w skryptach SQL stosowaÄ C-cowe > komentarze (nawet w postaci wieloliniowych bloków) otoczone /* ... */ > (sprawdziÅem na Oracle Worksheet i ASA ISQL, można) wiÄc regexp powinien > byÄ gotowy przynajmniej na /* ... */ w pojedynczej linii. > > Aha, teraz znalazÅem potencjalne rozwiÄ zania w zakonie Perla, np. > http://www.perlmonks.org/?node_id0483 > pewno z rana przetestujÄ. > W koÅcu pod adresem http://www.perlmonks.org/?node_id0750 znalazÅem zadowalajÄ ce rozwiÄ zanie. -- Pozdrawiam Jarek LubczyÅski (eljot<NULL>90125 at gmail dot com) Nawiasy trójkÄ tne z zawartoÅciÄ zbÄdne sÄ There are 10 kinds of people: Those who understand binary and those who don't
Message-ID:
<kimsn0$2rn$1@node1.news.atman.pl>
Path:
polish.pugleaf.net!archive.newsdeef.eu!mbox2nntp-pl.comp.lang.perl.mbox.zip!p18ni19825wiv.0!nntp.google.com!feeder1.cambriumusenet.nl!feed.tweaknews.nl!85.12.40.131.MISMATCH!xlned.com!feeder3.xlned.com!news.astraweb.com!border6.a.newsrouter.astraweb.com!border4.nntp.ams.giganews.com!border2.nntp.ams.giganews.com!border2.nntp.dca.giganews.com!nntp.giganews.com!newsgate.cuhk.edu.hk!goblin2!goblin.stu.neva.ru!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail
References:
<kiersm$9ui$1@node2.news.atman.pl> <33jr1a-sf2.ln1@depesz.com> <kiftbl$d8o$1@node2.news.atman.pl>