moto/moto/dynamodb2/parsing
pvbouwel 9e7803dc36
[Bugfix] UpdateExpression using ADD from zero (#2975)
When using the ADD syntax to sum up different components
the path that is provided is allowed to be non-existent.
In such a case DynamoDB will initialize it depending on
the type of the value.
If it is a number it will be initialized with 0.
If it is a set it will be initialized with an empty set.
2020-05-07 21:29:20 +01:00
..
__init__.py Better DDB expressions support1: TokenizationDDB 2020-04-18 09:16:23 +01:00
ast_nodes.py Improve DDB expressions support3: AST Validation 2020-04-19 16:58:07 +01:00
executors.py [Bugfix] UpdateExpression using ADD from zero (#2975) 2020-05-07 21:29:20 +01:00
expressions.py Improve DDB expressions support3: AST Validation 2020-04-19 16:58:07 +01:00
README.md Improve DDB expressions support3: AST Validation 2020-04-19 16:58:07 +01:00
reserved_keywords.py Better DDB expressions support2: ExpressionTree 2020-04-18 09:19:03 +01:00
reserved_keywords.txt Better DDB expressions support2: ExpressionTree 2020-04-18 09:19:03 +01:00
tokens.py Better DDB expressions support2: ExpressionTree 2020-04-18 09:19:03 +01:00
validators.py Improve DDB expressions support4: Execution using AST 2020-04-26 15:59:12 +01:00

Parsing dev documentation

Parsing happens in a structured manner and happens in different phases. This document explains these phases.

1) Expression gets parsed into a tokenlist (tokenized)

A string gets parsed from left to right and gets converted into a list of tokens. The tokens are available in tokens.py.

2) Tokenlist get transformed to expression tree (AST)

This is the parsing of the token list. This parsing will result in an Abstract Syntax Tree (AST). The different node types are available in ast_nodes.py. The AST is a representation that has all the information that is in the expression but its tree form allows processing it in a structured manner.

3) The AST gets validated (full semantic correctness)

The AST is used for validation. The paths and attributes are validated to be correct. At the end of the validation all the values will be resolved.

4) Update Expression gets executed using the validated AST

Finally the AST is used to execute the update expression. There should be no reason for this step to fail since validation has completed. Due to this we have the update expressions behaving atomically (i.e. all the actions of the update expresion are performed or none of them are performed).