0Pricing
Learn Rust Coding · Pelajaran

Query yang Diperiksa saat Kompilasi

SQL yang aman terhadap tipe

Query yang Diperiksa saat Kompilasi adalah pelajaran Learn Rust Coding gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Learn Rust Coding, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Learn Rust Coding mencakup 4 pelajaran total.

Fitur andalan

sqlx dapat memverifikasi SQL Anda saat kompilasi terhadap skema basis data nyata. Kesalahan ketik, nama kolom yang salah, dan ketidakcocokan tipe akan menjadi kesalahan saat pembangunan.

  • Menggunakan keluarga makro query!
  • Menemukan bug sebelum waktu proses

query! dibandingkan dengan query

Fungsi query() diperiksa saat waktu proses. Makro query! diperiksa saat kompilasi dengan menyambung ke basis data selama pembangunan.

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();
}

Kolom hasil bertipe

Makro query! menghasilkan struct anonim yang bidang-bidangnya sesuai dengan kolom yang dipilih, dengan tipe Rust yang benar disimpulkan dari skema.

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
}

Cara kerja pemeriksaan

Saat pembangunan, sqlx memerlukan DATABASE_URL yang aktif atau direktori .sqlx yang tersimpan. sqlx mengirimkan kueri ke basis data untuk mengetahui tipe parameter dan hasilnya.

Mode luring dengan cargo sqlx prepare

Untuk CI tanpa basis data, jalankan cargo sqlx prepare untuk menyimpan metadata kueri ke dalam .sqlx/. Pembangunan selanjutnya menggunakan tembolok tersebut.

cargo sqlx prepare

query_as! ke struct Anda

Gunakan query_as! untuk memetakan baris langsung ke struct yang Anda definisikan, dengan pemeriksaan penuh tetap berlaku.

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()
}

Kolom yang dapat kosong menjadi Option

Jika sebuah kolom dapat bernilai NULL, sqlx menjadikan bidang tersebut sebagai Option. Anda dapat mengganti hasil inferensi dengan anotasi tipe seperti name as "name!".

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
}

Memodelkan inferensi tipe

Pemeriksaan saat kompilasi memetakan tipe SQL ke tipe Rust. Contoh yang dapat dijalankan ini memodelkan keputusan pemetaan tersebut.

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));
}

Kesalahan kompilasi yang akan Anda lihat

Jika Anda merujuk kolom yang tidak ada, sqlx akan menggagalkan pembangunan dengan pesan yang jelas. Keamanan inilah tujuan utama makro tersebut.

  • Nama kolom salah → kesalahan saat kompilasi
  • Tipe tidak cocok → kesalahan saat kompilasi

Parameter ikatan bersifat posisional

Gunakan placeholder $1, $2 untuk Postgres. sqlx memeriksa tipe setiap argumen yang diikat terhadap skema.

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();
}

Kapan menggunakan bentuk nonmakro

Untuk SQL dinamis yang dibuat saat waktu proses (kolom belum diketahui sebelumnya), gunakan query() / query_as(). Anda menukar pemeriksaan saat kompilasi dengan fleksibilitas.

use sqlx::{Pool, Postgres};

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

Pemeriksaan Singkat

Uji pemahaman Anda tentang pemeriksaan saat kompilasi.

Rangkuman

Anda telah mempelajari kueri yang diperiksa saat kompilasi:

  • query! dan query_as! memverifikasi SQL terhadap skema saat pembangunan
  • Bidang dan tipe hasil disimpulkan secara otomatis
  • Kolom yang dapat kosong menjadi Option
  • cargo sqlx prepare memungkinkan pembangunan luring
  • Gunakan query() nonmakro untuk SQL dinamis

Berikutnya: operasi CRUD.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Query yang Diperiksa saat Kompilasi” gratis?

Ya — teks lengkap “Query yang Diperiksa saat Kompilasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Learn Rust Coding, upgrade ke CoddyKit PRO. Kursus Learn Rust Coding mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Query yang Diperiksa saat Kompilasi”?

SQL yang aman terhadap tipe Kamu berlatih Learn Rust Coding dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Learn Rust Coding?

Tidak diperlukan pengalaman sebelumnya. Learn Rust Coding di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Query yang Diperiksa saat Kompilasi” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Learn Rust Coding ini?

Ya. Setiap pelajaran Learn Rust Coding menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Menghubungkan ke Database
  2. Query yang Diperiksa saat Kompilasi
  3. Operasi CRUD
  4. Migrasi
← Kembali ke Learn Rust Coding