🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.java
Article #153986

Re: Dodawanie WHERE do dowolnego zapytania SQL

#153986
From: J-23
Date: Mon, 10 Feb 2014 18:13
66 lines
3473 bytes
W dniu 10.02.2014 17:33, Arivald pisze:
> W dniu 2014-02-10 16:01, J-23 pisze:
>> W dniu 09.02.2014 23:14, Arivald pisze:
>>> On 2014-02-09 22:50, J-23 wrote:
>>>> Witam,
>>
>>>
>>> Jedyne rozwiązanie o jakim mogę pomyśleć, to pełny parser SQL. Parsujesz
>>> oryginalny SQL do drzewa obiektów, dodajesz swoje warunki i ponownie
>>> generujesz SQL.
>>>
>>> Rozwiązanie oparte na stringach już widziałem, i niestety musiałem z nim
>>> pracować... Kod okropny, a w miarę pojawiania się kolejnych przypadków
>>> do obsłużenie coraz okropniejszy.
>>>
>>> A parserów w Javie jest trochę, trzeba by sprawdzić który odpowiada
>>> Twoim wymaganiom.
>>>
>>
>> A robiłeś coś takiego wiesz który potrafi to zrobić w obie strony jak
>> piszesz?
>>
>
> Nie, jeszcze tego nie przerabiałem. Ale po doświadczeniach z tamtym
> kodem powiedziałem sobie "nigdy więcej" ;-) Dlatego nie polecam takiego
> podejścia.
>
> A tak właściwie to do czego Ci to potrzebne? Mo może wystarczy
> programowe filtrowanie już po otrzymaniu wyniku?
>

Robie pewnego rodzaju automat nie będe się rozpisywał bo to by trochę 
zajęło, ale została mi edycja rekodu do zrobienia a ze zasada jest taka 
że dane w tym automacie zależą od zapytania SQL które może być zmienione 
podczas działania programu to musze zabezpieczyc dane podczas edycji 
(przed zmianą przez innego użytkownika) czyli:

mam np zapytanie SQL

SELECT sesje.id_sesje, sesje.numer, sesje.data, sesje.rozpatrzona, 
osoby.imie ||' '|| osoby.nazwisko AS przewodniczacy FROM sesje
LEFT JOIN sesje_eksperci ON sesje.id_sesje=sesje_eksperci.id_sesje AND 
sesje_eksperci.przewodniczacy=1
LEFT JOIN osoby ON osoby.id_osoby=sesje_eksperci.id_osoby
ORDER BY sesje.numer ASC


muszę to zapytanie odpalić w transakcji z izolacją Seriabile ale w postaci

SELECT sesje.id_sesje, sesje.numer, sesje.data, sesje.rozpatrzona, 
osoby.imie ||' '|| osoby.nazwisko AS przewodniczacy FROM sesje
LEFT JOIN sesje_eksperci ON sesje.id_sesje=sesje_eksperci.id_sesje AND 
sesje_eksperci.przewodniczacy=1
LEFT JOIN osoby ON osoby.id_osoby=sesje_eksperci.id_osoby

WHERE sesje.id_sesje=1 <---- ten element został dodany by dokonać edycji

ORDER BY sesje.numer ASC


ten SQL to tylko przykład ale zapytania mogą być dowolne

edycja rekordu zawsze będzie się odbywać po kluczu głownym i to go 
trzeba dodać do istniejącego SQL

Pozdrawiam
Technical Details
Message-ID: <ldb4ue$a82$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: <ld8t8a$vlk$1@node2.news.atman.pl> <ld8uks$fp2$1@news.dialog.net.pl> <ldapm3$p1t$1@node1.news.atman.pl> <ldav1h$eia$1@news.dialog.net.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: J-23 <baczeklu@o2.pl>
Newsgroups: pl.comp.lang.delphi.bazy-danych,pl.comp.lang.java
Subject: Re: Dodawanie WHERE do dowolnego zapytania SQL
Date: Mon, 10 Feb 2014 19:13:40 +0100
Organization: ATMAN - ATM S.A.
Lines: 67
Message-ID: <ldb4ue$a82$1@node2.news.atman.pl>
References: <ld8t8a$vlk$1@node2.news.atman.pl> <ld8uks$fp2$1@news.dialog.net.pl> <ldapm3$p1t$1@node1.news.atman.pl> <ldav1h$eia$1@news.dialog.net.pl>
NNTP-Posting-Host: 87-205-165-161.adsl.inetia.pl
Mime-Version: 1.0
X-Trace: node2.news.atman.pl 1392056079 10498 87.205.165.161 (10 Feb 2014 18:14:39 GMT)
X-Complaints-To: usenet@atman.pl
NNTP-Posting-Date: Mon, 10 Feb 2014 18:14:39 +0000 (UTC)
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0
In-Reply-To: <ldav1h$eia$1@news.dialog.net.pl>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit