🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.perl
Article #51427

Re: Dopasowanie do komentarzy w skryptach SQL przy pomocy wyrażenia regularnego

#51427
From: =?UTF-8?B?SmFyb3
Date: Sun, 24 Mar 2013 13:48
82 lines
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_id™0483
> pewno z rana przetestuję.
>


W końcu pod adresem
     http://www.perlmonks.org/?node_id™0750
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>