use crate::error::Result;
use crate::traits::FromRow;
use crate::value::Value;
use async_trait::async_trait;
#[derive(Debug, Clone)]
pub struct ExecuteResult {
pub rows_affected: u64,
pub last_insert_id: Option<u64>,
}
#[async_trait]
pub trait Pool: Send + Sync {
async fn execute(&self, sql: &str, params: Vec<Value>) -> Result<ExecuteResult>;
async fn fetch_all<T: FromRow + Send>(&self, sql: &str, params: Vec<Value>) -> Result<Vec<T>>;
async fn fetch_optional<T: FromRow + Send>(
&self,
sql: &str,
params: Vec<Value>,
) -> Result<Option<T>>;
async fn fetch_one<T: FromRow + Send>(&self, sql: &str, params: Vec<Value>) -> Result<T>;
async fn fetch_scalar<T: crate::FromValue + Send>(
&self,
sql: &str,
params: Vec<Value>,
) -> Result<T>;
}