Ana içeriğe geç

Güncelleyen ve Güncellemeyen İfadeleri Bir Arada Kullanma

Güncelleyen ifadeler 5 güncelleme ilkelini kapsayan XQuery ifadeleridir.

Güncelleyen ve güncellemeyen ifadelerin bir arada kullanımıyla ilgili kurallar vardır:

  • Öncelikle, Güncelleme İfadelerinin herhangi bir değer döndürmediğini hatırlayalım. Yalnızca bir listeye güncelleme isteği eklerler. Sonunda listedeki güncellemeler, komut dizisinin yürütülmesinin sonunda (veya dönüştürme ifadesindeki modify ** yan tümcesinin sonunda) uygulanır. **

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

  • Güncelleyen ve güncellemeyen 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 ifadelerle değer 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.

fn:error() İşlev ve boş dizi () hem güncelleyen hem de güncellemeyen ifadelerde yer alabildikleri için özel durumlardır.

  • Benzer şekilde, bir if veya bir typeswitch dalı tutarlı olmalıdır: her ikisi de güncelleyen ya da her ikisi de güncellemeyen olmalıdır. Her iki dal da güncelleyen ise if ifadesinin kendisi güncelleyen olarak kabul edilir; tersi durumda da aynı kural geçerlidir.

  • Bir işlevin gövdesi güncelleyen bir ifadeyse, işlev şu anahtar sözcükle tanımlanmalıdır: updating Anahtar sözcük. Örnek:

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

Böyle bir işlevin çağrısı da güncelleyen bir ifade olarak kabul edilir. Doğal olarak, güncelleyen bir işlev değer döndürmez ve bu nedenle dönüş türü tanımlayamaz.