0Pricing
Learn Rust Coding · Ders

Derleme Zamanında Denetlenen Sorgular

Tür güvenli SQL

Derleme Zamanında Denetlenen Sorgular, CoddyKit'te ücretsiz bir Learn Rust Coding dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Learn Rust Coding öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Learn Rust Coding kursu toplamda 4 dersten oluşur.

En güçlü özellik

sqlx, SQL'inizi gerçek bir veritabanı şemasına karşı derleme zamanında doğrulayabilir. Yazım hataları, yanlış sütun adları ve tür uyuşmazlıkları derleme hatasına dönüşür.

  • query! makro ailesini kullanır
  • Hataları çalışma zamanından önce yakalar

query! ile query karşılaştırması

query() işlevi çalışma zamanında denetlenir. query! makrosu, derleme sırasında veritabanına bağlanarak derleme zamanında denetlenir.

use sqlx::{Pool, Postgres};

async fn run(pool: &Pool<Postgres>) {
    let rec = sqlx::query!("SELECT id, name FROM users WHERE id = $1", 1i32)
        .fetch_one(pool)
        .await
        .unwrap();
}

Türü belirlenmiş sonuç alanları

query! makrosu, seçilen sütunlarla eşleşen alanlara sahip anonim bir yapı oluşturur ve doğru Rust türlerini şemadan çıkarır.

use sqlx::{Pool, Postgres};

async fn name_of(pool: &Pool<Postgres>, id: i32) -> String {
    let rec = sqlx::query!("SELECT name FROM users WHERE id = $1", id)
        .fetch_one(pool)
        .await
        .unwrap();
    rec.name
}

Denetim nasıl çalışır?

Derleme zamanında sqlx'in ya canlı bir DATABASE_URL'ye ya da önbelleğe alınmış bir .sqlx dizinine ihtiyacı vardır. Parametre ve sonuç türlerini öğrenmek için sorguyu veritabanına gönderir.

cargo sqlx prepare ile çevrimdışı kip

Veritabanı olmayan sürekli tümleştirme ortamları için sorgu üst verilerini .sqlx/ içine kaydetmek üzere cargo sqlx prepare çalıştırın. Derlemeler daha sonra önbelleği kullanır.

cargo sqlx prepare

query_as! ile yapınıza eşleme

Satırları doğrudan tanımladığınız bir yapıya eşlemek için query_as! kullanın; sorgu yine tamamen denetlenir.

use sqlx::{Pool, Postgres};

struct User { id: i32, name: String }

async fn get(pool: &Pool<Postgres>) -> User {
    sqlx::query_as!(User, "SELECT id, name FROM users WHERE id = $1", 1i32)
        .fetch_one(pool)
        .await
        .unwrap()
}

Boş değer alabilen sütunlar Option'a dönüşür

Bir sütun NULL olabiliyorsa sqlx alanı bir Option yapar. name as "name!" gibi tür ek açıklamalarıyla çıkarımı geçersiz kılabilirsiniz.

use sqlx::{Pool, Postgres};

async fn maybe_email(pool: &Pool<Postgres>) -> Option<String> {
    let rec = sqlx::query!("SELECT email FROM users WHERE id = $1", 1i32)
        .fetch_one(pool)
        .await
        .unwrap();
    rec.email
}

Tür çıkarımını modelleme

Derleme zamanı denetimi, SQL türlerini Rust türlerine eşler. Bu çalıştırılabilir örnek, bu eşleme kararını modeller.

fn rust_type(sql: &str, nullable: bool) -> String {
    let base = match sql {
        "int4" => "i32",
        "text" => "String",
        "bool" => "bool",
        _ => "unknown",
    };
    if nullable { format!("Option<{}>", base) } else { base.to_string() }
}

fn main() {
    println!("{}", rust_type("int4", false));
    println!("{}", rust_type("text", true));
}

Göreceğiniz derleme hataları

Eksik bir sütuna başvurursanız sqlx, anlaşılır bir iletiyle derlemeyi başarısız kılar. Makroların temel amacı bu güvenliktir.

  • Yanlış sütun adı → derleme zamanında hata
  • Tür uyuşmazlığı → derleme zamanında hata

Bağlama parametreleri konumsaldır

Postgres için $1, $2 yer tutucularını kullanın. sqlx, bağlanan her bağımsız değişkenin türünü şemaya karşı denetler.

use sqlx::{Pool, Postgres};

async fn search(pool: &Pool<Postgres>, name: &str, min_age: i32) {
    let _ = sqlx::query!(
        "SELECT id FROM users WHERE name = $1 AND age >= $2",
        name, min_age
    ).fetch_all(pool).await.unwrap();
}

Makro olmayan biçim ne zaman kullanılmalı?

Çalışma zamanında oluşturulan dinamik SQL için (sütunları önceden bilmiyorsanız) query() / query_as() kullanın. Esneklik karşılığında derleme zamanı denetimlerinden vazgeçersiniz.

use sqlx::{Pool, Postgres};

async fn dynamic(pool: &Pool<Postgres>, sql: &str) {
    let _ = sqlx::query(sql).execute(pool).await.unwrap();
}

Hızlı Kontrol

Derleme zamanı denetimiyle ilgili anlayışınızı sınayın.

Özet

Derleme zamanında denetlenen sorguları öğrendiniz:

  • query! ve query_as!, SQL'i derleme sırasında şemaya karşı doğrular
  • Sonuç alanları ve türleri otomatik olarak çıkarılır
  • Boş değer alabilen sütunlar Option'a dönüşür
  • cargo sqlx prepare, çevrimdışı derlemeleri etkinleştirir
  • Dinamik SQL için makro olmayan query() kullanın

Sırada: CRUD işlemleri.

Sıkça Sorulan Sorular

“Derleme Zamanında Denetlenen Sorgular” dersi ücretsiz mi?

Evet — “Derleme Zamanında Denetlenen Sorgular” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Learn Rust Coding kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Learn Rust Coding kursu toplamda 4 dersten oluşur.

“Derleme Zamanında Denetlenen Sorgular” dersinde ne öğreneceğim?

Tür güvenli SQL Learn Rust Coding ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Learn Rust Coding öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Learn Rust Coding, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Derleme Zamanında Denetlenen Sorgular” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Learn Rust Coding dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Learn Rust Coding dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Veritabanına Bağlanma
  2. Derleme Zamanında Denetlenen Sorgular
  3. CRUD İşlemleri
  4. Geçişler
← Learn Rust Coding Sayfasına Dön