Commit graph

133 commits

Author SHA1 Message Date
Steve Pulec
dbeb16d9b9
Merge pull request #2823 from bblommers/bug/2797
DynamoDB - Allow case insensitive AND in KeyConditionExpression
2020-04-25 18:35:51 -05:00
Dmitry Ryzhikov
e866df9b9d Merge branch 'master' into fix/table-filter-value-error 2020-04-22 20:08:05 +03:00
Dmitry Ryzhikov
ed5e0b586c Handle ValueError raised on missing table name 2020-04-20 00:15:00 +03:00
pvbouwel
fc4d88401d Improve DDB expressions support3: AST Validation
Part of structured approach for UpdateExpressions:
 1) Expression gets parsed into a tokenlist (tokenized)
 2) Tokenlist get transformed to expression tree (AST)
 3) The AST gets validated (full semantic correctness) -> this commit
 4) AST gets processed to perform the update

This commit uses the AST to perform validation.  Validation makes sure the
nodes encounterd have valid values and they will also resolve values for
references that refer to item state or values passed into the expression.
2020-04-19 16:58:07 +01:00
pvbouwel
9ed613e197 Better DDB expressions support2: ExpressionTree
Part of structured approach for UpdateExpressions:
 1) Expression gets parsed into a tokenlist (tokenized)
 2) Tokenlist get transformed to expression tree (AST) -> This commit
 3) The AST gets validated (full semantic correctness)
 4) AST gets processed to perform the update

This commit uses the tokenlist to build an expression tree. This tree is not
yet used. Still it allows to raise additional Validation Exceptions which
previously were missed silently therefore it allows tests to catch these type of
ValidationException. For that reason DDB UpdateExpressions will be parsed
already. It also makes sure we won't break existing tests.

One of the existing tests had to be changed in order to still pass:
 - test_dynamodb_table_with_range_key.test_update_item_with_expression

This test passed in a numeric literal which is not supported by DynamoDB
and with the current tokenization it would get the same error as in AWS
DynamoDB.
2020-04-18 09:19:03 +01:00
pvbouwel
7ea419dd54 Better DDB expressions support1: TokenizationDDB
Currently the mock for DynamoDB has adhoc code to implement
its updateExpression functionality.  This series will
transform the logic such that Update Expressions are processed
as follows:
 1) Expression gets parsed into a tokenlist (tokenized) -> This commit
 2) Tokenlist get transformed to expression tree (AST)
 3) The AST gets validated (full semantic correctness)
 4) AST gets processed to perform the update

This alows for a more realistic mocking. It will throw exceptions much
more aggressively avoiding situations where a test passes against the
mock but fails with an exception when running against AWS.

Introduction of step 3 also allows to have the update expression as an
atomic unit of work. So updates at the start of the expression cannot
be performed if there is an error further down the expression.

This specific commit will tokenize expressions but the tokenlist is not
yet used. It is purely to keep clear boundaries.  It does do a minor
refactoring of the exceptions to allow more re-use and to ease testing.

This series of changes is to aid providing a long-term solution for
https://github.com/spulec/moto/issues/2806.
2020-04-18 09:16:23 +01:00
pvbouwel
4be97916bf Allow reuse of components packed in models.py
By having models.py as one big file it causes to
easily create circular dependencies. With the current
setup it is not possible to re-use DynamoType. This
refactor moves it out to its own file while trying to
keep the structure as much as it is.
2020-04-12 20:05:35 +01:00
Andrea Amorosi
349b381390 Fixed dynamodb2 put_item ValidationException 2020-03-28 17:59:42 +00:00
Bert Blommers
b1da99aeda #2797 - DynamoDB - Allow case insensitive AND in KeyConditionExpression 2020-03-20 12:29:04 +00:00
Bert Blommers
71bf314a0f
Merge pull request #2799 from ImFlog/fix_dynamodb_updated_new
Fix UPDATED_NEW return values differences
2020-03-18 08:21:01 +00:00
Steve Pulec
77b1cc2321
Merge pull request #2809 from bblommers/feature/dynamodb-transact-get-items
Feature - DynamoDB: transact_get_items
2020-03-15 16:45:03 -05:00
ImFlog
7f6c6660aa Add some new update_new tests 2020-03-13 09:37:50 +01:00
Bert Blommers
71d3941daf Linting 2020-03-12 14:26:23 +00:00
Bert Blommers
caebe222d7 DynamoDB - Transact_get_items - Remove error condition 2020-03-12 14:24:53 +00:00
Tomoya Iwata
5a7da61833 remove unused local variable 2020-03-12 14:15:31 +00:00
Tomoya Iwata
b74625db0c add support for dynamodb transact_get_items 2020-03-12 14:15:13 +00:00
ImFlog
ba1bf09474 Fix UPDATED_NEW return values differences between moto and dynamoDB 2020-03-10 18:22:54 +01:00
Bert Blommers
6ba00d9ad1 #1054 - DynamoDB - Improve error handling for put_item without keys 2020-03-10 13:25:40 +00:00
Nikita Antonenkov
d4caf14b61 Fixed UnboundLocalError in dynamodb2.query when no filters are passed 2020-02-07 23:39:31 +01:00
Ilya Shmygol
704a12146b Improve error reporting for missing index 2019-12-12 10:49:07 +01:00
Ilya Shmygol
1d0de934e5 Slightly reformat the solution 2019-12-11 15:06:49 +01:00
Ilya Shmygol
6ea60012fc Improve parsing DynamoDB begins_with expression
A query fails if it has a space between `begins_with` and `(`,
for example: ```begins_with (#1, :1)```

