parsql
Deneyimsel bir sql yardımcı küfesidir. Bu bir ORM aracı değildir. Amaç sql yazımı ve kullanımında basit cümlecikler için kolaylık sağlamaktır.
Özellikler
- Otomatik SQL sorgu oluşturma
- Güvenli parametre yönetimi
- Birden fazla veritabanı sistemi için destek (PostgreSQL, SQLite, Tokio PostgreSQL, Deadpool PostgreSQL)
- Tip güvenliği olan veritabanı işlemleri
- SQL Injection saldırılarına karşı otomatik koruma
- Yeni (0.3.3): Sayfalama (pagination) için tam destek:
limitveoffsetöznitelikleri ile verimli sayfalama yapabilirsiniz Queryabletüretme özniteliği, tablo adı, where ifadesi, select ifadesi, group by, having, order by, limit ve offset ifadeleri için destek sağlar.Insertabletüretme özniteliği, tabloya özgü INSERT ifadeleri oluşturur.Updateabletüretme özniteliği, tabloya özgü UPDATE ifadeleri oluşturur.Deletabletüretme özniteliği, tabloya özgü DELETE ifadeleri oluşturur.SqlParamstüretme özniteliği, yapının SQL parametreleri için kullanılmasını sağlar.UpdateParamstüretme özniteliği, yapının UPDATE ifadeleri için kullanılmasını sağlar.FromRowtüretme özniteliği, veritabanı satırlarının yapıya dönüştürülmesini sağlar.- Yeni (0.3.3): SQL trace kayıtları için
PARSQL_TRACEçevre değişkeni desteği eklendi.
Ne İşe Yarar?
Parsql, SQL sorgularınızı doğrudan Rust struct'ları üzerinden yönetmenize olanak tanıyan bir kütüphanedir. Temel amacı, veritabanı işlemlerini daha güvenli ve daha az kod ile gerçekleştirmenizi sağlamaktır. Bu kütüphane ile:
- Struct tanımları üzerinden otomatik SQL sorguları oluşturabilirsiniz
- Veritabanı parametrelerini güvenli bir şekilde yönetebilirsiniz
- Generic CRUD işlemlerini (ekleme, okuma, güncelleme, silme) kolayca yapabilirsiniz
- Dinamik SQL oluşturabilir ve karmaşık sorgular çalıştırabilirsiniz
- Asenkron veritabanı işlemlerini kolayca gerçekleştirebilirsiniz
- SQL injection saldırılarına karşı otomatik koruma sağlayabilirsiniz
- Doğrudan
PoolveTransactionnesneleri üzerinde extension method'lar kullanabilirsiniz
Parsql standart bir ORM değildir. Daha çok, SQL yazımını ve kullanımını basitleştirmeye odaklanır.
Desteklenen Veritabanları
Parsql aşağıdaki veritabanı sistemlerini desteklemektedir:
- SQLite (senkron):
parsql-sqlitepaketi - PostgreSQL (senkron):
parsql-postgrespaketi - Tokio PostgreSQL (asenkron):
parsql-tokio-postgrespaketi - Deadpool PostgreSQL (asenkron bağlantı havuzu):
parsql-deadpool-postgrespaketi
Kurulum
Cargo.toml içinde aşağıdaki şekilde tanımlama yapın:
[]
= { = "0.5.0", = ["sqlite"] }
veya PostgreSQL için:
[]
= { = "0.5.0", = ["postgres"] }
veya Tokio PostgreSQL için:
[]
= { = "0.5.0", = ["tokio-postgres"] }
veya Deadpool PostgreSQL için:
[]
= { = "0.5.0", = ["deadpool-postgres"] }
Temel Özellikler
Prelude Modülü (v0.5.0+)
Parsql artık tüm yaygın kullanılan trait'ler, makrolar ve tipleri içeren bir prelude modülü sunmaktadır:
use *;
Bu import ile şunlara erişebilirsiniz:
- Tüm derive makroları (
Queryable,Insertable,Updateable,Deletable,FromRow,SqlParams,UpdateParams) - Tüm trait'ler (
CrudOps,FromRow,SqlParams,SqlQuery,SqlCommand,UpdateParams) - Veritabanına özel tipler (
Row,ToSql,Connection,Error, vb.) - Extension trait'leri (
SqliteConnectionExt,PostgresConnectionExt, vb.)
Procedural Makrolar
Parsql, veritabanı işlemlerini kolaylaştırmak için çeşitli procedural makrolar sunar:
#[derive(Queryable)]- Okuma (select) işlemleri için#[derive(Insertable)]- Ekleme işlemleri için#[derive(Updateable)]- Güncelleme işlemleri için#[derive(Deletable)]- Silme işlemleri için#[derive(FromRow)]- Veritabanı sonuçlarını nesnelere dönüştürmek için#[derive(SqlParams)]- SQL parametrelerini yapılandırmak için#[derive(UpdateParams)]- Güncelleme parametrelerini yapılandırmak için
Extension Metodu Kullanımı
Parsql, 0.3.3 sürümünden itibaren, CRUD işlemlerini doğrudan veritabanı nesneleri üzerinden yapmanızı sağlayan extension metotları sunmaktadır. Bu yaklaşım sayesinde kodunuz daha akıcı ve okunabilir hale gelir.
Pool Nesnesi Üzerinde Extension Metodları
Bağlantı havuzu (Pool) nesneleri üzerinde doğrudan CRUD işlemleri yapabilirsiniz:
// Geleneksel kullanım
let rows_affected = insert.await?;
// Extension metodu ile kullanım (prelude ile otomatik gelir)
let rows_affected = pool.insert.await?;
Transaction Nesnesi Üzerinde Extension Metodları
Transaction nesneleri üzerinde doğrudan CRUD işlemleri yapabilirsiniz:
// Geleneksel kullanım
let = tx_insert.await?;
// Extension metodu ile kullanım (prelude ile otomatik gelir)
let rows_affected = tx.insert.await?;
Desteklenen Extension Metodları
Hem Pool hem de Transaction nesneleri için şu extension metodları kullanılabilir:
insert(entity)- Kayıt eklerupdate(entity)- Kayıt güncellerdelete(entity)- Kayıt silerfetch(params)- Tek bir kayıt getirirfetch_all(params)- Birden fazla kayıt getirirselect(entity, to_model)- Özel dönüştürücü fonksiyon ile tek kayıt getirirselect_all(entity, to_model)- Özel dönüştürücü fonksiyon ile çoklu kayıt getirir
Transaction Desteği
Parsql şu anda aşağıdaki paketlerde transaction desteği sunmaktadır:
parsql-postgres- Senkron PostgreSQL işlemleri için transaction desteğiparsql-tokio-postgres- Asenkron Tokio-PostgreSQL işlemleri için transaction desteğiparsql-deadpool-postgres- Asenkron Deadpool PostgreSQL bağlantı havuzu için transaction desteği
Örnek bir transaction kullanımı:
// Transaction başlatma
let client = pool.get.await?;
let tx = client.transaction.await?;
// Extension method kullanarak transaction içinde işlem yapma
let result = tx.insert.await?;
let rows_affected = tx.update.await?;
// İşlem başarılı olursa commit
tx.commit.await?;
Güvenlik Özellikleri
SQL Injection Koruması
Parsql, SQL injection saldırılarına karşı güvenli bir şekilde tasarlanmıştır:
- Parametreli sorgular otomatik olarak kullanılır, asla direk string birleştirme yapılmaz
- Tüm kullanıcı girdileri güvenli bir şekilde parametrize edilir
- Makrolar, SQL parametrelerini doğru bir şekilde işler ve güvenli bir format sağlar
- Her veritabanı adaptörü için uygun parametre işaretleyiciler (
$1,?, vb.) otomatik olarak uygulanır - SQL yazarken elle string birleştirme gereksinimi ortadan kaldırılmıştır
- Asenkron bağlamlarda bile güvenlik önlemleri tam olarak korunur
// Güvenli parametre kullanımı örneği
// Parametreler güvenli bir şekilde yerleştirilir,
// SQL injection riski olmaz
let query = UserQuery ;
Öznitelikler
Sorgularınızı özelleştirmek için çeşitli öznitelikler kullanabilirsiniz:
#[table("tablo_adi")]- Tablo adını belirtmek için#[where_clause("id = $")]- WHERE koşulunu belirtmek için#[select("alan1, alan2")]- SELECT ifadesini özelleştirmek için#[update("alan1, alan2")]- UPDATE ifadesini özelleştirmek için#[join("LEFT JOIN tablo2 ON tablo1.id = tablo2.fk_id")]- JOIN ifadeleri için#[group_by("alan1")]- GROUP BY ifadesi için#[order_by("alan1 DESC")]- ORDER BY ifadesi için#[having("COUNT(*) > 5")]- HAVING ifadesi için#[limit(10)]- LIMIT ifadesi için#[offset(5)]- OFFSET ifadesi için#[returning("id")]- INSERT/UPDATE işlemlerinden dönen değerleri belirtmek için
SQL İzleme
Geliştirme sırasında oluşturulan SQL sorgularını izlemek için:
PARSQL_TRACE=1
Bu, çalıştırılan tüm SQL sorgularını konsola yazdıracaktır.
Basit Kullanım Örnekleri
SQLite ile Kullanım
use *;
// Bir kayıt almak için
// Yeni kayıt eklemek için
Deadpool PostgreSQL ile Asenkron Bağlantı Havuzu Kullanımı
use *;
use ;
async
Performans İpuçları
- Aynı SQL yapısına sahip sorguları tekrar kullanarak sorgu planı ön belleğinden yararlanın
- Yoğun veritabanı uygulamaları için bağlantı havuzları kullanın
- Büyük veri kümeleri için
get_allyerine sayfalama (limit ve offset) kullanın - Filtreleri veritabanı seviyesinde uygulayın, uygulamanızda değil
Veritabanı Migrasyonları
Parsql, basit ve tip güvenli bir migrasyon sistemi içerir:
use *;
// Migration tanımlama
;
// Migration çalıştırma
let mut runner = new;
runner.add_migration;
runner.run?;
CLI Aracı
Parsql CLI ile migration yönetimi kolaylaşır:
# Kurulum
# Proje başlatma
# Migration oluşturma
# Migration çalıştırma
# Durum kontrolü
# Geri alma
Detaylı Dökümantasyon
Her veritabanı adaptörü için daha detaylı bilgi ve örnekler, ilgili alt paketlerin README dosyalarında bulunmaktadır:
- SQLite Dökümantasyonu
- PostgreSQL Dökümantasyonu
- Tokio PostgreSQL Dökümantasyonu
- Deadpool PostgreSQL Dökümantasyonu
- Migration Sistemi
- CLI Aracı
Lisans
Bu proje MIT lisansı altında lisanslanmıştır.