Giriş
Konfigürasyon tablosundaki değerlere göre farklı SQL çalıştırmak istersek bazı örnekler şöyle
Örnek
Bu örnek çok karışık ancak basitçe anlatırsak
Eğer ENABLE_A özelliği TRUE ise
ROLE değeri PRIMARY ise
Eğer STATUS GREEN ve RED değilse ilk 1000 id'yi çek
Eğer STATUS GREEN veya YELLOW ise her şeyi çek
Bu çekilenlerden en küçüğünü seç
ROLE değeri SECONDARY ise
Eğer STATUS GREEN ve RED değilse en son1000 id'yi çek
Eğer STATUS GREEN veya YELLOW ve eğer kullanılabilecek eleman kaldıysa onları çek
Bu çekilenlerden en büyüğünü seç
Eğer ENABLE_A özelliği FALSE ise
İlk gelen elemanı çek
SELECT * FROM foo vm
LEFT JOIN bar fr ON vm.vm_id = fr.vm_id WHERE
-- check whether it is A configuration
(
((SELECT upper(pr.value) FROM my_properties pr WHERE pr.name='ENABLE_A')='TRUE')
AND (
-- select first free vm from top
(
(SELECT upper(pr.value) FROM my_properties pr WHERE pr.name='ROLE')='PRIMARY' AND vm.vm_id =
(
SELECT min(vmin1.vm_id) FROM foo vmin1,my_properties pr WHERE vmin1.vmtype = 'D'
AND
(
(
vmin1.vm_id IN
(
SELECT vm_id FROM
(
SELECT vmin2.vm_id FROM foo vmin2 WHERE vmin2.vmtype = 'D' order by vmin2.vm_id ASC LIMIT 1000
) as t
)
AND pr.name='STATUS' AND (pr.value !='GREEN' AND pr.value !='RED')
)
OR
(
pr.name='STATUS' AND (pr.value ='GREEN' OR pr.value ='YELLOW' )
)
)
)
)
OR
-- select first free vm from bottom
(
(SELECT upper(pr.value) FROM my_properties pr WHERE pr.name='ROLE')='SECONDARY' AND vm.vm_id =
(
SELECT max(vmin1.vm_id) FROM foo vmin1,my_properties pr WHERE vmin1.vmtype = 'D'
AND
(
(
vmin1.vm_id IN
(
SELECT vm_id FROM
(
SELECT vmin2.vm_id FROM foo vmin2 WHERE vmin2.vmtype = 'D' order by vmin2.vm_id DESC LIMIT 1000
) as t1
)
AND pr.name='STATUS' AND (pr.value !='GREEN' AND pr.value !='RED')
)
OR
(
pr.name='STATUS' AND (pr.value ='GREEN' OR pr.value ='YELLOW')
-- if 1 item left should not be used by secondary site if ENABLE_A is TRUE or disabled (to avoid
-- conflicts)
AND ((SELECT count(*) FROM foo vmin4 WHERE (vmin4.vmtype = 'D') AND (vmin4.vmexpirationdate < ? OR vmin4.vmexpirationdate IS NULL)) > 1)
)
)
)
)
)
)
OR
-- in B configuration use first free one
(
((SELECT upper(pr.value) FROM my_properties pr WHERE pr.name='ENABLE_A')!='TRUE') AND vm.vmtype = 'D'
AND (vm.vmexpirationdate < ? OR vm.vmexpirationdate IS NULL)
)