Fix #1996
2019-11-21 13:03:44 +01:00
Bert Blommers
eaa23800bd Linting 2019-11-03 07:33:27 -08:00
Bert Blommers
6a601d7d5c #2527 - DynamoDB - Allow nested attributes in ProjectionExpressions 2019-11-03 14:09:27 +00:00
Asher Foa
96e5b1993d Run black on moto & test directories. 2019-10-31 10:36:05 -07:00
Bert Blommers
db206e994b #250 - DynamoDB - Add check for valid query keyconditionexpression 2019-10-18 09:58:09 +01:00
Bert Blommers
009a97db85 Merge branch 'master' into bugfix/1823 2019-10-14 10:02:22 +01:00
Mike Grima
893f0d4f83
Merge pull request #2463 from gruebel/fix-dynamodb-get-item-ProjectionExpression
Add ProjectionExpression & ExpressionAttributeNames to DynamoDB get_it…
2019-10-13 10:47:25 -07:00
gruebel
97c4174f30 Extract projection_expression adjustment 2019-10-11 14:30:25 +02:00
Bert Blommers
afb8f71e9f #1822 - DynamoDB: Add List index operations 2019-10-09 17:30:42 +01:00
Bert Blommers
1fb844972f Merge branch 'master' into bugfix/1874 2019-10-09 08:33:53 +01:00
gruebel
cb43796daf Add ProjectionExpression & ExpressionAttributeNames o DynamoDB get_item & batch_get_item 2019-10-08 22:30:14 +02:00
gruebel
c9d69681ec Add evaluation of ConditionExpression to DynamoDB2 delete_item 2019-10-06 16:49:02 +02:00
Bert Blommers
dc89b47b40 #1874 - Count item size based on contents of actual dictionary 2019-10-06 14:08:58 +01:00
Bert Blommers
4dec187d80 #1834 - Check item size in DynamoDB 2019-10-05 15:20:43 +01:00
Mike Grima
60183b29c1
Merge pull request #2447 from bblommers/bugfix/2445
#2445 - DynamoDB - Add validation for AttributeDefinitions
2019-10-03 11:52:29 -07:00
Bert Blommers
6005b19ac2 #2445 - DynamoDB - Add validation for AttributeDefinitions 2019-10-03 10:54:10 +01:00
Julian Graham
f4df7a48ee Prevent overlapping expr name prefixes from corrupting projection expr
h/t @beheh. This patch handles the case when ProjectionExpression looks
like "#1, ..., #10" - the previous code used `replace`, which would make
the resulting projection into "foo, ..., foo0".
2019-09-09 19:08:16 -04:00
Bert Blommers
956592d615 2380 - Validate parameter-list for duplicates in dynamodb.batch_get_item 2019-08-22 16:12:48 +01:00
aksagrimada
a3794f2701
Resolve invalid escape sequence
When run not as a decorator dynamodb2 displays an invalid escape sequence error
/moto/dynamodb2/responses.py:603: DeprecationWarning: invalid escape sequence \s
  '\s*([=\+-])\s*', '\\1', update_expression)
2019-08-06 07:16:00 +01:00
Steve Pulec
12aa5dddf7
Merge pull request #2289 from spulec/fix-2275
Fix for UpdateExpression with newline. Closes #2275.
2019-07-09 19:58:32 -05:00
Steve Pulec
6a13d54616
Merge pull request #2266 from garrettheel/feat/dynamodb-expressions
Improve DynamoDB condition expression support
2019-07-09 18:22:55 -05:00
Steve Pulec
53f8997d62 Fix for UpdateExpression with newline. Closes #2275. 2019-07-09 18:21:00 -05:00
Garrett Heel
ba95c945f9 remove dead code 2019-07-09 09:20:35 -04:00
Jack Danger
f6dd3ab959
not requiring the provisioned throughput key (#2278) 2019-07-04 03:13:25 -07:00
IVIURRAY
4ce0e6bbcb add extra test for ProjectionExpression using scan with ExpressionAttributes 2019-06-27 19:37:46 +01:00
Matthew Stevens
57b668c832 Using Ops for dynamodb condition expressions 2019-06-26 23:20:55 +01:00
IVIURRAY
e50ce7287d ProjectionExpression works with table.scan() 2019-06-26 21:54:48 +01:00
cm-iwata
9bf8fd3417 fix #2011 (#2012)
add support for Scan method using LSI or GSI
2019-05-21 17:45:30 +01:00
shiba24
b822db8d8c Support create_table with PAY_PER_REQUEST billing mode of DynamoDB 2019-04-30 22:36:25 +09:00