🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

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

#52529
From: Jarosław Lubczyński
Date: Thu, 21 Mar 2013 21:16
72 lines
4361 bytes
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ę.

-- 
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: <kiftbl$d8o$1@node2.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>

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: Thu, 21 Mar 2013 22:16:16 +0100
Organization: ATMAN - ATM S.A.
Lines: 73
Message-ID: <kiftbl$d8o$1@node2.news.atman.pl>
References: <kiersm$9ui$1@node2.news.atman.pl> <33jr1a-sf2.ln1@depesz.com>
Reply-To: guess@who.com.pl
NNTP-Posting-Host: apn-77-112-165-157.dynamic.gprs.plus.pl
Mime-Version: 1.0
X-Trace: node2.news.atman.pl 1363900598 13592 77.112.165.157 (21 Mar 2013 21:16:38 GMT)
X-Complaints-To: usenet@atman.pl
NNTP-Posting-Date: Thu, 21 Mar 2013 21:16:38 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20130307 Thunderbird/17.0.4
In-Reply-To: <33jr1a-sf2.ln1@depesz.com>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit