Files
daqingest/dbpg/src/confbyseries.rs
Dominik Werder 12778fe121 WIP binner2
2025-02-26 16:31:28 +01:00

51 lines
1.6 KiB
Rust

use crate::conn::PgClient;
use netpod::ChannelConfigResponse;
use netpod::DaqbufChannelConfig;
use netpod::ScalarType;
use netpod::SeriesKind;
use netpod::Shape;
use series::SeriesId;
use tokio_postgres::types::Type as PgTy;
autoerr::create_error_v1!(
name(Error, "ConfigBySeries"),
enum variants {
Postgres(#[from] tokio_postgres::Error),
Netpod(#[from] netpod::Error),
},
);
pub async fn channel_config_by_series(pg: &PgClient, series: SeriesId) -> Result<Option<DaqbufChannelConfig>, Error> {
let sql = concat!(
"select t.series, t.facility, t.kind, t.scalar_type, t.shape_dims, t.channel",
" from series_by_channel t",
" where t.series = $1",
" limit 10",
);
let qu_select = pg.prepare_typed(sql, &[PgTy::INT8]).await?;
let id = series.id() as i64;
let res = pg.query(&qu_select, &[&id]).await?;
for row in res {
let series: i64 = row.try_get(0)?;
let backend = row.try_get(1)?;
let kind = row.try_get(2)?;
let scalar_type = row.try_get(3)?;
let shape_dims: Vec<_> = row.try_get(4)?;
let name = row.try_get(5)?;
let series = series as u64;
let series_kind = SeriesKind::from_db_i16(kind)?;
let scalar_type = ScalarType::from_scylla_i32(scalar_type)?;
let shape = Shape::from_scylla_shape_dims(&shape_dims)?;
let conf = DaqbufChannelConfig {
backend,
series,
kind: series_kind,
scalar_type,
shape,
name,
};
return Ok(Some(conf));
}
Ok(None)
}