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

alter_schema

Alan ve indeks eklemek, güncellemek, yeniden adlandırmak ve silmek.

alter_schema var olan bir şemayı değiştirir. Adımlar herhangi bir sırayla yazılabilir; yazıldıkları sırayla uygulanır.

NarQL
alter_schema('uyeler')
    .add_field({'phone': {type: string, max_length: 20, default: '-'}})
    .add_index({'surname': {name: 'idx_surname'}})
    .update_field({'name': {max_length: 80}, 'age': {type: int16}})
    .update_index({'idx_email': {name: 'idx_eposta'}})
    .commit();
AdımNe yapar
add_field({...}) / add_fieldsAlan ekler; seçenekler create_schema ile aynı.
update_field({...}) / update_fieldsVar olan alanın seçeneklerini değiştirir.
`add_index({'alan': true \{name, unique}})`İndeks ekler ve var olan satırlardan kurar.
update_index({'ad': {unique, name}})İndeksi yeniden adlandırır ya da benzersizliğini değiştirir.
drop_field('ad')Alanı siler. Alanın indeksleri de silinir.
drop_index('ad')İndeksi siler.
commit()Değişikliği uygular. Yoksa yalnızca doğrulanır.

Her başarılı alter_schema şemanın sürümünü bir artırır. describe_schema -n uyeler güncel sürümü gösterir.

Var olan veri#

Var olan satırları etkileyen değişiklikler, uygulanmadan önce bütün satırlara karşı denetlenir. .commit() yazılmasa bile bu denetim yapılır.

NarQL
# hata: existing row ... violates the change: name: ... max_length is 3
alter_schema('uyeler').update_field({'name': {max_length: 3}}).commit();

Denetlenen değişiklikler:

  • max_length'i kısaltmak,
  • nullable: false yapmak,
  • yeni bir check eklemek,
  • encoding değiştirmek,
  • varsayılanı olmayan zorunlu bir alan eklemek,
  • indeksi unique yapmak.

Yeni eklenen bir alan eski satırlarda varsayılan değeriyle okunur. Varsayılanı yoksa null okunur. Kayıtlar yeniden yazılmaz.

NarQL
from('uyeler').where({'name': 'Osman'}).fields('name', 'phone').get();

update_field seçenekleri#

SeçenekNot
typeYalnızca genişletme: int8 → int16 → int32 → int64, uint8 → … → uint64, float32 → float64, string → text, date → datetime → timestamp.
max_length, encoding, format, nullable, default, checkcreate_schema ile aynı.
indextrue / {name, unique} ekler, false siler.
renameAlanı yeniden adlandırır. Alanın kimliği aynı kaldığı için kayıtlar yeniden yazılmaz.
NarQL
alter_schema('uyeler')
    .update_field({'surname': {rename: 'soyad'}})
    .commit();

from('uyeler').fields('name', 'soyad').get();

Daraltan tür değişiklikleri (int64 → int8, string → int32 gibi) reddedilir. Bunun için yeni bir alan ekleyip veriyi kopyalayın.

NarQL
# hata: age cannot change from int16 to string (it can widen to int32, int64)
alter_schema('uyeler').update_field({'age': {type: string}}).commit();

(age bu sayfanın başında int16'ya genişletilmişti.)

Birincil anahtar, autoincrement ve guid alan oluşturulduktan sonra değiştirilemez. Birincil anahtar silinemez ve sonradan eklenemez.