1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
pub mod insert;
pub mod insert_aliases;
pub mod insert_edge;
pub mod insert_index;
pub mod insert_nodes;
pub mod insert_values;
pub mod remove;
pub mod remove_aliases;
pub mod remove_ids;
pub mod remove_index;
pub mod remove_values;
pub mod search;
pub mod select;
pub mod select_aliases;
pub mod select_edge_count;
pub mod select_ids;
pub mod select_indexes;
pub mod select_key_count;
pub mod select_keys;
pub mod select_node_count;
pub mod select_values;
pub mod where_;
use self::insert::Insert;
use self::remove::Remove;
use self::search::Search;
use self::select::Select;
use crate::SearchQuery;
/// The starting point of all queries.
///
/// Options:
///
/// ```
/// use agdb::QueryBuilder;
///
/// QueryBuilder::insert();
/// QueryBuilder::remove();
/// QueryBuilder::search();
/// QueryBuilder::select();
/// ```
#[cfg_attr(feature = "api", derive(agdb::TypeDef))]
pub struct QueryBuilder;
#[cfg_attr(feature = "api", agdb::impl_def())]
impl QueryBuilder {
/// Allows inserting data into the database:
///
/// Options:
///
/// ```
/// use agdb::{DbId, QueryBuilder, DbType};
///
/// #[derive(DbType)]
/// struct MyValue { db_id: Option<DbId>, key: String }
///
/// QueryBuilder::insert().nodes();
/// QueryBuilder::insert().edges();
/// QueryBuilder::insert().aliases("a");
/// QueryBuilder::insert().aliases(["a", "b"]);
/// QueryBuilder::insert().element(&MyValue { db_id: Some(DbId(1)), key: "a".to_string(), });
/// QueryBuilder::insert().elements(&[MyValue { db_id: Some(DbId(1)), key: "a".to_string(), }]);
/// QueryBuilder::insert().index("k");
/// QueryBuilder::insert().values([[("k", 1).into()]]);
/// QueryBuilder::insert().values_uniform([("k", 1).into()]);
/// ```
pub fn insert() -> Insert {
Insert {}
}
/// Allows removing data from the database:
///
/// Options:
///
/// ```
/// use agdb::QueryBuilder;
///
/// QueryBuilder::remove().ids(1);
/// QueryBuilder::remove().ids([1, 2]);
/// QueryBuilder::remove().ids(QueryBuilder::search().from(1).query());
/// QueryBuilder::remove().index("k");
/// QueryBuilder::remove().aliases("a");
/// QueryBuilder::remove().aliases(["a", "b"]);
/// QueryBuilder::remove().values("k");
/// ```
pub fn remove() -> Remove {
Remove {}
}
/// Search the database by traversing the graph
/// and returns element ids using breadth first,
/// depth first or A* algorithm:
///
/// Options:
///
/// ```
/// use agdb::QueryBuilder;
///
/// QueryBuilder::search().from(1); // BDS
/// QueryBuilder::search().to(1); // BDS
/// QueryBuilder::search().breadth_first();
/// QueryBuilder::search().depth_first();
/// QueryBuilder::search().elements();
/// ```
pub fn search() -> Search<SearchQuery> {
Search(SearchQuery::new())
}
/// Selects data from the database:
///
/// Options:
///
/// ```
/// use agdb::QueryBuilder;
/// use agdb::DbType;
/// use agdb::DbId;
///
/// #[derive(DbType)]
/// struct MyValue { db_id: Option<DbId>, key: String }
///
/// QueryBuilder::select().ids(1);
/// QueryBuilder::select().ids([1, 2]);
/// QueryBuilder::select().ids(QueryBuilder::search().from(1).query());
/// QueryBuilder::select().aliases();
/// QueryBuilder::select().elements::<MyValue>();
/// QueryBuilder::select().keys();
/// QueryBuilder::select().key_count();
/// QueryBuilder::select().node_count();
/// QueryBuilder::select().values("k");
/// ```
pub fn select() -> Select {
Select {}
}
}