From 63113f83c3d9013f6d30ce3d4f9f6f0c68fa4f99 Mon Sep 17 00:00:00 2001 From: Tobie Morgan Hitchcock <tobie@abcum.com> Date: Sat, 26 Feb 2022 00:34:05 +0000 Subject: [PATCH] Ensure types can be serialized/deserialized to the datastore --- Cargo.lock | 11 +++++++++++ lib/Cargo.toml | 1 + lib/src/doc/document.rs | 6 ++++++ lib/src/sql/statements/begin.rs | 3 ++- lib/src/sql/statements/cancel.rs | 3 ++- lib/src/sql/statements/commit.rs | 3 ++- lib/src/sql/statements/create.rs | 3 ++- lib/src/sql/statements/define.rs | 21 +++++++++++---------- lib/src/sql/statements/delete.rs | 3 ++- lib/src/sql/statements/ifelse.rs | 3 ++- lib/src/sql/statements/info.rs | 3 ++- lib/src/sql/statements/insert.rs | 3 ++- lib/src/sql/statements/kill.rs | 3 ++- lib/src/sql/statements/live.rs | 3 ++- lib/src/sql/statements/option.rs | 3 ++- lib/src/sql/statements/output.rs | 3 ++- lib/src/sql/statements/relate.rs | 3 ++- lib/src/sql/statements/remove.rs | 21 +++++++++++---------- lib/src/sql/statements/select.rs | 3 ++- lib/src/sql/statements/set.rs | 3 ++- lib/src/sql/statements/update.rs | 3 ++- lib/src/sql/statements/yuse.rs | 3 ++- lib/src/sql/value/value.rs | 15 ++------------- 23 files changed, 76 insertions(+), 50 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 97483abf..d3c80deb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2160,6 +2160,7 @@ dependencies = [ "sha-1 0.10.0", "sha2", "slug", + "surrealdb-derive", "thiserror", "tikv-client", "tokio", @@ -2169,6 +2170,16 @@ dependencies = [ "uuid", ] +[[package]] +name = "surrealdb-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "360979ea6e0588e857878b2578f0b0844d57a732cb7824a6964cb7ea3206cb3f" +dependencies = [ + "quote", + "syn", +] + [[package]] name = "syn" version = "1.0.86" diff --git a/lib/Cargo.toml b/lib/Cargo.toml index 5503f3b8..6d4f5e37 100644 --- a/lib/Cargo.toml +++ b/lib/Cargo.toml @@ -19,6 +19,7 @@ async-recursion = "1.0.0" byteorder = "1.4.3" chrono = { version = "0.4.19", features = ["serde"] } dec = { version = "1.21.0", package = "rust_decimal", features = ["maths", "serde-float"] } +derive = { version = "0.1.0", package = "surrealdb-derive" } dmp = "0.1.1" echodb = { version = "0.2.0", optional = true } futures = "0.3.21" diff --git a/lib/src/doc/document.rs b/lib/src/doc/document.rs index cdc16014..956e449a 100644 --- a/lib/src/doc/document.rs +++ b/lib/src/doc/document.rs @@ -9,6 +9,12 @@ pub struct Document<'a> { pub(super) initial: Cow<'a, Value>, } +impl<'a> Into<Vec<u8>> for &Document<'a> { + fn into(self) -> Vec<u8> { + msgpack::to_vec(&self.current).unwrap() + } +} + impl<'a> Document<'a> { pub fn new(id: Option<Thing>, val: &'a Value) -> Self { Document { diff --git a/lib/src/sql/statements/begin.rs b/lib/src/sql/statements/begin.rs index b2f13d22..008b5aa2 100644 --- a/lib/src/sql/statements/begin.rs +++ b/lib/src/sql/statements/begin.rs @@ -1,5 +1,6 @@ use crate::sql::comment::shouldbespace; use crate::sql::error::IResult; +use derive::Store; use nom::branch::alt; use nom::bytes::complete::tag_no_case; use nom::combinator::opt; @@ -7,7 +8,7 @@ use nom::sequence::tuple; use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct BeginStatement; impl fmt::Display for BeginStatement { diff --git a/lib/src/sql/statements/cancel.rs b/lib/src/sql/statements/cancel.rs index 14375e3b..55202986 100644 --- a/lib/src/sql/statements/cancel.rs +++ b/lib/src/sql/statements/cancel.rs @@ -1,5 +1,6 @@ use crate::sql::comment::shouldbespace; use crate::sql::error::IResult; +use derive::Store; use nom::branch::alt; use nom::bytes::complete::tag_no_case; use nom::combinator::opt; @@ -7,7 +8,7 @@ use nom::sequence::tuple; use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct CancelStatement; impl fmt::Display for CancelStatement { diff --git a/lib/src/sql/statements/commit.rs b/lib/src/sql/statements/commit.rs index 279737de..e5ac9c0c 100644 --- a/lib/src/sql/statements/commit.rs +++ b/lib/src/sql/statements/commit.rs @@ -1,5 +1,6 @@ use crate::sql::comment::shouldbespace; use crate::sql::error::IResult; +use derive::Store; use nom::branch::alt; use nom::bytes::complete::tag_no_case; use nom::combinator::opt; @@ -7,7 +8,7 @@ use nom::sequence::tuple; use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct CommitStatement; impl fmt::Display for CommitStatement { diff --git a/lib/src/sql/statements/create.rs b/lib/src/sql/statements/create.rs index 8aeab6a0..d014951f 100644 --- a/lib/src/sql/statements/create.rs +++ b/lib/src/sql/statements/create.rs @@ -10,13 +10,14 @@ use crate::sql::error::IResult; use crate::sql::output::{output, Output}; use crate::sql::timeout::{timeout, Timeout}; use crate::sql::value::{whats, Value, Values}; +use derive::Store; use nom::bytes::complete::tag_no_case; use nom::combinator::opt; use nom::sequence::preceded; use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct CreateStatement { pub what: Values, pub data: Option<Data>, diff --git a/lib/src/sql/statements/define.rs b/lib/src/sql/statements/define.rs index 8932a1d0..7b12bd94 100644 --- a/lib/src/sql/statements/define.rs +++ b/lib/src/sql/statements/define.rs @@ -17,6 +17,7 @@ use crate::sql::permission::{permissions, Permissions}; use crate::sql::strand::strand_raw; use crate::sql::value::{value, values, Value, Values}; use crate::sql::view::{view, View}; +use derive::Store; use nom::branch::alt; use nom::bytes::complete::tag_no_case; use nom::combinator::{map, opt}; @@ -25,7 +26,7 @@ use nom::sequence::tuple; use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize, Store)] pub enum DefineStatement { Namespace(DefineNamespaceStatement), Database(DefineDatabaseStatement), @@ -94,7 +95,7 @@ pub fn define(i: &str) -> IResult<&str, DefineStatement> { // -------------------------------------------------- // -------------------------------------------------- -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct DefineNamespaceStatement { pub name: String, } @@ -138,7 +139,7 @@ fn namespace(i: &str) -> IResult<&str, DefineNamespaceStatement> { // -------------------------------------------------- // -------------------------------------------------- -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct DefineDatabaseStatement { pub name: String, } @@ -182,7 +183,7 @@ fn database(i: &str) -> IResult<&str, DefineDatabaseStatement> { // -------------------------------------------------- // -------------------------------------------------- -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct DefineLoginStatement { pub name: String, pub base: Base, @@ -280,7 +281,7 @@ fn login_hash(i: &str) -> IResult<&str, DefineLoginOption> { // -------------------------------------------------- // -------------------------------------------------- -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct DefineTokenStatement { pub name: String, pub base: Base, @@ -350,7 +351,7 @@ fn token(i: &str) -> IResult<&str, DefineTokenStatement> { // -------------------------------------------------- // -------------------------------------------------- -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct DefineScopeStatement { pub name: String, pub session: Option<Duration>, @@ -472,7 +473,7 @@ fn scope_connect(i: &str) -> IResult<&str, DefineScopeOption> { // -------------------------------------------------- // -------------------------------------------------- -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct DefineTableStatement { pub name: String, pub drop: bool, @@ -604,7 +605,7 @@ fn table_permissions(i: &str) -> IResult<&str, DefineTableOption> { // -------------------------------------------------- // -------------------------------------------------- -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct DefineEventStatement { pub name: String, pub what: String, @@ -671,7 +672,7 @@ fn event(i: &str) -> IResult<&str, DefineEventStatement> { // -------------------------------------------------- // -------------------------------------------------- -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct DefineFieldStatement { pub name: Idiom, pub what: String, @@ -813,7 +814,7 @@ fn field_permissions(i: &str) -> IResult<&str, DefineFieldOption> { // -------------------------------------------------- // -------------------------------------------------- -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct DefineIndexStatement { pub name: String, pub what: String, diff --git a/lib/src/sql/statements/delete.rs b/lib/src/sql/statements/delete.rs index 686ca14d..09cf05cd 100644 --- a/lib/src/sql/statements/delete.rs +++ b/lib/src/sql/statements/delete.rs @@ -10,6 +10,7 @@ use crate::sql::error::IResult; use crate::sql::output::{output, Output}; use crate::sql::timeout::{timeout, Timeout}; use crate::sql::value::{whats, Value, Values}; +use derive::Store; use nom::bytes::complete::tag_no_case; use nom::combinator::opt; use nom::sequence::preceded; @@ -17,7 +18,7 @@ use nom::sequence::tuple; use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct DeleteStatement { pub what: Values, pub cond: Option<Cond>, diff --git a/lib/src/sql/statements/ifelse.rs b/lib/src/sql/statements/ifelse.rs index cb6445e0..f16a8fc4 100644 --- a/lib/src/sql/statements/ifelse.rs +++ b/lib/src/sql/statements/ifelse.rs @@ -5,13 +5,14 @@ use crate::err::Error; use crate::sql::comment::shouldbespace; use crate::sql::error::IResult; use crate::sql::value::{value, Value}; +use derive::Store; use nom::bytes::complete::tag_no_case; use nom::combinator::opt; use nom::multi::separated_list0; use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct IfelseStatement { pub exprs: Vec<(Value, Value)>, pub close: Option<Value>, diff --git a/lib/src/sql/statements/info.rs b/lib/src/sql/statements/info.rs index 2068312a..75b19f01 100644 --- a/lib/src/sql/statements/info.rs +++ b/lib/src/sql/statements/info.rs @@ -7,12 +7,13 @@ use crate::sql::comment::shouldbespace; use crate::sql::error::IResult; use crate::sql::ident::ident_raw; use crate::sql::value::Value; +use derive::Store; use nom::branch::alt; use nom::bytes::complete::tag_no_case; use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize, Store)] pub enum InfoStatement { Namespace, Database, diff --git a/lib/src/sql/statements/insert.rs b/lib/src/sql/statements/insert.rs index 90e146d1..5d9560ef 100644 --- a/lib/src/sql/statements/insert.rs +++ b/lib/src/sql/statements/insert.rs @@ -11,6 +11,7 @@ use crate::sql::output::{output, Output}; use crate::sql::table::{table, Table}; use crate::sql::timeout::{timeout, Timeout}; use crate::sql::value::Value; +use derive::Store; use nom::branch::alt; use nom::bytes::complete::tag_no_case; use nom::combinator::opt; @@ -18,7 +19,7 @@ use nom::sequence::preceded; use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct InsertStatement { pub into: Table, pub data: Data, diff --git a/lib/src/sql/statements/kill.rs b/lib/src/sql/statements/kill.rs index 1eeabc44..f0fdfaff 100644 --- a/lib/src/sql/statements/kill.rs +++ b/lib/src/sql/statements/kill.rs @@ -6,11 +6,12 @@ use crate::sql::comment::shouldbespace; use crate::sql::error::IResult; use crate::sql::ident::{ident, Ident}; use crate::sql::value::Value; +use derive::Store; use nom::bytes::complete::tag_no_case; use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct KillStatement { pub id: Ident, } diff --git a/lib/src/sql/statements/live.rs b/lib/src/sql/statements/live.rs index 0149e9ef..7cf16e61 100644 --- a/lib/src/sql/statements/live.rs +++ b/lib/src/sql/statements/live.rs @@ -9,13 +9,14 @@ use crate::sql::fetch::{fetch, Fetchs}; use crate::sql::field::{fields, Fields}; use crate::sql::value::Value; use crate::sql::value::{whats, Values}; +use derive::Store; use nom::bytes::complete::tag_no_case; use nom::combinator::opt; use nom::sequence::preceded; use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct LiveStatement { pub expr: Fields, pub what: Values, diff --git a/lib/src/sql/statements/option.rs b/lib/src/sql/statements/option.rs index fb532f35..37a82979 100644 --- a/lib/src/sql/statements/option.rs +++ b/lib/src/sql/statements/option.rs @@ -2,6 +2,7 @@ use crate::sql::comment::mightbespace; use crate::sql::comment::shouldbespace; use crate::sql::error::IResult; use crate::sql::ident::{ident, Ident}; +use derive::Store; use nom::branch::alt; use nom::bytes::complete::tag; use nom::bytes::complete::tag_no_case; @@ -10,7 +11,7 @@ use nom::sequence::tuple; use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct OptionStatement { pub name: Ident, pub what: bool, diff --git a/lib/src/sql/statements/output.rs b/lib/src/sql/statements/output.rs index d2b9acf4..5ecd48d5 100644 --- a/lib/src/sql/statements/output.rs +++ b/lib/src/sql/statements/output.rs @@ -5,11 +5,12 @@ use crate::err::Error; use crate::sql::comment::shouldbespace; use crate::sql::error::IResult; use crate::sql::value::{value, Value}; +use derive::Store; use nom::bytes::complete::tag_no_case; use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct OutputStatement { pub what: Value, } diff --git a/lib/src/sql/statements/relate.rs b/lib/src/sql/statements/relate.rs index fae1ae00..239ae555 100644 --- a/lib/src/sql/statements/relate.rs +++ b/lib/src/sql/statements/relate.rs @@ -12,6 +12,7 @@ use crate::sql::output::{output, Output}; use crate::sql::table::{table, Table}; use crate::sql::timeout::{timeout, Timeout}; use crate::sql::value::{whats, Value, Values}; +use derive::Store; use nom::branch::alt; use nom::bytes::complete::tag; use nom::bytes::complete::tag_no_case; @@ -20,7 +21,7 @@ use nom::sequence::preceded; use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct RelateStatement { pub kind: Table, pub from: Values, diff --git a/lib/src/sql/statements/remove.rs b/lib/src/sql/statements/remove.rs index 7011e0d8..e2716702 100644 --- a/lib/src/sql/statements/remove.rs +++ b/lib/src/sql/statements/remove.rs @@ -8,6 +8,7 @@ use crate::sql::comment::shouldbespace; use crate::sql::error::IResult; use crate::sql::ident::ident_raw; use crate::sql::value::Value; +use derive::Store; use nom::branch::alt; use nom::bytes::complete::tag_no_case; use nom::combinator::{map, opt}; @@ -15,7 +16,7 @@ use nom::sequence::tuple; use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize, Store)] pub enum RemoveStatement { Namespace(RemoveNamespaceStatement), Database(RemoveDatabaseStatement), @@ -84,7 +85,7 @@ pub fn remove(i: &str) -> IResult<&str, RemoveStatement> { // -------------------------------------------------- // -------------------------------------------------- -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct RemoveNamespaceStatement { pub name: String, } @@ -128,7 +129,7 @@ fn namespace(i: &str) -> IResult<&str, RemoveNamespaceStatement> { // -------------------------------------------------- // -------------------------------------------------- -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct RemoveDatabaseStatement { pub name: String, } @@ -172,7 +173,7 @@ fn database(i: &str) -> IResult<&str, RemoveDatabaseStatement> { // -------------------------------------------------- // -------------------------------------------------- -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct RemoveLoginStatement { pub name: String, pub base: Base, @@ -226,7 +227,7 @@ fn login(i: &str) -> IResult<&str, RemoveLoginStatement> { // -------------------------------------------------- // -------------------------------------------------- -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct RemoveTokenStatement { pub name: String, pub base: Base, @@ -280,7 +281,7 @@ fn token(i: &str) -> IResult<&str, RemoveTokenStatement> { // -------------------------------------------------- // -------------------------------------------------- -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct RemoveScopeStatement { pub name: String, } @@ -324,7 +325,7 @@ fn scope(i: &str) -> IResult<&str, RemoveScopeStatement> { // -------------------------------------------------- // -------------------------------------------------- -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct RemoveTableStatement { pub name: String, } @@ -368,7 +369,7 @@ fn table(i: &str) -> IResult<&str, RemoveTableStatement> { // -------------------------------------------------- // -------------------------------------------------- -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct RemoveEventStatement { pub name: String, pub what: String, @@ -419,7 +420,7 @@ fn event(i: &str) -> IResult<&str, RemoveEventStatement> { // -------------------------------------------------- // -------------------------------------------------- -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct RemoveFieldStatement { pub name: String, pub what: String, @@ -470,7 +471,7 @@ fn field(i: &str) -> IResult<&str, RemoveFieldStatement> { // -------------------------------------------------- // -------------------------------------------------- -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct RemoveIndexStatement { pub name: String, pub what: String, diff --git a/lib/src/sql/statements/select.rs b/lib/src/sql/statements/select.rs index f3535620..f7580363 100644 --- a/lib/src/sql/statements/select.rs +++ b/lib/src/sql/statements/select.rs @@ -17,13 +17,14 @@ use crate::sql::start::{start, Start}; use crate::sql::timeout::{timeout, Timeout}; use crate::sql::value::{selects, Value, Values}; use crate::sql::version::{version, Version}; +use derive::Store; use nom::bytes::complete::tag_no_case; use nom::combinator::opt; use nom::sequence::preceded; use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct SelectStatement { pub expr: Fields, pub what: Values, diff --git a/lib/src/sql/statements/set.rs b/lib/src/sql/statements/set.rs index 661f09a3..dd51141f 100644 --- a/lib/src/sql/statements/set.rs +++ b/lib/src/sql/statements/set.rs @@ -7,13 +7,14 @@ use crate::sql::comment::shouldbespace; use crate::sql::error::IResult; use crate::sql::ident::ident_raw; use crate::sql::value::{value, Value}; +use derive::Store; use nom::bytes::complete::tag; use nom::bytes::complete::tag_no_case; use nom::sequence::preceded; use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct SetStatement { pub name: String, pub what: Value, diff --git a/lib/src/sql/statements/update.rs b/lib/src/sql/statements/update.rs index ce2af8fd..4840cde9 100644 --- a/lib/src/sql/statements/update.rs +++ b/lib/src/sql/statements/update.rs @@ -11,13 +11,14 @@ use crate::sql::error::IResult; use crate::sql::output::{output, Output}; use crate::sql::timeout::{timeout, Timeout}; use crate::sql::value::{whats, Value, Values}; +use derive::Store; use nom::bytes::complete::tag_no_case; use nom::combinator::opt; use nom::sequence::preceded; use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct UpdateStatement { pub what: Values, pub data: Option<Data>, diff --git a/lib/src/sql/statements/yuse.rs b/lib/src/sql/statements/yuse.rs index bfdff273..1a4b9f9e 100644 --- a/lib/src/sql/statements/yuse.rs +++ b/lib/src/sql/statements/yuse.rs @@ -1,12 +1,13 @@ use crate::sql::comment::shouldbespace; use crate::sql::error::IResult; use crate::sql::ident::ident_raw; +use derive::Store; use nom::branch::alt; use nom::bytes::complete::tag_no_case; use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, Store)] pub struct UseStatement { pub ns: Option<String>, pub db: Option<String>, diff --git a/lib/src/sql/value/value.rs b/lib/src/sql/value/value.rs index 0c4c8c79..7b70d4d9 100644 --- a/lib/src/sql/value/value.rs +++ b/lib/src/sql/value/value.rs @@ -25,6 +25,7 @@ use crate::sql::thing::{thing, Thing}; use async_recursion::async_recursion; use chrono::{DateTime, Utc}; use dec::Decimal; +use derive::Store; use fuzzy_matcher::skim::SkimMatcherV2; use fuzzy_matcher::FuzzyMatcher; use geo::Point; @@ -74,7 +75,7 @@ pub fn whats(i: &str) -> IResult<&str, Values> { Ok((i, Values(v))) } -#[derive(Clone, Debug, PartialEq, PartialOrd, Deserialize)] +#[derive(Clone, Debug, PartialEq, PartialOrd, Deserialize, Store)] pub enum Value { None, Void, @@ -386,18 +387,6 @@ impl From<Option<String>> for Value { } } -impl Into<Vec<u8>> for Value { - fn into(self) -> Vec<u8> { - msgpack::to_vec(&self).unwrap() - } -} - -impl From<Vec<u8>> for Value { - fn from(v: Vec<u8>) -> Self { - msgpack::from_slice::<Value>(&v).unwrap() - } -} - impl Value { // ----------------------------------- // Initial record value