Thread View: pl.comp.lang.perl
4 messages
4 total messages
Started by Jarosław Lubczyński
Thu, 21 Mar 2013 11:44
Dopasowanie do komentarzy w skryptach SQL przy pomocy wyrażenia regularnego
Author: Jarosław Lubczyński
Date: Thu, 21 Mar 2013 11:44
Date: Thu, 21 Mar 2013 11:44
26 lines
1808 bytes
1808 bytes
Witam ponownie, 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; I tu prośba o pomoc :). -- 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
Re: Dopasowanie do komentarzy w skryptach SQL przy pomocy wyrażenia regularnego
Author: hubert depesz lubaczewski
Date: Thu, 21 Mar 2013 14:46
Date: Thu, 21 Mar 2013 14:46
28 lines
2357 bytes
2357 bytes
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ć.
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. PostgreSQL
supportuje obie wersje, przy czym \' działa (bez warningów) tylko
w E-literałach.
--
The best thing about modern society is how easy it is to avoid contact with it.
http://depesz.com/
Re: Dopasowanie do komentarzy w skryptach SQL przy pomocy wyrażenia regularnego
Author: Jarosław Lubczyński
Date: Thu, 21 Mar 2013 21:16
Date: Thu, 21 Mar 2013 21:16
72 lines
4361 bytes
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
Re: Dopasowanie do komentarzy w skryptach SQL przy pomocy wyrażenia regularnego
Author: Jarosław Lubczyński
Date: Sun, 24 Mar 2013 12:48
Date: Sun, 24 Mar 2013 12:48
80 lines
4645 bytes
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
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads