Avoid pointless allocations for DDL operations

next
Sayan Nandan 2 years ago
parent 70754cbb4d
commit a84bb28a6a
No known key found for this signature in database
GPG Key ID: 8BC07A0A4D41DD52

@ -133,7 +133,7 @@ impl FieldProperties {
#[derive(Debug, PartialEq)]
/// A field definition
pub struct Field {
pub(super) field_name: Box<str>,
pub(super) field_name: RawSlice,
pub(super) layers: Vec<Layer>,
pub(super) props: HashSet<StaticStr>,
}
@ -141,20 +141,20 @@ pub struct Field {
#[derive(Debug, PartialEq)]
/// A model definition
pub struct Model {
pub(super) model_name: Box<str>,
pub(super) model_name: RawSlice,
pub(super) fields: Vec<Field>,
pub(super) props: Dict,
}
#[derive(Debug, PartialEq)]
pub struct Space {
pub(super) space_name: Box<str>,
pub(super) space_name: RawSlice,
pub(super) props: Dict,
}
#[derive(Debug, PartialEq)]
pub struct AlterSpace {
pub(super) space_name: Box<str>,
pub(super) space_name: RawSlice,
pub(super) updated_props: Dict,
}
@ -588,7 +588,7 @@ pub(super) fn parse_field(tok: &[Token]) -> LangResult<(usize, Field)> {
// field name
let field_name = match (&tok[i], &tok[i + 1]) {
(Token::Ident(id), Token::Symbol(Symbol::SymColon)) => unsafe { id.as_str() },
(Token::Ident(id), Token::Symbol(Symbol::SymColon)) => id,
_ => return Err(LangError::UnexpectedToken),
};
i += 2;
@ -603,7 +603,7 @@ pub(super) fn parse_field(tok: &[Token]) -> LangResult<(usize, Field)> {
Ok((
i,
Field {
field_name: field_name.into(),
field_name: field_name.clone(),
layers,
props: props.properties,
},
@ -633,7 +633,6 @@ pub(super) fn parse_schema_from_tokens(
tok: &[Token],
model_name: RawSlice,
) -> LangResult<(Model, usize)> {
let model_name = unsafe { model_name.as_str() };
// parse fields
let l = tok.len();
let mut i = 0;
@ -697,7 +696,7 @@ pub(super) fn parse_schema_from_tokens(
// sweet, so we got our dict
Ok((
Model {
model_name: model_name.into(),
model_name,
props: dict,
fields,
},
@ -710,7 +709,7 @@ pub(super) fn parse_schema_from_tokens(
// we've reached end of stream, so there's nothing more to parse
Ok((
Model {
model_name: model_name.into(),
model_name,
props: dict! {},
fields,
},
@ -721,8 +720,6 @@ pub(super) fn parse_schema_from_tokens(
#[inline(always)]
pub(super) fn parse_space_from_tokens(tok: &[Token], s: RawSlice) -> LangResult<(Space, usize)> {
let space_name = unsafe { s.as_str() };
// let's see if the cursor is at `with`. ignore other tokens because that's fine
if !tok.is_empty() && tok[0] == (Token::Keyword(Keyword::DdlMisc(DdlMiscKeyword::With))) {
// we have a dict
@ -731,7 +728,7 @@ pub(super) fn parse_space_from_tokens(tok: &[Token], s: RawSlice) -> LangResult<
if ret & HIBIT == HIBIT {
Ok((
Space {
space_name: space_name.into(),
space_name: s,
props: d,
},
(ret & !HIBIT) as _,
@ -742,7 +739,7 @@ pub(super) fn parse_space_from_tokens(tok: &[Token], s: RawSlice) -> LangResult<
} else {
Ok((
Space {
space_name: space_name.into(),
space_name: s,
props: dict! {},
},
0,
@ -774,7 +771,7 @@ pub(super) fn parse_alter_space_from_tokens(
if ret & HIBIT == HIBIT {
Ok((
AlterSpace {
space_name: unsafe { space_name.as_str() }.into(),
space_name,
updated_props: d,
},
i,
@ -796,7 +793,7 @@ states! {
#[derive(Debug, PartialEq)]
pub(super) struct ExpandedField {
pub(super) field_name: Box<str>,
pub(super) field_name: RawSlice,
pub(super) props: Dict,
pub(super) layers: Vec<Layer>,
}
@ -813,7 +810,7 @@ pub(super) fn parse_field_syntax(tok: &[Token]) -> LangResult<(ExpandedField, us
match (&tok[i], state) {
(Token::Ident(field), FieldSyntaxParseState::IDENT) => {
i += 1;
tmp = MaybeUninit::new(field);
tmp = MaybeUninit::new(field.clone());
// expect open brace
state = FieldSyntaxParseState::OB;
}
@ -859,7 +856,7 @@ pub(super) fn parse_field_syntax(tok: &[Token]) -> LangResult<(ExpandedField, us
if okay {
Ok((
ExpandedField {
field_name: unsafe { tmp.assume_init().as_str() }.into(),
field_name: unsafe { tmp.assume_init() },
layers,
props,
},

Loading…
Cancel
Save