Doğrulama
check kuralları, nullable, default ve parola alanları.
Kurallar her insert ve update'te uygulanır. Kurala uymayan bir değer yazılmaz ve hata mesajı hangi alanın neden reddedildiğini söyler.
check#
create_schema('kisiler')
.fields({
'email': {type: string, max_length: 100, index: {unique: true},
check: regex('^[\w.-]+@([\w-]+\.)+[\w-]{2,4}$')},
'age': {type: int8, check: {min: 0, max: 120}},
'gender': {type: int8, check: enum({0: 'male', 1: 'female'})},
'kayit': {type: date, check: {min: '2020-01-01'}}
})
.commit();| Kural | Uygulandığı türler |
|---|---|
{min: …, max: …} | sayılar, decimal, tarihler |
regex('…') | string, text (RE2 sözdizimi: ileri bakış ve geri başvuru yok) |
enum({değer: 'etiket'}) | tamsayılar ve metin |
password_hash() | string (max_length ≥ 128), text |
Birden fazla kural dizi olarak verilir: check: [regex('^[a-z]+$'), enum({'a': 'A', 'b': 'B'})].
# hata: age: 125 is above max 120
from('kisiler').insert_one({email: 'a@b.co', age: 125});int8 en fazla 127 tutar. 130 yazılsaydı hata "does not fit int8" olurdu: tür sınırı kurallardan önce denetlenir.
# hata: gender: 7 is not one of 0 (male), 1 (female)
from('kisiler').insert_one({email: 'a@b.co', gender: 7});nullable ve default#
create_schema('notlar')
.fields({
'no': {type: int64, autoincrement: true, primary_key: true},
'baslik': {type: string, max_length: 80, nullable: false},
'durum': {type: string, max_length: 10, default: 'taslak'},
'olusma': {type: timestamp, default: now()}
})
.commit();
from('notlar').insert_one({baslik: 'İlk not'});# hata: baslik is required (not nullable)
from('notlar').insert_one({durum: 'yayinda'});Varsayılan değer de alanın kurallarına uymalıdır; uymayan bir default şema oluşturulurken reddedilir.
Parola alanları#
create_schema('hesaplar')
.fields({
'kullanici': {type: string, max_length: 40, primary_key: true},
'parola': {type: string, check: password_hash()}
})
.commit();
from('hesaplar').insert_one({kullanici: 'osman', parola: 'gizli-parola'});
from('hesaplar').fields('*').get();- Değer yazılmadan önce Argon2id ile özetlenir; ham parola diske yazılmaz.
- Sorgu sonuçlarında parola alanları
••••••olarak görünür. - Zaten bir Argon2id özeti olan değer (başka bir sistemden aktarım) yeniden özetlenmez.
password_hashyalnızca alan oluşturulurken eklenebilir. Var olan bir alana sonradan eklenirse o alandaki değerler özetlenmemiş kalırdı.
Benzersizlik#
Benzersiz bir indeks aynı değerin ikinci kez yazılmasını engeller:
from('kisiler').insert_one({email: 'osman@example.com'});# hata: email: value osman@example.com already exists (unique index idx_email)
from('kisiler').insert_one({email: 'osman@example.com'});