wtx/database/client/
rdbms.rs1pub(crate) mod column_info;
2pub(crate) mod common_executor_buffer;
3pub(crate) mod common_record;
4pub(crate) mod common_records;
5pub(crate) mod statement;
6pub(crate) mod statement_builder;
7pub(crate) mod statements;
8pub(crate) mod statements_misc;
9
10use crate::{
11 codec::CodecController,
12 collection::Vector,
13 database::{
14 Database, ValueIdent,
15 client::rdbms::{column_info::ColumnInfo, common_record::CommonRecord},
16 },
17 misc::{Lease, net::PartitionedFilledBuffer},
18};
19use core::ops::Range;
20
21pub(crate) fn clear_cmd_buffers(
23 net_buffer: &mut PartitionedFilledBuffer,
24 records_params: &mut Vector<(Range<usize>, Range<usize>)>,
25 values_params: &mut Vector<(bool, Range<usize>)>,
26) {
27 net_buffer.clear_if_following_is_empty();
28 records_params.clear();
29 values_params.clear();
30}
31
32pub(crate) fn value<'inner, 'outer, 'rem, A, C, CI, D, R, T>(
35 ci: CI,
36 record: &'rem R,
37) -> Option<<D as CodecController>::DecodeWrapper<'inner, 'outer, 'rem>>
38where
39 A: 'rem,
40 C: ColumnInfo<Ty = D::Ty> + 'inner + 'rem,
41 CI: ValueIdent<R>,
42 D: Database + 'rem,
43 D::Ty: Clone,
44 R: Lease<CommonRecord<'inner, A, C, D, T>>,
45 T: 'inner,
46 <D as CodecController>::DecodeWrapper<'inner, 'outer, 'rem>: From<(&'inner [u8], &'rem C)>,
47 'inner: 'rem,
48{
49 let idx = ci.idx(record)?;
50 let (is_null, range) = record.lease().values_params.get(idx)?;
51 if *is_null {
52 None
53 } else {
54 let column = record.lease().stmt.column(idx)?;
55 let bytes = record.lease().record.get(range.clone())?;
56 Some(From::from((bytes, column)))
57 }
58}
59
60#[cfg(test)]
61pub(crate) mod tests {
62 pub(crate) fn _column0() -> &'static str {
63 "a"
64 }
65
66 pub(crate) fn _column1() -> &'static str {
67 "b"
68 }
69
70 pub(crate) fn _column2() -> &'static str {
71 "c"
72 }
73
74 pub(crate) fn _column3() -> &'static str {
75 "d"
76 }
77}