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 preparequery_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!danquery_as!memverifikasi SQL terhadap skema saat pembangunan- Bidang dan tipe hasil disimpulkan secara otomatis
- Kolom yang dapat kosong menjadi
Option cargo sqlx preparememungkinkan 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
- Menghubungkan ke Database
- Query yang Diperiksa saat Kompilasi
- Operasi CRUD
- Migrasi