Podlog language v1 (#225)
* Initial commit for Podlog language * Spell-checker thinks that 'lits' is a bad abbreviation for 'literals' * Enable SetContains/SetNotContains * Update language based on review feedback * Typo/comment fix * Make native predicates case-sensitive * Enforce max batch size in CustomPredicateBatchBuilder * Remove some unnecessary checks for things handled by the grammar * Clean up more unnecessary error-checking * Typo * Simplify hex processing * Replace various errors with unreachable!() * Translate from big-endian hex string to little-endian RawValue * Update hex en/decoding functions
This commit is contained in:
parent
e8edbbc1c5
commit
541c264586
11 changed files with 2259 additions and 29 deletions
|
|
@ -31,7 +31,7 @@ pub fn key(s: &str) -> KeyOrWildcardStr {
|
|||
}
|
||||
|
||||
/// Builder Argument for the StatementTmplBuilder
|
||||
#[derive(Clone)]
|
||||
#[derive(Clone, Debug)]
|
||||
pub enum BuilderArg {
|
||||
Literal(Value),
|
||||
/// Key: (origin, key), where origin is SELF or Wildcard and key is Key or Wildcard
|
||||
|
|
@ -79,8 +79,8 @@ pub fn literal(v: impl Into<Value>) -> BuilderArg {
|
|||
|
||||
#[derive(Clone)]
|
||||
pub struct StatementTmplBuilder {
|
||||
predicate: Predicate,
|
||||
args: Vec<BuilderArg>,
|
||||
pub(crate) predicate: Predicate,
|
||||
pub(crate) args: Vec<BuilderArg>,
|
||||
}
|
||||
|
||||
impl StatementTmplBuilder {
|
||||
|
|
@ -98,7 +98,7 @@ impl StatementTmplBuilder {
|
|||
|
||||
/// Desugar the predicate to a simpler form
|
||||
/// Should mirror the logic in `MainPodBuilder::lower_op`
|
||||
fn desugar(self) -> StatementTmplBuilder {
|
||||
pub(crate) fn desugar(self) -> StatementTmplBuilder {
|
||||
match self.predicate {
|
||||
Predicate::Native(NativePredicate::Gt) => {
|
||||
let mut stb = StatementTmplBuilder {
|
||||
|
|
@ -184,6 +184,14 @@ impl CustomPredicateBatchBuilder {
|
|||
priv_args: &[&str],
|
||||
sts: &[StatementTmplBuilder],
|
||||
) -> Result<Predicate> {
|
||||
if self.predicates.len() >= self.params.max_custom_batch_size {
|
||||
return Err(Error::max_length(
|
||||
"self.predicates.len".to_string(),
|
||||
self.predicates.len(),
|
||||
self.params.max_custom_batch_size,
|
||||
));
|
||||
}
|
||||
|
||||
if args.len() > self.params.max_statement_args {
|
||||
return Err(Error::max_length(
|
||||
"args.len".to_string(),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue