🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

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

#52530
From: Jarosław Lubczyński
Date: Sun, 24 Mar 2013 12:48
80 lines
4645 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=990483
> pewno z rana przetestuję.
>


W końcu pod adresem
     http://www.perlmonks.org/?node_id=990750
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
Technical Details
Message-ID: <kimsn0$2rn$1@node1.news.atman.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!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>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail
From: Jarosław Lubczyński <guess@who.com.pl>
Newsgroups: pl.comp.lang.perl
Subject: Re: Dopasowanie do komentarzy w skryptach SQL przy pomocy
 wyrażenia regularnego
Date: Sun, 24 Mar 2013 13:48:24 +0100
Organization: ATMAN - ATM S.A.
Lines: 81
Message-ID: <kimsn0$2rn$1@node1.news.atman.pl>
References: <kiersm$9ui$1@node2.news.atman.pl> <33jr1a-sf2.ln1@depesz.com> <kiftbl$d8o$1@node2.news.atman.pl>
Reply-To: guess@who.com.pl
NNTP-Posting-Host: apn-95-41-254-184.dynamic.gprs.plus.pl
Mime-Version: 1.0
X-Trace: node1.news.atman.pl 1364129313 2935 95.41.254.184 (24 Mar 2013 12:48:33 GMT)
X-Complaints-To: usenet@atman.pl
NNTP-Posting-Date: Sun, 24 Mar 2013 12:48:33 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20130307 Thunderbird/17.0.4
In-Reply-To: <kiftbl$d8o$1@node2.news.atman.pl>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit