1use minarrow::*;
2use minarrow::traits::selection::{FieldSelection, DataSelection};
3
4fn main() {
5 let table = create_sample_table();
7
8 println!("Original table:");
9 println!("{}\n", table);
10
11 println!("=== Table-specific API ===\n");
13
14 println!("table.c(&[\"name\", \"age\"]).r(1..4)");
15 let view1 = table.c(&["name", "age"]).r(1..4);
16 println!("{}\n", view1);
17
18 println!("table.c(&[0, 2]).r(&[0, 2, 4])");
19 let view2 = table.c(&[0, 2]).r(&[0, 2, 4]);
20 println!("{}\n", view2);
21
22 println!("table.c(0..2).r(0..5)");
23 let view3 = table.c(0..2).r(0..5);
24 println!("{}\n", view3);
25
26 println!("table.c(1).r(&[2, 4, 6])");
27 let view4 = table.c(1).r(&[2, 4, 6]);
28 println!("{}\n", view4);
29
30 println!("=== Aliases ===\n");
32
33 println!("table.f(&[\"id\", \"age\"]).d(0..3)");
34 let view5 = table.f(&["id", "age"]).d(0..3);
35 println!("{}\n", view5);
36
37 println!("table.fields(&[\"name\"]).data(1..5)");
38 let view6 = table.fields(&["name"]).data(1..5);
39 println!("{}\n", view6);
40
41 println!("table.f(0..2).d(&[0, 3, 6, 9])");
42 let view7 = table.f(0..2).d(&[0, 3, 6, 9]);
43 println!("{}\n", view7);
44
45 println!("table.y(2).x(..5)");
46 let view8 = table.y(2).x(..5);
47 println!("{}\n", view8);
48
49 println!("table.fields(1..).data(5..)");
50 let view9 = table.fields(1..).data(5..);
51 println!("{}\n", view9);
52
53 println!("=== Materialisation ===\n");
55
56 println!("table.f(&[\"name\", \"age\"]).d(0..3).to_table()");
57 let view = table.f(&["name", "age"]).d(0..3);
58 let materialised = view.to_table();
59 println!("{}\n", materialised);
60
61 println!("=== Array & FieldArray Selection ===\n");
63
64 let age_col = table.col(2).unwrap().clone();
66 println!("Original age column (FieldArray):");
67 println!(" Field: {} ({})", age_col.field.name, age_col.arrow_type());
68 println!(" Length: {}", age_col.len());
69 println!(" Values: {:?}\n", (0..age_col.len()).map(|i| age_col.array.inner::<IntegerArray<i32>>().get(i).unwrap()).collect::<Vec<_>>());
70
71 println!("age_col.d(&[1, 3, 5, 7])");
73 let age_view = age_col.d(&[1, 3, 5, 7]);
74 println!(" View length: {}", age_view.len());
75 println!(" Selected indices: {:?}\n", (0..age_view.len()).map(|i| age_view.get::<IntegerArray<i32>>(i).unwrap()).collect::<Vec<_>>());
76
77 let id_array = Array::from_int32({
79 let mut arr = IntegerArray::<i32>::default();
80 for i in 0..10 {
81 arr.push(i * 10);
82 }
83 arr
84 });
85 let id_view = ArrayV::from(id_array);
86 println!("Original ArrayV:");
87 println!(" Length: {}", id_view.len());
88 println!(" Values: {:?}\n", (0..id_view.len()).map(|i| id_view.get::<IntegerArray<i32>>(i).unwrap()).collect::<Vec<_>>());
89
90 println!("id_view.data(0..5)");
92 let id_selected1 = id_view.data(0..5);
93 println!(" Length: {}", id_selected1.len());
94 println!(" Values: {:?}\n", (0..id_selected1.len()).map(|i| id_selected1.get::<IntegerArray<i32>>(i).unwrap()).collect::<Vec<_>>());
95
96 println!("id_view.x(&[2, 4, 6, 8])");
97 let id_selected2 = id_view.x(&[2, 4, 6, 8]);
98 println!(" Length: {}", id_selected2.len());
99 println!(" Values: {:?}", (0..id_selected2.len()).map(|i| id_selected2.get::<IntegerArray<i32>>(i).unwrap()).collect::<Vec<_>>());
100}
101
102fn create_sample_table() -> Table {
103 let mut id_arr = IntegerArray::<i32>::default();
105 for i in 0..10 {
106 id_arr.push(i);
107 }
108
109 let mut name_arr = StringArray::<u32>::default();
111 let names = ["Alice", "Bob", "Charlie", "Diana", "Eve", "Frank", "Grace", "Henry", "Iris", "Jack"];
112 for name in names {
113 name_arr.push(name.to_string());
114 }
115
116 let mut age_arr = IntegerArray::<i32>::default();
118 for i in 0..10 {
119 age_arr.push(20 + (i * 3) as i32);
120 }
121
122 let col_id = FieldArray::from_arr("id", Array::from_int32(id_arr));
123 let col_name = FieldArray::from_arr("name", Array::from_string32(name_arr));
124 let col_age = FieldArray::from_arr("age", Array::from_int32(age_arr));
125
126 Table::new("People".to_string(), Some(vec![col_id, col_name, col_age]))
127}