Skip to content

Commit

Permalink
fix: Workaround for sqlparse issue apache#652 (apache#17995)
Browse files Browse the repository at this point in the history
* fix: Workaround for sqlparse issue apache#652

* Update superset/sql_parse.py

Co-authored-by: Ville Brofeldt <[email protected]>

* Update sql_parse.py

Co-authored-by: John Bodley <[email protected]>
Co-authored-by: Ville Brofeldt <[email protected]>
  • Loading branch information
3 people authored Jan 12, 2022
1 parent ce614ea commit 63ca09e
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 0 deletions.
11 changes: 11 additions & 0 deletions superset/sql_parse.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
# specific language governing permissions and limitations
# under the License.
import logging
import re
from dataclasses import dataclass
from enum import Enum
from typing import List, Optional, Set
Expand All @@ -41,6 +42,16 @@
logger = logging.getLogger(__name__)


# TODO: Workaround for https://github.com/andialbrecht/sqlparse/issues/652.
sqlparse.keywords.SQL_REGEX.insert(
0,
(
re.compile(r"'(''|\\\\|\\|[^'])*'", sqlparse.keywords.FLAGS).match,
sqlparse.tokens.String.Single,
),
)


class CtasMethod(str, Enum):
TABLE = "TABLE"
VIEW = "VIEW"
Expand Down
6 changes: 6 additions & 0 deletions tests/unit_tests/sql_parse_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -1199,3 +1199,9 @@ def test_validate_filter_clause_comment():
def test_validate_filter_clause_subquery_comment():
with pytest.raises(QueryClauseValidationException):
validate_filter_clause("(1 = 1 -- comment\n)")


def test_sqlparse_issue_652():
stmt = sqlparse.parse(r"foo = '\' AND bar = 'baz'")[0]
assert len(stmt.tokens) == 5
assert str(stmt.tokens[0]) == "foo = '\\'"

0 comments on commit 63ca09e

Please sign in to comment.