diff --git a/ddlparse/ddlparse.py b/ddlparse/ddlparse.py index 930e670..56673f0 100644 --- a/ddlparse/ddlparse.py +++ b/ddlparse/ddlparse.py @@ -596,9 +596,12 @@ class DdlParse(DdlParseBase): _COMMENT = Suppress("--" + Regex(r".+")) + _schema_chars = alphanums + "_" + _SCHEMA = (_SUPPRESS_QUOTE + Word(_schema_chars + ".")("schema") + _SUPPRESS_QUOTE) \ + | (Optional(_SUPPRESS_QUOTE) + Word(_schema_chars)("schema") + Optional(_SUPPRESS_QUOTE)) _CREATE_TABLE_STATEMENT = Suppress(_CREATE) + Optional(_TEMP)("temp") + Suppress(_TABLE) + Optional(Suppress(CaselessKeyword("IF NOT EXISTS"))) \ - + Optional(_SUPPRESS_QUOTE) + Optional(Word(alphanums + "_")("schema") + Optional(_SUPPRESS_QUOTE) + _DOT + Optional(_SUPPRESS_QUOTE)) + Word(alphanums + "_<>")("table") + Optional(_SUPPRESS_QUOTE) \ + + Optional(_SCHEMA + _DOT) + Optional(_SUPPRESS_QUOTE) + Word(alphanums + "_<>")("table") + Optional(_SUPPRESS_QUOTE) \ + _LPAR \ + delimitedList( OneOrMore( diff --git a/test/test_ddlparse.py b/test/test_ddlparse.py index 086a2a3..00dfff7 100644 --- a/test/test_ddlparse.py +++ b/test/test_ddlparse.py @@ -1365,3 +1365,12 @@ def test_constraint_compatibility(): assert dl_col.primary_key is True assert dl_col.unique is False assert dl_col.comment == 'foo' + + +def test_ddl_with_dot_schema(): + ddl = """ + create table "foo.bar"."bazz" ( id int ); + """ + table = DdlParse(ddl).parse() + assert table.schema == "foo.bar" + assert table.name == "bazz"