Entity History
Entity history is one of the main features of WooriDB. You can run it by using the features flag. To execute WooriDB with history feature enable execute:
make history, or;cargo run --manifest-path woori-db/Cargo.toml --release --features history
It receives an entity_key name and an entity_id which will return the whole history of (DateTime<Utc>, entity_map) for the entity_id in the entity tree for key entity_key. This is done by sending a POST request to endpoint <ip>:1438/entity-history. An example request would be curl -X POST -H "Content-Type: application/wql" <ip>:1438/entity-history -d '(entity_key: "entity_tree_key", entity_id: "<some-Uuid>",)'. In release mode it is necessary to use header Authorization: Bearer <your session token> for this endpoint.
Example request:
(entity_key: "entity_tree_key", entity_id: "dc3069e7-2a22-4fbc-ae05-f78a807239c0",)
Example response:
#![allow(unused)] fn main() { { "2021-03-02T05:00:19.813514240Z": { "a": Integer(123), "b": Float(12.3), "tx_time": DateTime("2021-03-02T05:00:19.813514240Z"), }, "2021-03-02T05:00:19.816357939Z": { "b": Float(12.3), "a": Integer(123), "tx_time": DateTime("2021-03-02T05:00:19.816357939Z"), }, "2021-03-02T05:00:19.817189987Z": { "b": Float(12.3), "c": Boolean(true), "a": Integer(34), "tx_time": DateTime("2021-03-02T05:00:19.817189987Z"), }, "2021-03-02T05:00:19.818031113Z": { "b": Float(12.3), "a": Integer(321), "c": Char('h'), "tx_time": DateTime("2021-03-02T05:00:19.818031113Z"), },} }
- This response is considering the following events:
INSERT {a: 123, b: 12.3,} INTO entity_tree_key.UPDATE entity_tree_key SET {{a: 12, c: Nil,}} INTO dc3069e7-2a22-4fbc-ae05-f78a807239c0. Note that this event does not appear due to DELETE.Delete dc3069e7-2a22-4fbc-ae05-f78a807239c0 FROM entity_tree_key. Entity map state is the same as the previous state, therefore "2021-03-02T05:00:19.813514240Z" and "2021-03-02T05:00:19.816357939Z" have equal content.UPDATE entity_tree_key SET {{a: 34, c: true,}} INTO dc3069e7-2a22-4fbc-ae05-f78a807239c0.UPDATE entity_tree_key SET {{a: 321, c: 'h',}} INTO dc3069e7-2a22-4fbc-ae05-f78a807239c0.
Entity history with time ranges
There are two extra parameters that can be used with entity-history, they are start_datetime and end_datetime. Both parameters are optional and if they are present they will define the time limits of the query. start_datetime is the beginning of the time range query while end_datetime is the ending of the time range query. If we used start_datetime and end_datetime for the previous example as curl -X POST -H "Content-Type: application/wql" <ip>:1438/entity-history -d '(entity_key: "entity_tree_key", entity_id: "<some-Uuid>", start_datetime: Some("2021-03-02T05:00:19.816357937Z"), end_datetime: Some("2021-03-02T05:00:19.817189988Z"),)' we would have the following result:
Example request:
(
entity_key: "entity_tree_key",
entity_id: "dc3069e7-2a22-4fbc-ae05-f78a807239c0",
start_datetime: Some("2021-03-02T05:00:19.816357937Z"),
end_datetime: Some("2021-03-02T05:00:19.817189988Z"),
)
Example response:
#![allow(unused)] fn main() { { "2021-03-02T05:00:19.816357939Z": { "b": Float(12.3), "a": Integer(123), "tx_time": DateTime("2021-03-02T05:00:19.816357939Z"), }, "2021-03-02T05:00:19.817189987Z": { "b": Float(12.3), "c": Boolean(true), "a": Integer(34), "tx_time": DateTime("2021-03-02T05:00:19.817189987Z"), },} }