)]}'
{
  "commit": "cfd3b634ab3b1ec74ddcd153a18d98113a4f9df6",
  "tree": "c8081684d90cd771be3b3a43ca66af900234a8c0",
  "parents": [
    "801417404978823bd8732452c3f7959017584785"
  ],
  "author": {
    "name": "Eeshwar Gurushankar",
    "email": "eeshwarg13@gmail.com",
    "time": "Fri Aug 14 17:24:31 2026 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Aug 14 17:24:31 2026 -0700"
  },
  "message": "Fix drop_label privilege check for non-superusers (unrecognized class ID) (#2497)\n\n* Fix drop_label privilege check for non-superusers\n\nrange_var_callback_for_remove_relation() called object_ownercheck() with\nthe wrong argument order for the PG16+ API\nobject_ownercheck(classid, objectid, roleid). It passed rel_oid as the\nclassid and a namespace OID as the objectid, so the classid lookup hit\nthe default case and raised \"unrecognized class ID\" for any\nnon-superuser dropping a graph label. Superusers were unaffected because\nobject_ownercheck() early-returns via superuser_arg().\n\nPass RelationRelationId as the classid and rel_oid as the objectid,\nmatching upstream PostgreSQL\u0027s RangeVarCallbackForDropRelation.\n\nAdd a regression test in security.sql covering a NOSUPERUSER role that\nowns a graph/label and successfully runs drop_label.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com\u003e\n\n* Make drop_label regression test output db-name independent\n\nReplace the SELECT ... \\gexec dynamic GRANT with a DO block that runs\nEXECUTE format(...) internally. The \\gexec approach echoed the expanded\nGRANT (hardcoding the regression database name) into the expected output,\nmaking the test brittle across harnesses. The DO block grants on\ncurrent_database() while emitting a deterministic \u0027DO\u0027.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com\u003e\n\n---------\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "521b76b62e86c2bca8a52ff39d55cb9a0d679843",
      "old_mode": 33188,
      "old_path": "regress/expected/security.out",
      "new_id": "c92adb1404ad4105de2277dad1d729051905195d",
      "new_mode": 33188,
      "new_path": "regress/expected/security.out"
    },
    {
      "type": "modify",
      "old_id": "65910cb5fbd5303b2a1eb7a62755b818be51593a",
      "old_mode": 33188,
      "old_path": "regress/sql/security.sql",
      "new_id": "df08bb3602049b3b7c8daff678b90ff583b2fb14",
      "new_mode": 33188,
      "new_path": "regress/sql/security.sql"
    },
    {
      "type": "modify",
      "old_id": "ac789ecce66bc0c5e5ef0d5f61cadab17fb4bfbb",
      "old_mode": 33188,
      "old_path": "src/backend/commands/label_commands.c",
      "new_id": "bc8d63dab8fd0349b8f9f6f323ee41c50bf45642",
      "new_mode": 33188,
      "new_path": "src/backend/commands/label_commands.c"
    }
  ]
}
