From 8755877b1f4bb042e5be783771b4b4a7b1ec954c Mon Sep 17 00:00:00 2001 From: Jakin Girma Date: Sat, 20 Jan 2024 15:24:52 +0100 Subject: [PATCH] Changed Thing to RecordId type for better readability (Should break nothing RecordId is alias for Thing) --- Cargo.toml | 4 +++ surrealdb_extra/Cargo.toml | 6 ++-- surrealdb_extra/src/query/parsing/cond/mod.rs | 5 ++-- surrealdb_extra/src/query/parsing/value.rs | 6 ++-- surrealdb_extra/src/query/parsing/what.rs | 6 ++-- surrealdb_extra/src/query/relate/mod.rs | 25 +++++++++-------- surrealdb_extra/src/query/select/mod.rs | 13 +++++---- surrealdb_extra/src/query/update/mod.rs | 4 +-- surrealdb_extra/src/table/mod.rs | 16 +++++------ surrealdb_extra_bench/Cargo.toml | 4 +-- .../benches/select_builder.rs | 28 +++++++++++++++++-- surrealdb_extra_derive/Cargo.toml | 4 +-- surrealdb_extra_derive/src/lib.rs | 4 +-- surrealdb_extra_tests/Cargo.toml | 4 +-- surrealdb_extra_tests/tests/lib.rs | 10 +++---- 15 files changed, 84 insertions(+), 55 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index a43fadd..7cfc3b3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,3 +9,7 @@ members = [ [workspace.dependencies] surrealdb = { version = "1.1.0" } + +[workspace.package] +version = "0.7.1" +edition = "2021" \ No newline at end of file diff --git a/surrealdb_extra/Cargo.toml b/surrealdb_extra/Cargo.toml index 8e8b3f6..7d8d762 100644 --- a/surrealdb_extra/Cargo.toml +++ b/surrealdb_extra/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "surrealdb_extra" -version = "0.7.0" -edition = "2021" +version.workspace = true +edition.workspace = true license = "MIT OR Apache-2.0" description = "Adds a orm and query builder on top of surrealdb" readme = "crates-io.md" @@ -11,7 +11,7 @@ keywords = ["surrealdb", "surrealdb_extra", "surrealdb_orm", "orm", "query_build categories = ["database", "database-implementations"] [dependencies] -surrealdb_extra_derive = { version = "0.7.0", path = "../surrealdb_extra_derive" } +surrealdb_extra_derive = { version = "0.7.1", path = "../surrealdb_extra_derive" } async-trait = "0.1.77" surrealdb = { workspace = true } serde = { version = "1.0.195", features = ["derive"] } diff --git a/surrealdb_extra/src/query/parsing/cond/mod.rs b/surrealdb_extra/src/query/parsing/cond/mod.rs index d40c498..7e9219b 100644 --- a/surrealdb_extra/src/query/parsing/cond/mod.rs +++ b/surrealdb_extra/src/query/parsing/cond/mod.rs @@ -126,8 +126,9 @@ impl From for ExtraCond { #[cfg(test)] mod test { use serde::{Deserialize, Serialize}; + use surrealdb::opt::RecordId; use surrealdb::{engine::any::connect, sql::Part}; - use surrealdb::sql::{Field, Thing, Operator}; + use surrealdb::sql::{Field, Operator}; use crate::{cond_vec, op}; use crate::query::statement::StatementBuilder; @@ -138,7 +139,7 @@ mod test { #[derive(Debug, Table, Serialize, Deserialize, PartialEq, Clone)] #[table(name = "test")] pub struct Test { - id: Option, + id: Option, name: String, n: i64 } diff --git a/surrealdb_extra/src/query/parsing/value.rs b/surrealdb_extra/src/query/parsing/value.rs index 1df2cac..2f3c7b7 100644 --- a/surrealdb_extra/src/query/parsing/value.rs +++ b/surrealdb_extra/src/query/parsing/value.rs @@ -1,10 +1,10 @@ -use surrealdb::sql::{Thing, Value}; +use surrealdb::{opt::RecordId, sql::Value}; #[derive(Debug, Clone)] pub struct ExtraValue(pub Value); -impl From for ExtraValue { - fn from(value: Thing) -> Self { +impl From for ExtraValue { + fn from(value: RecordId) -> Self { ExtraValue(Value::Thing(value)) } } diff --git a/surrealdb_extra/src/query/parsing/what.rs b/surrealdb_extra/src/query/parsing/what.rs index b5e478f..bc2cfc8 100644 --- a/surrealdb_extra/src/query/parsing/what.rs +++ b/surrealdb_extra/src/query/parsing/what.rs @@ -1,4 +1,4 @@ -use surrealdb::sql::{Table, Thing, Value, Values}; +use surrealdb::{opt::RecordId, sql::{Table, Value, Values}}; #[derive(Debug, Clone)] pub struct ExtraValue(pub Values); @@ -33,8 +33,8 @@ impl From for ExtraValue { } } -impl From for ExtraValue { - fn from(value: Thing) -> Self { +impl From for ExtraValue { + fn from(value: RecordId) -> Self { let values = Values( vec![ Value::Thing(value) diff --git a/surrealdb_extra/src/query/relate/mod.rs b/surrealdb_extra/src/query/relate/mod.rs index 3c74250..77620b0 100644 --- a/surrealdb_extra/src/query/relate/mod.rs +++ b/surrealdb_extra/src/query/relate/mod.rs @@ -43,10 +43,10 @@ impl<'r, Client> RelateBuilder<'r, Client, NoRelation, NoData> /// /// #[tokio::main] /// async fn main() { - /// use surrealdb::sql::Thing; + /// use surrealdb::opt::RecordId; /// let db = connect("mem://").await.unwrap(); /// - /// db.relate_builder().relation(Thing::from(("test", "test")), "test", Thing::from(("test2", "test2"))); + /// db.relate_builder().relation(RecordId::from(("test", "test")), "test", RecordId::from(("test2", "test2"))); /// // The above builder becomes `RELATE test:test->test->test2:test2 /// /// } @@ -79,13 +79,13 @@ impl<'r, Client> RelateBuilder<'r, Client, FilledRelation, NoData> /// /// #[tokio::main] /// async fn main() { - /// use surrealdb::sql::Thing; + /// use surrealdb::opt::RecordId; /// let db = connect("mem://").await.unwrap(); /// - /// db.relate_builder().relation(Thing::from(("test", "test")), "test", Thing::from(("test2", "test2"))).set(vec![("test", Operator::Equal, "test")]); + /// db.relate_builder().relation(RecordId::from(("test", "test")), "test", RecordId::from(("test2", "test2"))).set(vec![("test", Operator::Equal, "test")]); /// // The above builder becomes `RELATE test:test->test->test2:test2 SET test = 'test' /// - /// db.relate_builder().relation(Thing::from(("test", "test")), "test", Thing::from(("test2", "test2"))).set(vec![("test", Operator::Equal, "test"), ("test2", Operator::Equal, "test2")]); + /// db.relate_builder().relation(RecordId::from(("test", "test")), "test", RecordId::from(("test2", "test2"))).set(vec![("test", Operator::Equal, "test"), ("test2", Operator::Equal, "test2")]); /// // The above builder becomes `RELATE test:test->test->test2:test2 SET test = 'test', test2 = 'test2' /// /// } @@ -111,7 +111,7 @@ impl<'r, Client> RelateBuilder<'r, Client, FilledRelation, NoData> /// use serde::Serialize; /// use surrealdb::engine::any::connect; /// use surrealdb_extra::query::statement::StatementBuilder; - /// use surrealdb::sql::Thing; + /// use surrealdb::opt::RecordId; /// /// #[derive(Serialize)] /// pub struct Test { @@ -122,7 +122,7 @@ impl<'r, Client> RelateBuilder<'r, Client, FilledRelation, NoData> /// async fn main() { /// /// let db = connect("mem://").await.unwrap(); - /// db.relate_builder().relation(Thing::from(("test", "test")), "test", Thing::from(("test2", "test2"))).content(Test { test: "test".to_string(), magic: true }); + /// db.relate_builder().relation(RecordId::from(("test", "test")), "test", RecordId::from(("test2", "test2"))).content(Test { test: "test".to_string(), magic: true }); /// // The above builder becomes `RELATE test:test->test->test2:test2 CONTENT { test: "test", magic: true } /// /// } @@ -213,7 +213,8 @@ impl<'r, Client, D> RelateBuilder<'r, Client, FilledRelation, D> mod test { use surrealdb::engine::any::{Any, connect}; use surrealdb::opt::IntoQuery; - use surrealdb::sql::{Operator, Thing}; + use surrealdb::opt::RecordId; + use surrealdb::sql::Operator; use surrealdb::Surreal; use crate::query::statement::StatementBuilder; @@ -231,7 +232,7 @@ mod test { async fn relate_table() { let db = db().await; - let relate = RelateBuilder::new(&db).relation(Thing::from(("test", "test")), "test", Thing::from(("test2", "test2"))); + let relate = RelateBuilder::new(&db).relation(RecordId::from(("test", "test")), "test", RecordId::from(("test2", "test2"))); let query = relate.statement.into_query(); @@ -242,7 +243,7 @@ mod test { async fn relate_table_data() { let db = db().await; - let relate = RelateBuilder::new(&db).relation(Thing::from(("test", "test")), "test", Thing::from(("test2", "test2"))).set(vec![("test", Operator::Equal, "test"), ("test2", Operator::Equal, "test2")]); + let relate = RelateBuilder::new(&db).relation(RecordId::from(("test", "test")), "test", RecordId::from(("test2", "test2"))).set(vec![("test", Operator::Equal, "test"), ("test2", Operator::Equal, "test2")]); let query = relate.statement.into_query(); @@ -253,7 +254,7 @@ mod test { async fn relate_table_db() { let db = db().await; - let relate = db.relate_builder().relation(Thing::from(("test", "test")), "test", Thing::from(("test2", "test2"))); + let relate = db.relate_builder().relation(RecordId::from(("test", "test")), "test", RecordId::from(("test2", "test2"))); let query = relate.statement.into_query(); @@ -264,7 +265,7 @@ mod test { async fn relate_table_data_db() { let db = db().await; - let relate = db.relate_builder().relation(Thing::from(("test", "test")), "test", Thing::from(("test2", "test2"))).set(vec![("test", Operator::Equal, "test"), ("test2", Operator::Equal, "test2")]); + let relate = db.relate_builder().relation(RecordId::from(("test", "test")), "test", RecordId::from(("test2", "test2"))).set(vec![("test", Operator::Equal, "test"), ("test2", Operator::Equal, "test2")]); let query = relate.statement.into_query(); diff --git a/surrealdb_extra/src/query/select/mod.rs b/surrealdb_extra/src/query/select/mod.rs index fecc02d..6d28e00 100644 --- a/surrealdb_extra/src/query/select/mod.rs +++ b/surrealdb_extra/src/query/select/mod.rs @@ -86,7 +86,7 @@ impl<'r, Client> SelectBuilder<'r, Client, NoWhat, NoFields, NoCond> /// Example: /// ```rust /// use surrealdb::engine::any::connect; - /// use surrealdb::sql::Thing; + /// use surrealdb::opt::RecordId; /// use surrealdb_extra::query::select::SelectBuilder; /// /// #[tokio::main] @@ -94,7 +94,7 @@ impl<'r, Client> SelectBuilder<'r, Client, NoWhat, NoFields, NoCond> /// let db = connect("mem://").await.unwrap(); /// SelectBuilder::new(&db).what("test").field("test"); // This becomes `SELECT test FROM test` /// - /// SelectBuilder::new(&db).what(Thing::from(("test", "test"))).field("test"); // This becomes `SELECT test FROM test:test` + /// SelectBuilder::new(&db).what(RecordId::from(("test", "test"))).field("test"); // This becomes `SELECT test FROM test:test` /// } /// ``` /// @@ -525,7 +525,8 @@ impl<'r, Client, C> SelectBuilder<'r, Client, FilledWhat, FilledFields, C> mod test { use surrealdb::engine::any::{Any, connect}; use surrealdb::opt::IntoQuery; - use surrealdb::sql::{Field, Idiom, Thing, Value}; + use surrealdb::opt::RecordId; + use surrealdb::sql::{Field, Idiom, Value}; use super::*; async fn db() -> Surreal { @@ -551,7 +552,7 @@ mod test { async fn select_thing() { let db = db().await; - let select = SelectBuilder::new(&db).what(Thing::from(("test", "test"))); + let select = SelectBuilder::new(&db).what(RecordId::from(("test", "test"))); let query = select.statement.into_query(); @@ -562,7 +563,7 @@ mod test { async fn select_all_field() { let db = db().await; - let select = SelectBuilder::new(&db).what(Thing::from(("test", "test"))).field(Field::All); + let select = SelectBuilder::new(&db).what(RecordId::from(("test", "test"))).field(Field::All); let query = select.statement.into_query(); @@ -573,7 +574,7 @@ mod test { async fn select_str_fields() { let db = db().await; - let select = SelectBuilder::new(&db).what(Thing::from(("test", "test"))).field("test"); + let select = SelectBuilder::new(&db).what(RecordId::from(("test", "test"))).field("test"); let query = select.statement.into_query(); diff --git a/surrealdb_extra/src/query/update/mod.rs b/surrealdb_extra/src/query/update/mod.rs index c9e2811..749b369 100644 --- a/surrealdb_extra/src/query/update/mod.rs +++ b/surrealdb_extra/src/query/update/mod.rs @@ -43,7 +43,7 @@ impl<'r, Client> UpdateBuilder<'r, Client, NoWhat, NoData, NoCond> /// Example: /// ```rust /// use surrealdb::engine::any::connect; - /// use surrealdb::sql::Thing; + /// use surrealdb::opt::RecordId; /// use surrealdb_extra::query::update::UpdateBuilder; /// /// #[tokio::main] @@ -51,7 +51,7 @@ impl<'r, Client> UpdateBuilder<'r, Client, NoWhat, NoData, NoCond> /// let db = connect("mem://").await.unwrap(); /// UpdateBuilder::new(&db).what("test"); /// - /// UpdateBuilder::new(&db).what(Thing::from(("test", "test"))); + /// UpdateBuilder::new(&db).what(RecordId::from(("test", "test"))); /// } /// ``` /// diff --git a/surrealdb_extra/src/table/mod.rs b/surrealdb_extra/src/table/mod.rs index 5347d1d..0dcc241 100644 --- a/surrealdb_extra/src/table/mod.rs +++ b/surrealdb_extra/src/table/mod.rs @@ -3,7 +3,7 @@ //! To use this trait, implement it for your struct representing the table. The struct must have the following attributes: //! - `#[derive(Table)]` to automatically derive the implementation of the `Table` trait. //! - `#[table(name = "...")]` to specify the name of the table in the database. -//! - `id: Option` needs to be one of the fields +//! - `id: Option` needs to be one of the fields //! //! # Example //! @@ -11,7 +11,7 @@ //! ``` rust //! use serde::{Serialize, Deserialize}; //! use surrealdb_extra::table::Table; -//! use surrealdb::sql::Thing; +//! use surrealdb::opt::RecordId; //! use surrealdb::engine::any::connect; //! use surrealdb::{Surreal, Result}; //! use tokio::main; @@ -22,7 +22,7 @@ //! #[table(name = "my_table")] //! struct MyStruct { //! // id is the only field that is a must id must be of type Option<::surrealdb::sql::Thing> -//! id: Option, +//! id: Option, //! // other fields... //! pub name: String //! } @@ -66,7 +66,7 @@ use ::surrealdb::{Connection, Surreal}; pub use crate::table::err::TableError; #[cfg(feature = "query")] -use surrealdb::sql::Thing; +use surrealdb::opt::RecordId; #[cfg(feature = "query")] use crate::query::{ @@ -84,7 +84,7 @@ pub trait Table: Serialize + DeserializeOwned + Send + Sync + Sized #[deprecated(since="0.5.0", note="Use `TABLE_NAME` instead")] fn table_name() -> String; - fn get_id(&self) -> &Option<::surrealdb::sql::Thing>; + fn get_id(&self) -> &Option<::surrealdb::opt::RecordId>; fn set_id(&mut self, id: impl Into); @@ -119,14 +119,14 @@ pub trait Table: Serialize + DeserializeOwned + Send + Sync + Sized /// ```rust /// use serde::{Deserialize, Serialize}; /// use serde_with::skip_serializing_none; - /// use surrealdb::sql::Thing; + /// use surrealdb::opt::RecordId; /// use surrealdb_extra::table::Table; /// /// #[skip_serializing_none] /// #[derive(Debug, Table, Serialize, Deserialize)] /// #[table(name = "test")] /// struct Test { - /// id: Option, + /// id: Option, /// } /// ``` async fn update(self, db: &Surreal) -> Result> { @@ -146,7 +146,7 @@ pub trait Table: Serialize + DeserializeOwned + Send + Sync + Sized #[cfg(feature = "query")] fn select_builder(db: &Surreal, id: Option) -> SelectBuilder { if let Some(id) = id { - return db.select_builder().what(Thing::from((Self::TABLE_NAME, id.as_str()))) + return db.select_builder().what(RecordId::from((Self::TABLE_NAME, id.as_str()))) } db.select_builder().what(Self::TABLE_NAME) diff --git a/surrealdb_extra_bench/Cargo.toml b/surrealdb_extra_bench/Cargo.toml index 3c00292..4468b0e 100644 --- a/surrealdb_extra_bench/Cargo.toml +++ b/surrealdb_extra_bench/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "surrealdb_extra_bench" -version = "0.7.0" -edition = "2021" +version.workspace = true +edition.workspace = true readme = "crates-io.md" documentation = "https://docs.rs/surrealdb_extra" repository = "https://github.com/jakin010/surrealdb_extra" diff --git a/surrealdb_extra_bench/benches/select_builder.rs b/surrealdb_extra_bench/benches/select_builder.rs index cfcf7ce..a2286f5 100644 --- a/surrealdb_extra_bench/benches/select_builder.rs +++ b/surrealdb_extra_bench/benches/select_builder.rs @@ -7,7 +7,8 @@ use criterion::{ use serde::{Deserialize, Serialize}; use surrealdb::engine::any::{Any, connect}; -use surrealdb::sql::{Field, Thing, Operator, Value, Expression}; +use surrealdb::opt::RecordId; +use surrealdb::sql::{Field, Operator, Value, Expression}; use surrealdb::Surreal; use surrealdb_extra::query::parsing::cond::Condition; use tokio::runtime::Runtime; @@ -27,7 +28,7 @@ async fn db() -> Surreal { #[derive(Debug, Table, Serialize, Deserialize, PartialEq, Clone)] #[table(name = "test")] pub struct Test { - id: Option, + id: Option, name: String, n: i64 } @@ -158,6 +159,26 @@ fn query_with_cond_5_exact_benchmark(c: &mut Criterion) { ); } + +fn select_builder_from_string_with_subquery_benchmark(c: &mut Criterion) { + let r = Runtime::new().unwrap(); + + c.bench_function( + "select_builder_from_string_with_subquery", move |b| + b.to_async(&r).iter_custom(|iters| async move { + + let db = db().await; + + let start = Instant::now(); + for _i in 0..iters { + let _select = db.select_builder().what(Test::TABLE_NAME).field(Field::All).condition("name = $name AND n > $n AND n > $n AND n > $n AND n > $n AND n > $n AND (test = $n AND n > $n AND n > $n)").to_query() + .bind(("name", "test")) + .bind(("n", 3)); + } + start.elapsed() + }) + ); +} fn select_builder_with_cond_and_subquery_benchmark(c: &mut Criterion) { let r = Runtime::new().unwrap(); @@ -347,6 +368,7 @@ criterion_group!(benches_select_with_cond, select_builder_with_cond_benchmark); criterion_group!(benches_query_with_cond, query_with_cond_benchmark); criterion_group!(benches_select_subquery, select_builder_with_cond_and_subquery_benchmark); +criterion_group!(benches_select_from_string_subquery, select_builder_from_string_with_subquery_benchmark); criterion_group!(benches_query_subquery, query_with_cond_and_subquery_benchmark); criterion_group!(benches_select_5, select_builder_with_cond_5_exact_benchmark); @@ -362,7 +384,7 @@ criterion_main!( benches_select_from_expr, benches_select_from_string, benches_select_with_cond, benches_query_with_cond, - benches_select_subquery, benches_query_subquery, + benches_select_subquery, benches_select_from_string_subquery, benches_query_subquery, benches_select_5, benches_query_5, benches_select_without_cond, benches_query_without_cond, benches_select_more_options, benches_query_more_options, diff --git a/surrealdb_extra_derive/Cargo.toml b/surrealdb_extra_derive/Cargo.toml index cef7fc4..e383334 100644 --- a/surrealdb_extra_derive/Cargo.toml +++ b/surrealdb_extra_derive/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "surrealdb_extra_derive" -version = "0.7.0" -edition = "2021" +version.workspace = true +edition.workspace = true license = "MIT OR Apache-2.0" description = "Derive crate for surrealdb_extra" readme = "crates-io.md" diff --git a/surrealdb_extra_derive/src/lib.rs b/surrealdb_extra_derive/src/lib.rs index 0070316..e4eb195 100644 --- a/surrealdb_extra_derive/src/lib.rs +++ b/surrealdb_extra_derive/src/lib.rs @@ -20,12 +20,12 @@ pub fn table(input: TokenStream) -> TokenStream { #table_name.to_string() } - fn get_id(&self) -> &Option<::surrealdb::sql::Thing> { + fn get_id(&self) -> &Option<::surrealdb::opt::RecordId> { &self.id } fn set_id(&mut self, id: impl Into) { - self.id = Some(::surrealdb::sql::Thing::from((Self::TABLE_NAME.to_string(), id.into()))); + self.id = Some(::surrealdb::opt::RecordId::from((Self::TABLE_NAME.to_string(), id.into()))); } } }; diff --git a/surrealdb_extra_tests/Cargo.toml b/surrealdb_extra_tests/Cargo.toml index b1b27cc..b9ad525 100644 --- a/surrealdb_extra_tests/Cargo.toml +++ b/surrealdb_extra_tests/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "surrealdb_extra_tests" -version = "0.7.0" -edition = "2021" +version.workspace = true +edition.workspace = true readme = "crates-io.md" documentation = "https://docs.rs/surrealdb_extra" repository = "https://github.com/jakin010/surrealdb_extra" diff --git a/surrealdb_extra_tests/tests/lib.rs b/surrealdb_extra_tests/tests/lib.rs index 4e45961..a363467 100644 --- a/surrealdb_extra_tests/tests/lib.rs +++ b/surrealdb_extra_tests/tests/lib.rs @@ -1,6 +1,6 @@ use serde::{Deserialize, Serialize}; use surrealdb::engine::local::{Db, Mem}; -use surrealdb::sql::Thing; +use surrealdb::opt::RecordId; use surrealdb::{Error, Surreal}; use surrealdb_extra::query::statement::StatementBuilder; use surrealdb_extra::table::Table; @@ -9,7 +9,7 @@ use surrealdb_extra::table::Table; #[derive(Debug, Default, Table, Serialize, Deserialize, Clone, PartialEq)] #[table(name = "test_test")] pub struct Test { - id: Option, + id: Option, name: String, n: Option, } @@ -30,11 +30,11 @@ fn table_derive_init() { #[test] fn table_derive_get_id() { let t = Test { - id: Some(Thing::from(("test", "test"))), + id: Some(RecordId::from(("test", "test"))), name: "".to_string(), ..Test::default() }; - assert_eq!(t.get_id().clone().unwrap(), Thing::from(("test", "test"))) + assert_eq!(t.get_id().clone().unwrap(), RecordId::from(("test", "test"))) } #[test] @@ -46,7 +46,7 @@ fn table_derive_set_id() { t.set_id("test"); - assert_eq!(t.get_id().clone().unwrap(), Thing::from(("test_test", "test"))) + assert_eq!(t.get_id().clone().unwrap(), RecordId::from(("test_test", "test"))) } #[tokio::test]