diff --git a/dissect/database/sqlite3/util.py b/dissect/database/sqlite3/util.py index a589b5c..1e20ff8 100644 --- a/dissect/database/sqlite3/util.py +++ b/dissect/database/sqlite3/util.py @@ -134,11 +134,9 @@ def get_primary_key_from_constraint(column_type_constraint: str, column_def: str ) matched_group = primary_key_sql.groups()[0] primary_key_defs = list(split_sql_list(matched_group)) - # We only handle single primary keys, no compound keys or - # expressions, so a single entry in the list consisting of a single - # part. + # We only handle single primary keys, no compound keys or expressions, so a single entry in the list consisting of + # a single part. For example we parse ``id`` as a primary_key in the constraint ``PRIMARY KEY("id" AUTOINCREMENT)``. if len(primary_key_defs) == 1: primary_key_parts = primary_key_defs[0].split(maxsplit=1) - if len(primary_key_parts) == 1: - primary_key = primary_key_parts[0] + primary_key = primary_key_parts[0].strip("'\"") return primary_key diff --git a/tests/sqlite3/test_util.py b/tests/sqlite3/test_util.py index eb083d5..50da300 100644 --- a/tests/sqlite3/test_util.py +++ b/tests/sqlite3/test_util.py @@ -155,6 +155,21 @@ ), id="create-table-firefox-foreign-in-column-name", ), + # Primary key constraint with multiple parts, but not a compound/composite constraint. + pytest.param( + 'CREATE TABLE "example"("foo" INTEGER, "bar" TEXT NOT NULL, PRIMARY KEY("foo" AUTOINCREMENT))', + ( + "foo", + [ + ("foo", "INTEGER"), + ("bar", "TEXT NOT NULL"), + ], + [ + 'PRIMARY KEY("foo" AUTOINCREMENT)', + ], + ), + id="primary-key-constraint-multiple-parts", + ), ]