-
Notifications
You must be signed in to change notification settings - Fork 5
Closed
Description
When a DynamoDB table has mixed cases, the parser throws a KeyError message.
How to reproduce: Run the following code:
import boto3
from moto import mock_aws
table_name = 'CaseSensitiveTableName'
with mock_aws() as moto:
# Initialize table
dynamodb = boto3.client('dynamodb', region_name='us-west-2')
table_obj = boto3.resource('dynamodb', region_name='us-west-2').Table(table_name)
dynamodb.create_table(
AttributeDefinitions=[
{
'AttributeName': 'pk',
'AttributeType': 'S'
},
{
'AttributeName': 'sk',
'AttributeType': 'S'
},
],
TableName=table_name,
KeySchema=[
{
'AttributeName': 'pk',
'KeyType': 'HASH'
},
{
'AttributeName': 'sk',
'KeyType': 'RANGE'
}
],
BillingMode="PAY_PER_REQUEST",
)
dynamodb.get_waiter("table_exists").wait(TableName=table_name)
# Put some data
data = [
{
"pk": "test",
"sk": "test1"
},
{
"pk": "test2",
"sk": "test2"
}
]
with table_obj.batch_writer() as writer:
for item in data:
writer.put_item(
Item=item
)
# Query
stmt = f"""SELECT *
FROM "{table_name}"
"""
response = dynamodb.execute_statement(
Statement=stmt,
ConsistentRead=False
)
print(response)
Traceback log:
...
File ".../build/venv/lib/python3.11/site-packages/py_partiql_parser/_internal/parser.py", line 108, in _parse_select
source_data = self.documents[list(from_parser.clauses.values())[0].lower()]
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
KeyError: 'casesensitivetablename'
Metadata
Metadata
Assignees
Labels
No labels