use rudb_common::{LogicalType, Result, Session, Value};
use rudb_functions::{SETTINGS, setting_fields};
use rudb_plan::{Plan, Slice};
use crate::metadata::{Metadata, text};
pub(crate) fn settingnames(
session: &Session,
plan: &Plan,
index: u32,
columns: Slice,
) -> Result<Metadata> {
let mut rows = Vec::with_capacity(SETTINGS.len());
for entry in SETTINGS {
let value = session.get(entry.name).map_or(Value::Null, text);
rows.push(vec![
text(entry.name),
value.clone(),
text(entry.description),
text(entry.input_type),
text(entry.scope),
aliases(entry.aliases),
value,
]);
}
Metadata::new("duckdb_settings", &setting_fields(), &rows, plan, index, columns)
}
fn aliases(names: &[&'static str]) -> Value {
Value::List {
element: LogicalType::Varchar,
values: names.iter().map(|name| Value::Varchar((*name).to_string())).collect(),
}
}