2 Şubat 2022 Çarşamba

Konfigürasyon Tablosu

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)
)

Hiç yorum yok:

Yorum Gönder

Soft Delete

Giriş Açıklaması  şöyle When using the soft delete mechanism on the database, you might run into a situation where a record with a unique co...