use crate::types::DataType;
use crate::types::TypedValue;
use crate::Value;
pub fn execute_count(_args: &[TypedValue]) -> Result<TypedValue, crate::sql::QueryExecutionError> {
Ok(TypedValue {
value_type: DataType::UInt64,
value: Value { u64: 1 },
})
}
pub fn execute_sum(args: &[TypedValue]) -> Result<TypedValue, crate::sql::QueryExecutionError> {
if args.is_empty() {
return Err(crate::sql::QueryExecutionError::TypeMismatch);
}
let arg = &args[0];
unsafe {
match arg.value_type {
DataType::UInt8 => Ok(TypedValue {
value_type: DataType::UInt64,
value: Value {
u64: arg.value.u8 as u64,
},
}),
DataType::UInt16 => Ok(TypedValue {
value_type: DataType::UInt64,
value: Value {
u64: arg.value.u16 as u64,
},
}),
DataType::UInt32 => Ok(TypedValue {
value_type: DataType::UInt64,
value: Value {
u64: arg.value.u32 as u64,
},
}),
DataType::UInt64 => Ok(arg.clone()),
DataType::Int8 => Ok(TypedValue {
value_type: DataType::Int64,
value: Value {
i64: arg.value.i8 as i64,
},
}),
DataType::Int16 => Ok(TypedValue {
value_type: DataType::Int64,
value: Value {
i64: arg.value.i16 as i64,
},
}),
DataType::Int32 => Ok(TypedValue {
value_type: DataType::Int64,
value: Value {
i64: arg.value.i32 as i64,
},
}),
DataType::Int64 => Ok(arg.clone()),
DataType::Float32 => Ok(TypedValue {
value_type: DataType::Float64,
value: Value {
float64: arg.value.float32 as f64,
},
}),
DataType::Float64 => Ok(arg.clone()),
_ => Err(crate::sql::QueryExecutionError::TypeMismatch),
}
}
}
pub fn execute_avg(args: &[TypedValue]) -> Result<TypedValue, crate::sql::QueryExecutionError> {
if args.is_empty() {
return Err(crate::sql::QueryExecutionError::TypeMismatch);
}
let arg = &args[0];
unsafe {
match arg.value_type {
DataType::UInt8 => Ok(TypedValue {
value_type: DataType::Float64,
value: Value {
float64: arg.value.u8 as f64,
},
}),
DataType::UInt16 => Ok(TypedValue {
value_type: DataType::Float64,
value: Value {
float64: arg.value.u16 as f64,
},
}),
DataType::UInt32 => Ok(TypedValue {
value_type: DataType::Float64,
value: Value {
float64: arg.value.u32 as f64,
},
}),
DataType::UInt64 => Ok(TypedValue {
value_type: DataType::Float64,
value: Value {
float64: arg.value.u64 as f64,
},
}),
DataType::Int8 => Ok(TypedValue {
value_type: DataType::Float64,
value: Value {
float64: arg.value.i8 as f64,
},
}),
DataType::Int16 => Ok(TypedValue {
value_type: DataType::Float64,
value: Value {
float64: arg.value.i16 as f64,
},
}),
DataType::Int32 => Ok(TypedValue {
value_type: DataType::Float64,
value: Value {
float64: arg.value.i32 as f64,
},
}),
DataType::Int64 => Ok(TypedValue {
value_type: DataType::Float64,
value: Value {
float64: arg.value.i64 as f64,
},
}),
DataType::Float32 => Ok(TypedValue {
value_type: DataType::Float64,
value: Value {
float64: arg.value.float32 as f64,
},
}),
DataType::Float64 => Ok(arg.clone()),
_ => Err(crate::sql::QueryExecutionError::TypeMismatch),
}
}
}
pub fn execute_min(args: &[TypedValue]) -> Result<TypedValue, crate::sql::QueryExecutionError> {
if args.is_empty() {
return Err(crate::sql::QueryExecutionError::TypeMismatch);
}
Ok(args[0].clone())
}
pub fn execute_max(args: &[TypedValue]) -> Result<TypedValue, crate::sql::QueryExecutionError> {
if args.is_empty() {
return Err(crate::sql::QueryExecutionError::TypeMismatch);
}
Ok(args[0].clone())
}
pub fn execute_stddev(args: &[TypedValue]) -> Result<TypedValue, crate::sql::QueryExecutionError> {
if args.is_empty() {
return Err(crate::sql::QueryExecutionError::TypeMismatch);
}
Ok(args[0].clone())
}
pub fn execute_var(args: &[TypedValue]) -> Result<TypedValue, crate::sql::QueryExecutionError> {
if args.is_empty() {
return Err(crate::sql::QueryExecutionError::TypeMismatch);
}
Ok(args[0].clone())
}
pub fn execute_stddev_samp(
args: &[TypedValue],
) -> Result<TypedValue, crate::sql::QueryExecutionError> {
if args.is_empty() {
return Err(crate::sql::QueryExecutionError::TypeMismatch);
}
Ok(args[0].clone())
}
pub fn execute_var_samp(
args: &[TypedValue],
) -> Result<TypedValue, crate::sql::QueryExecutionError> {
if args.is_empty() {
return Err(crate::sql::QueryExecutionError::TypeMismatch);
}
Ok(args[0].clone())
}
pub fn execute_moving_average(
args: &[TypedValue],
) -> Result<TypedValue, crate::sql::QueryExecutionError> {
if args.len() < 2 {
return Err(crate::sql::QueryExecutionError::TypeMismatch);
}
Ok(args[0].clone())
}
pub fn execute_moving_sum(
args: &[TypedValue],
) -> Result<TypedValue, crate::sql::QueryExecutionError> {
if args.len() < 2 {
return Err(crate::sql::QueryExecutionError::TypeMismatch);
}
Ok(args[0].clone())
}