mentat/core/src/values.rs

65 lines
3.4 KiB
Rust
Raw Normal View History

// Copyright 2016 Mozilla
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use
// this file except in compliance with the License. You may obtain a copy of the
// License at http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software distributed
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.
#![allow(dead_code)]
/// Literal `Value` instances in the the "db" namespace.
///
/// Used through-out the transactor to match core DB constructs.
use edn::types::Value;
use edn::symbols;
/// Declare a lazy static `ident` of type `Value::NamespacedKeyword` with the given `namespace` and
/// `name`.
///
/// It may look surprising that we declare a new `lazy_static!` block rather than including
/// invocations inside an existing `lazy_static!` block. The latter cannot be done, since macros
/// are expanded outside-in. Looking at the `lazy_static!` source suggests that there is no harm in
/// repeating that macro, since internally a multi-`static` block is expanded into many
/// single-`static` blocks.
///
/// TODO: take just ":db.part/db" and define DB_PART_DB using "db.part" and "db".
macro_rules! lazy_static_namespaced_keyword_value (
($tag:ident, $namespace:expr, $name:expr) => (
lazy_static! {
pub static ref $tag: Value = {
Value::NamespacedKeyword(symbols::NamespacedKeyword::new($namespace, $name))
};
}
)
);
lazy_static_namespaced_keyword_value!(DB_ADD, "db", "add");
lazy_static_namespaced_keyword_value!(DB_ALTER_ATTRIBUTE, "db.alter", "attribute");
lazy_static_namespaced_keyword_value!(DB_CARDINALITY, "db", "cardinality");
lazy_static_namespaced_keyword_value!(DB_CARDINALITY_MANY, "db.cardinality", "many");
lazy_static_namespaced_keyword_value!(DB_CARDINALITY_ONE, "db.cardinality", "one");
#260 Convert Schema into edn::Value (#384) r=nalexander, r=rnewman * Part 1 - Create as_edn_value function. * Do not include defaults inside output. * Pretty-printed by default. Do we want to make that a flag? * Includes simple test just to make sure it works. * Part 2 - only include ident if available. * Part 3 - Remove spacing and newlines as unnecessary. * Update function to build edn::Value directly rather than parsing from string * Update test to actually test the functionality. * Address review comments ncalexan. * Rename `as_edn_value` to `to_edn_value`. * Move `db/src/values.rs` to `core/src/values.rs` so we can reference inside `core/src/ib.rs`. * Add `lazy-static` crate to core `Cargo.toml` * Expose `values` as a public module from `core`. * Update references to values in `db/src/bootstrap.rs` & `db/src/lib.rs`. * Add new static vars for `DB_FULLTEXT`, `DB_INDEX` & `DB_IS_COMPONENT`. * Use static vars exposed in `values` inside `to_edn_value`. * Remove `db/id` as key in attribute output and use `entid` as `db/ident` if no `ident` is found for that `entid`. * Update test to match new expected output. * Add doc comment for function * Address review comments ncalexan. * Update function docstring to give clearer description of function. * Do not all entid at all to output. * Clean up code fetching ident (make it rustier). * Address review comments rnewman. * Extract out to new `to_edn_value` functions code for creating `edn::Value`\'s for `ValueType` and `Attribute`. * Use `map()` to create schema edn value rather than a loop. * Address review comments rnewman. * pass cloned instance of ident to `Attribute::get_edn_value`. * update `use` import for `edn`. * remove unnecessary call when using ident as key on `associate_ident`. * Fixed bug whereby we didn't differentiate between `db.index/value` and `db.index/identity` when generating `edn::Value` * Add extra assert at the end to ensure we get the same output when we convert the same schema to edn multiple times * Move check for type of uniqueness to `match` statement. * Also use `iter` instead of `into_iter` when iterating schema map.
2017-03-30 10:08:36 +00:00
lazy_static_namespaced_keyword_value!(DB_FULLTEXT, "db", "fulltext");
lazy_static_namespaced_keyword_value!(DB_IDENT, "db", "ident");
#260 Convert Schema into edn::Value (#384) r=nalexander, r=rnewman * Part 1 - Create as_edn_value function. * Do not include defaults inside output. * Pretty-printed by default. Do we want to make that a flag? * Includes simple test just to make sure it works. * Part 2 - only include ident if available. * Part 3 - Remove spacing and newlines as unnecessary. * Update function to build edn::Value directly rather than parsing from string * Update test to actually test the functionality. * Address review comments ncalexan. * Rename `as_edn_value` to `to_edn_value`. * Move `db/src/values.rs` to `core/src/values.rs` so we can reference inside `core/src/ib.rs`. * Add `lazy-static` crate to core `Cargo.toml` * Expose `values` as a public module from `core`. * Update references to values in `db/src/bootstrap.rs` & `db/src/lib.rs`. * Add new static vars for `DB_FULLTEXT`, `DB_INDEX` & `DB_IS_COMPONENT`. * Use static vars exposed in `values` inside `to_edn_value`. * Remove `db/id` as key in attribute output and use `entid` as `db/ident` if no `ident` is found for that `entid`. * Update test to match new expected output. * Add doc comment for function * Address review comments ncalexan. * Update function docstring to give clearer description of function. * Do not all entid at all to output. * Clean up code fetching ident (make it rustier). * Address review comments rnewman. * Extract out to new `to_edn_value` functions code for creating `edn::Value`\'s for `ValueType` and `Attribute`. * Use `map()` to create schema edn value rather than a loop. * Address review comments rnewman. * pass cloned instance of ident to `Attribute::get_edn_value`. * update `use` import for `edn`. * remove unnecessary call when using ident as key on `associate_ident`. * Fixed bug whereby we didn't differentiate between `db.index/value` and `db.index/identity` when generating `edn::Value` * Add extra assert at the end to ensure we get the same output when we convert the same schema to edn multiple times * Move check for type of uniqueness to `match` statement. * Also use `iter` instead of `into_iter` when iterating schema map.
2017-03-30 10:08:36 +00:00
lazy_static_namespaced_keyword_value!(DB_INDEX, "db", "index");
lazy_static_namespaced_keyword_value!(DB_INSTALL_ATTRIBUTE, "db.install", "attribute");
#260 Convert Schema into edn::Value (#384) r=nalexander, r=rnewman * Part 1 - Create as_edn_value function. * Do not include defaults inside output. * Pretty-printed by default. Do we want to make that a flag? * Includes simple test just to make sure it works. * Part 2 - only include ident if available. * Part 3 - Remove spacing and newlines as unnecessary. * Update function to build edn::Value directly rather than parsing from string * Update test to actually test the functionality. * Address review comments ncalexan. * Rename `as_edn_value` to `to_edn_value`. * Move `db/src/values.rs` to `core/src/values.rs` so we can reference inside `core/src/ib.rs`. * Add `lazy-static` crate to core `Cargo.toml` * Expose `values` as a public module from `core`. * Update references to values in `db/src/bootstrap.rs` & `db/src/lib.rs`. * Add new static vars for `DB_FULLTEXT`, `DB_INDEX` & `DB_IS_COMPONENT`. * Use static vars exposed in `values` inside `to_edn_value`. * Remove `db/id` as key in attribute output and use `entid` as `db/ident` if no `ident` is found for that `entid`. * Update test to match new expected output. * Add doc comment for function * Address review comments ncalexan. * Update function docstring to give clearer description of function. * Do not all entid at all to output. * Clean up code fetching ident (make it rustier). * Address review comments rnewman. * Extract out to new `to_edn_value` functions code for creating `edn::Value`\'s for `ValueType` and `Attribute`. * Use `map()` to create schema edn value rather than a loop. * Address review comments rnewman. * pass cloned instance of ident to `Attribute::get_edn_value`. * update `use` import for `edn`. * remove unnecessary call when using ident as key on `associate_ident`. * Fixed bug whereby we didn't differentiate between `db.index/value` and `db.index/identity` when generating `edn::Value` * Add extra assert at the end to ensure we get the same output when we convert the same schema to edn multiple times * Move check for type of uniqueness to `match` statement. * Also use `iter` instead of `into_iter` when iterating schema map.
2017-03-30 10:08:36 +00:00
lazy_static_namespaced_keyword_value!(DB_IS_COMPONENT, "db", "component");
lazy_static_namespaced_keyword_value!(DB_PART_DB, "db.part", "db");
lazy_static_namespaced_keyword_value!(DB_RETRACT, "db", "retract");
lazy_static_namespaced_keyword_value!(DB_TYPE_BOOLEAN, "db.type", "boolean");
lazy_static_namespaced_keyword_value!(DB_TYPE_DOUBLE, "db.type", "double");
lazy_static_namespaced_keyword_value!(DB_TYPE_INSTANT, "db.type", "instant");
lazy_static_namespaced_keyword_value!(DB_TYPE_KEYWORD, "db.type", "keyword");
lazy_static_namespaced_keyword_value!(DB_TYPE_LONG, "db.type", "long");
lazy_static_namespaced_keyword_value!(DB_TYPE_REF, "db.type", "ref");
lazy_static_namespaced_keyword_value!(DB_TYPE_STRING, "db.type", "string");
lazy_static_namespaced_keyword_value!(DB_TYPE_URI, "db.type", "uri");
lazy_static_namespaced_keyword_value!(DB_TYPE_UUID, "db.type", "uuid");
lazy_static_namespaced_keyword_value!(DB_UNIQUE, "db", "unique");
lazy_static_namespaced_keyword_value!(DB_UNIQUE_IDENTITY, "db.unique", "identity");
lazy_static_namespaced_keyword_value!(DB_UNIQUE_VALUE, "db.unique", "value");
lazy_static_namespaced_keyword_value!(DB_VALUE_TYPE, "db", "valueType");