Skip to content

Case sensitive DynamoDB table name causes PartiQL parser to raise KeyError #23

@jliu0812

Description

@jliu0812

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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions