Function update

Source
pub async fn update<T: SqlQuery + UpdateParams>(
    pool: &Pool,
    entity: T,
) -> Result<bool, Error>
Expand description

§update

Deadpool bağlantı havuzunu kullanarak veritabanındaki mevcut bir kaydı günceller.

§Parametreler

  • pool: Deadpool bağlantı havuzu
  • entity: Güncelleme bilgilerini içeren veri nesnesi (SqlQuery ve UpdateParams trait’lerini uygulamalıdır)

§Dönüş Değeri

  • Result<bool, Error>: Başarılı olursa, true döndürür; başarısız olursa, Error döndürür

§Yapı Tanımı

Bu fonksiyonla kullanılan yapılar aşağıdaki derive makrolarıyla işaretlenmelidir:

#[derive(Updateable, UpdateParams)]  // Gerekli makrolar
#[table("tablo_adi")]               // Güncellenecek tablo adı
#[update("alan1, alan2")]          // Güncellenecek alanlar (isteğe bağlı)
#[where_clause("id = $")]            // Güncelleme koşulu
pub struct VeriModeli {
    pub id: i32,                     // Koşulda kullanılan alanlar
    pub alan1: String,              // Güncellenecek alanlar
    pub alan2: i32,                 // Güncellenecek alanlar
    // ...
}
  • Updateable: Otomatik olarak SQL UPDATE ifadeleri oluşturur
  • UpdateParams: Otomatik olarak güncelleme parametreleri oluşturur
  • #[table("tablo_adi")]: Güncellenecek tablo adını belirtir
  • #[update("alan1, alan2")]: Hangi alanların güncelleneceğini belirtir (belirtilmezse, tüm alanlar güncellenir)
  • #[where_clause("id = $")]: Güncelleme koşulunu belirtir ($ parametre değeri ile değiştirilir)

§Kullanım Örneği

use deadpool_postgres::{Config, Runtime, Pool};
use tokio_postgres::{NoTls, Error};
use parsql::tokio_postgres::pool_crud_ops::update;
 
#[derive(Updateable, UpdateParams)]
#[table("users")]
#[update("name, email")]
#[where_clause("id = $")]
pub struct UpdateUser {
    pub id: i32,
    pub name: String,
    pub email: String,
    pub state: i16,  // update özniteliğinde belirtilmediği için bu alan güncellenmez
}

#[tokio::main]
async fn main() -> Result<(), Error> {
    let mut cfg = Config::new();
    cfg.host = Some("localhost".to_string());
    cfg.dbname = Some("test".to_string());
     
    let pool = cfg.create_pool(Some(Runtime::Tokio1), NoTls).unwrap();

    let update_user = UpdateUser {
        id: 1,
        name: String::from("John"),
        email: String::from("john@example.com"),
        state: 2,
    };

    let update_result = update(&pool, update_user).await?;
    println!("Update result: {:?}", update_result);
    Ok(())
}