1use std::fmt;
5
6use reifydb_type::{
7 fragment::Fragment,
8 storage::{Cow, Storage},
9 util::bitvec::BitVec,
10 value::{
11 dictionary::DictionaryEntryId,
12 r#type::Type,
13 uuid::{Uuid4, Uuid7},
14 },
15};
16
17use crate::value::column::data::ColumnData;
18
19pub mod columns;
20pub mod compressed;
21pub mod data;
22pub mod frame;
23pub mod headers;
24#[allow(dead_code, unused_variables)]
25pub mod pool;
26pub mod push;
27pub mod row;
28pub mod transform;
29pub mod view;
30
31pub struct Column<S: Storage = Cow> {
32 pub name: Fragment,
33 pub data: ColumnData<S>,
34}
35
36impl<S: Storage> Clone for Column<S> {
37 fn clone(&self) -> Self {
38 Self {
39 name: self.name.clone(),
40 data: self.data.clone(),
41 }
42 }
43}
44
45impl<S: Storage> PartialEq for Column<S> {
46 fn eq(&self, other: &Self) -> bool {
47 self.name == other.name && self.data == other.data
48 }
49}
50
51impl fmt::Debug for Column<Cow> {
52 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
53 f.debug_struct("Column").field("name", &self.name).field("data", &self.data).finish()
54 }
55}
56
57impl<S: Storage> Column<S> {
58 pub fn new(name: impl Into<Fragment>, data: ColumnData<S>) -> Self {
59 Self {
60 name: name.into(),
61 data,
62 }
63 }
64
65 pub fn get_type(&self) -> Type {
66 self.data.get_type()
67 }
68
69 pub fn with_new_data(&self, data: ColumnData<S>) -> Column<S> {
70 Column {
71 name: self.name.clone(),
72 data,
73 }
74 }
75
76 pub fn name(&self) -> &Fragment {
77 &self.name
78 }
79
80 pub fn name_owned(&self) -> Fragment {
81 self.name.clone()
82 }
83
84 pub fn data(&self) -> &ColumnData<S> {
85 &self.data
86 }
87
88 pub fn data_mut(&mut self) -> &mut ColumnData<S> {
89 &mut self.data
90 }
91
92 pub fn to_static(&self) -> Column<S> {
94 Column {
95 name: self.name.clone(),
96 data: self.data.clone(),
97 }
98 }
99}
100
101impl Column {
102 pub fn int1(name: impl Into<Fragment>, data: impl IntoIterator<Item = i8>) -> Self {
103 Column {
104 name: name.into(),
105 data: ColumnData::int1(data),
106 }
107 }
108
109 pub fn int1_with_bitvec(
110 name: impl Into<Fragment>,
111 data: impl IntoIterator<Item = i8>,
112 bitvec: impl Into<BitVec>,
113 ) -> Self {
114 Column {
115 name: name.into(),
116 data: ColumnData::int1_with_bitvec(data, bitvec),
117 }
118 }
119
120 pub fn int2(name: impl Into<Fragment>, data: impl IntoIterator<Item = i16>) -> Self {
121 Column {
122 name: name.into(),
123 data: ColumnData::int2(data),
124 }
125 }
126
127 pub fn int2_with_bitvec(
128 name: impl Into<Fragment>,
129 data: impl IntoIterator<Item = i16>,
130 bitvec: impl Into<BitVec>,
131 ) -> Self {
132 Column {
133 name: name.into(),
134 data: ColumnData::int2_with_bitvec(data, bitvec),
135 }
136 }
137
138 pub fn int4(name: impl Into<Fragment>, data: impl IntoIterator<Item = i32>) -> Self {
139 Column {
140 name: name.into(),
141 data: ColumnData::int4(data),
142 }
143 }
144
145 pub fn int4_with_bitvec(
146 name: impl Into<Fragment>,
147 data: impl IntoIterator<Item = i32>,
148 bitvec: impl Into<BitVec>,
149 ) -> Self {
150 Column {
151 name: name.into(),
152 data: ColumnData::int4_with_bitvec(data, bitvec),
153 }
154 }
155
156 pub fn int8(name: impl Into<Fragment>, data: impl IntoIterator<Item = i64>) -> Self {
157 Column {
158 name: name.into(),
159 data: ColumnData::int8(data),
160 }
161 }
162
163 pub fn int8_with_bitvec(
164 name: impl Into<Fragment>,
165 data: impl IntoIterator<Item = i64>,
166 bitvec: impl Into<BitVec>,
167 ) -> Self {
168 Column {
169 name: name.into(),
170 data: ColumnData::int8_with_bitvec(data, bitvec),
171 }
172 }
173
174 pub fn int16(name: impl Into<Fragment>, data: impl IntoIterator<Item = i128>) -> Self {
175 Column {
176 name: name.into(),
177 data: ColumnData::int16(data),
178 }
179 }
180
181 pub fn int16_with_bitvec(
182 name: impl Into<Fragment>,
183 data: impl IntoIterator<Item = i128>,
184 bitvec: impl Into<BitVec>,
185 ) -> Self {
186 Column {
187 name: name.into(),
188 data: ColumnData::int16_with_bitvec(data, bitvec),
189 }
190 }
191
192 pub fn uint1(name: impl Into<Fragment>, data: impl IntoIterator<Item = u8>) -> Self {
193 Column {
194 name: name.into(),
195 data: ColumnData::uint1(data),
196 }
197 }
198
199 pub fn uint1_with_bitvec(
200 name: impl Into<Fragment>,
201 data: impl IntoIterator<Item = u8>,
202 bitvec: impl Into<BitVec>,
203 ) -> Self {
204 Column {
205 name: name.into(),
206 data: ColumnData::uint1_with_bitvec(data, bitvec),
207 }
208 }
209
210 pub fn uint2(name: impl Into<Fragment>, data: impl IntoIterator<Item = u16>) -> Self {
211 Column {
212 name: name.into(),
213 data: ColumnData::uint2(data),
214 }
215 }
216
217 pub fn uint2_with_bitvec(
218 name: impl Into<Fragment>,
219 data: impl IntoIterator<Item = u16>,
220 bitvec: impl Into<BitVec>,
221 ) -> Self {
222 Column {
223 name: name.into(),
224 data: ColumnData::uint2_with_bitvec(data, bitvec),
225 }
226 }
227
228 pub fn uint4(name: impl Into<Fragment>, data: impl IntoIterator<Item = u32>) -> Self {
229 Column {
230 name: name.into(),
231 data: ColumnData::uint4(data),
232 }
233 }
234
235 pub fn uint4_with_bitvec(
236 name: impl Into<Fragment>,
237 data: impl IntoIterator<Item = u32>,
238 bitvec: impl Into<BitVec>,
239 ) -> Self {
240 Column {
241 name: name.into(),
242 data: ColumnData::uint4_with_bitvec(data, bitvec),
243 }
244 }
245
246 pub fn uint8(name: impl Into<Fragment>, data: impl IntoIterator<Item = u64>) -> Self {
247 Column {
248 name: name.into(),
249 data: ColumnData::uint8(data),
250 }
251 }
252
253 pub fn uint8_with_bitvec(
254 name: impl Into<Fragment>,
255 data: impl IntoIterator<Item = u64>,
256 bitvec: impl Into<BitVec>,
257 ) -> Self {
258 Column {
259 name: name.into(),
260 data: ColumnData::uint8_with_bitvec(data, bitvec),
261 }
262 }
263
264 pub fn uint16(name: impl Into<Fragment>, data: impl IntoIterator<Item = u128>) -> Self {
265 Column {
266 name: name.into(),
267 data: ColumnData::uint16(data),
268 }
269 }
270
271 pub fn uint16_with_bitvec(
272 name: impl Into<Fragment>,
273 data: impl IntoIterator<Item = u128>,
274 bitvec: impl Into<BitVec>,
275 ) -> Self {
276 Column {
277 name: name.into(),
278 data: ColumnData::uint16_with_bitvec(data, bitvec),
279 }
280 }
281
282 pub fn float4(name: impl Into<Fragment>, data: impl IntoIterator<Item = f32>) -> Self {
283 Column {
284 name: name.into(),
285 data: ColumnData::float4(data),
286 }
287 }
288
289 pub fn float4_with_bitvec(
290 name: impl Into<Fragment>,
291 data: impl IntoIterator<Item = f32>,
292 bitvec: impl Into<BitVec>,
293 ) -> Self {
294 Column {
295 name: name.into(),
296 data: ColumnData::float4_with_bitvec(data, bitvec),
297 }
298 }
299
300 pub fn float8(name: impl Into<Fragment>, data: impl IntoIterator<Item = f64>) -> Self {
301 Column {
302 name: name.into(),
303 data: ColumnData::float8(data),
304 }
305 }
306
307 pub fn float8_with_bitvec(
308 name: impl Into<Fragment>,
309 data: impl IntoIterator<Item = f64>,
310 bitvec: impl Into<BitVec>,
311 ) -> Self {
312 Column {
313 name: name.into(),
314 data: ColumnData::float8_with_bitvec(data, bitvec),
315 }
316 }
317
318 pub fn bool(name: impl Into<Fragment>, data: impl IntoIterator<Item = bool>) -> Self {
319 Column {
320 name: name.into(),
321 data: ColumnData::bool(data),
322 }
323 }
324
325 pub fn bool_with_bitvec(
326 name: impl Into<Fragment>,
327 data: impl IntoIterator<Item = bool>,
328 bitvec: impl Into<BitVec>,
329 ) -> Self {
330 Column {
331 name: name.into(),
332 data: ColumnData::bool_with_bitvec(data, bitvec),
333 }
334 }
335
336 pub fn utf8(name: impl Into<Fragment>, data: impl IntoIterator<Item = String>) -> Self {
337 Column {
338 name: name.into(),
339 data: ColumnData::utf8(data),
340 }
341 }
342
343 pub fn utf8_with_bitvec(
344 name: impl Into<Fragment>,
345 data: impl IntoIterator<Item = String>,
346 bitvec: impl Into<BitVec>,
347 ) -> Self {
348 Column {
349 name: name.into(),
350 data: ColumnData::utf8_with_bitvec(data, bitvec),
351 }
352 }
353
354 pub fn uuid4(name: impl Into<Fragment>, data: impl IntoIterator<Item = Uuid4>) -> Self {
355 Column {
356 name: name.into(),
357 data: ColumnData::uuid4(data),
358 }
359 }
360
361 pub fn uuid4_with_bitvec(
362 name: impl Into<Fragment>,
363 data: impl IntoIterator<Item = Uuid4>,
364 bitvec: impl Into<BitVec>,
365 ) -> Self {
366 Column {
367 name: name.into(),
368 data: ColumnData::uuid4_with_bitvec(data, bitvec),
369 }
370 }
371
372 pub fn uuid7(name: impl Into<Fragment>, data: impl IntoIterator<Item = Uuid7>) -> Self {
373 Column {
374 name: name.into(),
375 data: ColumnData::uuid7(data),
376 }
377 }
378
379 pub fn uuid7_with_bitvec(
380 name: impl Into<Fragment>,
381 data: impl IntoIterator<Item = Uuid7>,
382 bitvec: impl Into<BitVec>,
383 ) -> Self {
384 Column {
385 name: name.into(),
386 data: ColumnData::uuid7_with_bitvec(data, bitvec),
387 }
388 }
389
390 pub fn dictionary_id(name: impl Into<Fragment>, data: impl IntoIterator<Item = DictionaryEntryId>) -> Self {
391 Column {
392 name: name.into(),
393 data: ColumnData::dictionary_id(data),
394 }
395 }
396
397 pub fn dictionary_id_with_bitvec(
398 name: impl Into<Fragment>,
399 data: impl IntoIterator<Item = DictionaryEntryId>,
400 bitvec: impl Into<BitVec>,
401 ) -> Self {
402 Column {
403 name: name.into(),
404 data: ColumnData::dictionary_id_with_bitvec(data, bitvec),
405 }
406 }
407
408 pub fn undefined_typed(name: impl Into<Fragment>, ty: Type, row_count: usize) -> Self {
409 Column {
410 name: name.into(),
411 data: ColumnData::none_typed(ty, row_count),
412 }
413 }
414}