Skip to content

Commit

Permalink
Changed Thing to RecordId type for better readability (Should break n…
Browse files Browse the repository at this point in the history
…othing RecordId is alias for Thing)
  • Loading branch information
jakin010 committed Jan 20, 2024
1 parent eb85041 commit 8755877
Show file tree
Hide file tree
Showing 15 changed files with 84 additions and 55 deletions.
4 changes: 4 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,7 @@ members = [

[workspace.dependencies]
surrealdb = { version = "1.1.0" }

[workspace.package]
version = "0.7.1"
edition = "2021"
6 changes: 3 additions & 3 deletions surrealdb_extra/Cargo.toml
Original file line number Diff line number Diff line change
@@ -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"
Expand All @@ -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"] }
Expand Down
5 changes: 3 additions & 2 deletions surrealdb_extra/src/query/parsing/cond/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -126,8 +126,9 @@ impl From<Condition> 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;

Expand All @@ -138,7 +139,7 @@ mod test {
#[derive(Debug, Table, Serialize, Deserialize, PartialEq, Clone)]
#[table(name = "test")]
pub struct Test {
id: Option<Thing>,
id: Option<RecordId>,
name: String,
n: i64
}
Expand Down
6 changes: 3 additions & 3 deletions surrealdb_extra/src/query/parsing/value.rs
Original file line number Diff line number Diff line change
@@ -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<Thing> for ExtraValue {
fn from(value: Thing) -> Self {
impl From<RecordId> for ExtraValue {
fn from(value: RecordId) -> Self {
ExtraValue(Value::Thing(value))
}
}
6 changes: 3 additions & 3 deletions surrealdb_extra/src/query/parsing/what.rs
Original file line number Diff line number Diff line change
@@ -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);
Expand Down Expand Up @@ -33,8 +33,8 @@ impl From<String> for ExtraValue {
}
}

impl From<Thing> for ExtraValue {
fn from(value: Thing) -> Self {
impl From<RecordId> for ExtraValue {
fn from(value: RecordId) -> Self {
let values = Values(
vec![
Value::Thing(value)
Expand Down
25 changes: 13 additions & 12 deletions surrealdb_extra/src/query/relate/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
///
/// }
Expand Down Expand Up @@ -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'
///
/// }
Expand All @@ -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 {
Expand All @@ -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 }
///
/// }
Expand Down Expand Up @@ -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;

Expand All @@ -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();

Expand All @@ -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();

Expand All @@ -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();

Expand All @@ -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();

Expand Down
13 changes: 7 additions & 6 deletions surrealdb_extra/src/query/select/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -86,15 +86,15 @@ 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]
/// async fn main() {
/// 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`
/// }
/// ```
///
Expand Down Expand Up @@ -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<Any> {
Expand All @@ -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();

Expand All @@ -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();

Expand All @@ -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();

Expand Down
4 changes: 2 additions & 2 deletions surrealdb_extra/src/query/update/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,15 +43,15 @@ 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]
/// async fn main() {
/// 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")));
/// }
/// ```
///
Expand Down
16 changes: 8 additions & 8 deletions surrealdb_extra/src/table/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@
//! 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<Thing>` needs to be one of the fields
//! - `id: Option<RecordId>` needs to be one of the fields
//!
//! # Example
//!
//!
//! ``` 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;
Expand All @@ -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<Thing>,
//! id: Option<RecordId>,
//! // other fields...
//! pub name: String
//! }
Expand Down Expand Up @@ -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::{
Expand All @@ -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<String>);

Expand Down Expand Up @@ -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<Thing>,
/// id: Option<RecordId>,
/// }
/// ```
async fn update<C: Connection>(self, db: &Surreal<C>) -> Result<Option<Self>> {
Expand All @@ -146,7 +146,7 @@ pub trait Table: Serialize + DeserializeOwned + Send + Sync + Sized
#[cfg(feature = "query")]
fn select_builder<C: Connection>(db: &Surreal<C>, id: Option<String>) -> SelectBuilder<C, FilledWhat, NoFields, NoCond> {
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)
Expand Down
4 changes: 2 additions & 2 deletions surrealdb_extra_bench/Cargo.toml
Original file line number Diff line number Diff line change
@@ -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"
Expand Down
28 changes: 25 additions & 3 deletions surrealdb_extra_bench/benches/select_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -27,7 +28,7 @@ async fn db() -> Surreal<Any> {
#[derive(Debug, Table, Serialize, Deserialize, PartialEq, Clone)]
#[table(name = "test")]
pub struct Test {
id: Option<Thing>,
id: Option<RecordId>,
name: String,
n: i64
}
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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);
Expand All @@ -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,
Expand Down
4 changes: 2 additions & 2 deletions surrealdb_extra_derive/Cargo.toml
Original file line number Diff line number Diff line change
@@ -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"
Expand Down
Loading

0 comments on commit 8755877

Please sign in to comment.