Ana içeriğe geç

Güncelleme Yapan ve Güncelleme Yapmayan İfadeleri Bir Arada Kullanma

Güncelleme yapan ifadeler , 5 güncelleme ilkelini kapsayan XQuery ifadeleridir.

Güncelleme yapan ve güncelleme yapmayan ifadeleri bir arada kullanmayla ilgili kurallar vardır:

  • Öncelikle, Güncelleme İfadelerinin herhangi bir değer döndürmediğini hatırlayalım. Bunlar yalnızca bir listeye güncelleme isteği ekler. Sonunda listedeki güncellemeler, bir betik yürütmesinin sonunda (veya modify ** yan tümcesinin sonunda, transform** ifadesi söz konusu olduğunda) uygulanır.

  • Bu nedenle güncelleme yapan ifadelere, anlamlı bir değer beklendiği yerlerde izin verilmez. Örneğin bir ififadesinin koşulunda, bir let :=ifadesinin sağ tarafında, in bölümünde, bir for ifadesinde ve benzeri yerlerde.

  • Güncelleme yapan ve güncelleme yapmayan ifadelerin bir dizide (virgül işleci) bir arada kullanılmasına izin verilmez. Teknik olarak mümkün olsa da, değer döndüren ve döndürmeyen ifadeleri karıştırmak pek anlamlı olmaz; dizi işleci, bileşenlerinin döndürdüğü dizilerin birleştirilmiş hâlini döndürür.

Şu fn:error() işlev ve boş dizi () özeldir; çünkü hem güncelleme yapan hem de güncelleme yapmayan ifadelerde yer alabilirler.

  • Benzer şekilde, bir if veya bir typeswitch ifadesinin dalları tutarlı olmalıdır: ikisi de güncelleme yapan veya ikisi de güncelleme yapmayan olmalıdır. Her iki dal da güncelleme yapıyorsa if ifadesinin kendisi güncelleme yapan olarak değerlendirilir; tersi durumda da aynı kural geçerlidir.

  • Bir işlevin gövdesi güncelleme yapan bir ifadeyse, işlevin updating anahtar sözcüğüyle bildirilmesi gerekir. Örnek:

1
2
3
declare updating function insert-id($elem, $id-value) {
 insert node attribute id { $id-value } into $elem
}

Böyle bir işlev çağrısı da güncelleme yapan bir ifade olarak değerlendirilir. Doğal olarak güncelleme yapan bir işlev değer döndürmez ve bu nedenle dönüş türü bildiremez.