İçeriğe geç
NarDBv0.2.0-dev

Ekleme, güncelleme, silme

insert_one, insert_many, update ve delete; etkilenen satırları .get() ile almak.

insert_one#

Nesne biçimi önerilen yazımdır; alan adı ile değer yan yana durur:

NarQL
from('uyeler').insert_one({name: 'Zeynep', surname: 'Kaya', email: 'zeynep@example.com', age: 27});

Konumsal biçimde değerler önce yazılır, alan adları fields(...) ile verilir. Değer sayısı alan sayısıyla aynı olmalıdır:

NarQL
from('uyeler')
    .insert_one('Can', 'Demir', 'can@example.com', 40, '01.05.1986')
    .fields('name', 'surname', 'email', 'age', 'birth_date')
    .get();

Verilmeyen alanlar şöyle doldurulur:

  • autoincrement alanlar bir sonraki sayıyı alır,
  • guid alanlar yeni bir kimlik alır,
  • default tanımlı alanlar varsayılan değerini alır,
  • diğerleri null olur. Alan nullable: false ise hata verilir.

.get() eklenen satırları döndürür; üretilen kimlikleri görmek için kullanılır.

insert_many#

NarQL
from('uyeler').insert_many([
    {name: 'Ece', email: 'ece@example.com'},
    {name: 'Mert', email: 'mert@example.com'}
]);

Bir satır reddedilirse hiçbir satır eklenmez; hata mesajı kaçıncı satırda durulduğunu söyler.

update#

NarQL
from('uyeler')
    .where({'email': 'osman@example.com'})
    .update({'name': 'Mehmet', 'age': 46})
    .get();
  • Kurallar (check, max_length, benzersizlik) yeni değerlere de uygulanır.
  • İndeksli bir alan değişirse indeks de güncellenir.
  • Parola alanları yeniden özetlenir.
  • .commit() yazılabilir ama bir şey değiştirmez: her ifade zaten kendi başına kalıcıdır.

where olmadan update reddedilir; yanlışlıkla bütün tabloyu değiştirmemek için. Bütün satırları değiştirmek isteniyorsa .all() yazılmalıdır:

NarQL
# hata: update without where would change every row; add .where({...}) or .all()
from('uyeler').update({'gender': 0});
NarQL
from('uyeler').all().update({'gender': 0});

delete#

NarQL
from('uyeler').where({'age': {lt: 30}}).delete().get();

.get() silinen satırları döndürür. where olmadan delete de .all() ister.

Atomiklik#

Her ifade tek bir işlemdir: ya tamamen uygulanır ya hiç. Çok satırlı bir insert_many, update ya da delete ortada bir hatayla durursa hiçbir satır değişmez. Commit edilen bir ifade önce yazma günlüğüne (WAL) yazılıp diske indirilir; ani bir kapanmada geri gelir.

NarQL
# hata: row 2: email: value same@example.com already exists (unique index idx_email) (nothing was inserted)
from('uyeler').insert_many([
    {name: 'Bir', email: 'same@example.com'},
    {name: 'İki', email: 'same@example.com'}
]);

Birden fazla ifadeyi tek işlemde toplamak (begin / commit) henüz yok.