diff --git a/.github/workflows/run-test.yaml b/.github/workflows/run-test.yaml index 6fe25e0..2b6b105 100644 --- a/.github/workflows/run-test.yaml +++ b/.github/workflows/run-test.yaml @@ -83,6 +83,6 @@ jobs: with: fetch-depth: 0 - name: SonarCloud Scan - uses: SonarSource/sonarqube-scan-action@v4.1.0 + uses: SonarSource/sonarqube-scan-action@v5.1.0 env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} \ No newline at end of file diff --git a/pydynamodb/sql/common.py b/pydynamodb/sql/common.py index ab57c03..3c81041 100644 --- a/pydynamodb/sql/common.py +++ b/pydynamodb/sql/common.py @@ -225,12 +225,12 @@ class Tokens: # Common token definition TABLE_NAME = ( Opt(KeyWords.SUPPRESS_QUOTE) - + Word(alphanums + "-_<>")("table").set_name("table") + + Word(alphanums + "-_.")("table").set_name("table") + Opt(KeyWords.SUPPRESS_QUOTE) ) ATTRIBUTE_NAME = ( Opt(KeyWords.SUPPRESS_QUOTE) - + Word(alphanums + "-_")("attribute_name").set_name("attribute_name") + + Word(alphanums + "-_.")("attribute_name").set_name("attribute_name") + Opt(KeyWords.SUPPRESS_QUOTE) ) DATA_TYPE = one_of("NUMERIC STRING BINARY", caseless=True)("data_type").set_name( @@ -244,7 +244,7 @@ class Tokens: ).set_name("key_type") INDEX_NAME = ( Opt(KeyWords.SUPPRESS_QUOTE) - + Word(alphanums + "_")("index_name").set_name("index_name") + + Word(alphanums + "-_.")("index_name").set_name("index_name") + Opt(KeyWords.SUPPRESS_QUOTE) ) INDEX_TYPE = one_of("GLOBAL LOCAL", caseless=True)("index_type").set_name( diff --git a/tests/test_dml_select.py b/tests/test_dml_select.py index 05c4e48..fe20669 100644 --- a/tests/test_dml_select.py +++ b/tests/test_dml_select.py @@ -20,7 +20,7 @@ def test_parse_simple_case_1(self): SELECT * FROM Issues.CreateDateIndex """ ret = SQLParser(sql).transform() - assert ret == {"Statement": 'SELECT * FROM "Issues"."CreateDateIndex"'} + assert ret == {"Statement": 'SELECT * FROM "Issues.CreateDateIndex"'} sql = """ SELECT * FROM "Issues"."CreateDateIndex" @@ -339,3 +339,16 @@ def test_parse_partiql_functions(self): assert parser.parser.where_conditions[6] == "size('Title') <= 20" assert parser.parser.where_conditions[7] == "AND" assert parser.parser.where_conditions[8] == "CreatedDate IS MISSING" + + def test_parse_dot_in_table_name(self): + sql = """ + SELECT * FROM "Pub.Issues"."CreateDateIndex" + """ + ret = SQLParser(sql).transform() + assert ret == {"Statement": 'SELECT * FROM "Pub.Issues"."CreateDateIndex"'} + + sql = """ + SELECT att1, att2 FROM "This.Pub.Issues"."Index.CreateDateIndex" + """ + ret = SQLParser(sql).transform() + assert ret == {"Statement": 'SELECT att1,att2 FROM "This.Pub.Issues"."Index.CreateDateIndex"'} \ No newline at end of file