describe.c.patch
application/octet-stream
Filename: describe.c.patch
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
| File | + | − |
|---|---|---|
| describe_change.c | 88 | 27 |
--- describe.c 2023-06-08 08:31:12.594000000 +0000
+++ describe_change.c 2023-06-08 08:33:54.807000000 +0000
@@ -3370,33 +3370,97 @@
/* print child tables (with additional info if partitions) */
if (pset.sversion >= 140000)
printfPQExpBuffer(&buf,
- "SELECT c.oid::pg_catalog.regclass, c.relkind,"
- " inhdetachpending,"
- " pg_catalog.pg_get_expr(c.relpartbound, c.oid)\n"
- "FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i\n"
- "WHERE c.oid = i.inhrelid AND i.inhparent = '%s'\n"
- "ORDER BY pg_catalog.pg_get_expr(c.relpartbound, c.oid) = 'DEFAULT',"
- " c.oid::pg_catalog.regclass::pg_catalog.text;",
- oid);
- else if (pset.sversion >= 100000)
+ "WITH RECURSIVE partition_tree AS ( "
+ " SELECT c.oid::pg_catalog.regclass AS object_name, "
+ " c.oid,"
+ " 0 AS level,"
+ " c.relkind,"
+ " i.inhdetachpending,"
+ " pg_get_expr(c.relpartbound, c.oid) AS relpartbound,"
+ " array[c.relname::text] AS path \n"
+ " FROM pg_catalog.pg_class c \n"
+ " JOIN pg_catalog.pg_inherits i ON c.oid = i.inhrelid \n"
+ " WHERE i.inhparent ='%s' \n"
+ " UNION ALL \n"
+ " SELECT c.oid::pg_catalog.regclass AS object_name,"
+ " c.oid,"
+ " pt.level + 1 AS level,"
+ " c.relkind,"
+ " i.inhdetachpending,"
+ " pg_get_expr(c.relpartbound, c.oid) AS relpartbound,"
+ " pt.path || c.relname::text \n"
+ " FROM pg_catalog.pg_class c \n"
+ " JOIN pg_catalog.pg_inherits i ON c.oid = i.inhrelid \n"
+ " JOIN partition_tree pt ON i.inhparent = pt.oid )\n"
+ " SELECT REPEAT(E'\t', level) || object_name AS oid,"
+ " relkind,"
+ " inhdetachpending,"
+ " relpartbound as pg_get_expr \n"
+ "FROM partition_tree t \n"
+ "ORDER BY path, array_to_string(t.path || array[t.object_name::text], '.'), t.object_name, relpartbound = 'DEFAULT';",
+ oid);
+ else if (pset.sversion >= 100000)
printfPQExpBuffer(&buf,
- "SELECT c.oid::pg_catalog.regclass, c.relkind,"
- " false AS inhdetachpending,"
- " pg_catalog.pg_get_expr(c.relpartbound, c.oid)\n"
- "FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i\n"
- "WHERE c.oid = i.inhrelid AND i.inhparent = '%s'\n"
- "ORDER BY pg_catalog.pg_get_expr(c.relpartbound, c.oid) = 'DEFAULT',"
- " c.oid::pg_catalog.regclass::pg_catalog.text;",
- oid);
+ "WITH RECURSIVE partition_tree AS (\n"
+ " SELECT c.oid::pg_catalog.regclass AS partition_name,"
+ " c.oid,"
+ " 0 AS level,"
+ " c.relkind,"
+ " false AS i.inhdetachpending,"
+ " pg_catalog.pg_get_expr(c.relpartbound, c.oid) AS relpartbound"
+ " array[c.relname::text] AS path \n"
+ " FROM pg_catalog.pg_class c "
+ " JOIN pg_catalog.pg_inherits i ON c.oid = i.inhrelid\n"
+ " WHERE i.inhparent = '%s'\n"
+ " UNION ALL"
+ " SELECT c.oid::pg_catalog.regclass AS partition_name,"
+ " c.oid,"
+ " pt.level + 1 AS level,"
+ " c.relkind,"
+ " false AS i.inhdetachpending,"
+ " pg_catalog.pg_get_expr(c.relpartbound, c.oid) AS relpartbound"
+ " pt.path || c.relname::text\n"
+ " FROM pg_catalog.pg_class c"
+ " JOIN pg_catalog.pg_inherits i ON c.oid = i.inhrelid"
+ " JOIN partition_tree pt ON i.inhparent = pt.oid"
+ ")\n"
+ "SELECT REPEAT(' ', level * 4) || partition_name AS oid,"
+ " relkind,"
+ " inhdetachpending,"
+ " relpartbound as pg_get_expr\n"
+ "FROM partition_tree\n"
+ "ORDER BY partition_name::pg_catalog.text, level, relpartbound = 'DEFAULT';",
+ oid);
else
printfPQExpBuffer(&buf,
- "SELECT c.oid::pg_catalog.regclass, c.relkind,"
- " false AS inhdetachpending, NULL\n"
- "FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i\n"
- "WHERE c.oid = i.inhrelid AND i.inhparent = '%s'\n"
- "ORDER BY c.oid::pg_catalog.regclass::pg_catalog.text;",
- oid);
-
+ "WITH RECURSIVE partition_tree AS (\n"
+ " SELECT c.oid::pg_catalog.regclass AS partition_name,"
+ " c.oid,"
+ " 0 AS level,"
+ " c.relkind,"
+ " false AS i.inhdetachpending,"
+ " array[c.relname::text] AS path \n"
+ " FROM pg_catalog.pg_class c "
+ " JOIN pg_catalog.pg_inherits i ON c.oid = i.inhrelid\n"
+ " WHERE i.inhparent = '%s'\n"
+ " UNION ALL"
+ " SELECT c.oid::pg_catalog.regclass AS partition_name,"
+ " c.oid,"
+ " pt.level + 1 AS level,"
+ " c.relkind,"
+ " false AS i.inhdetachpending,"
+ " pt.path || c.relname::text\n"
+ " FROM pg_catalog.pg_class c"
+ " JOIN pg_catalog.pg_inherits i ON c.oid = i.inhrelid"
+ " JOIN partition_tree pt ON i.inhparent = pt.oid"
+ ")\n"
+ "SELECT REPEAT(' ', level * 4) || partition_name AS oid,"
+ " relkind,"
+ " inhdetachpending,"
+ " NULL\n"
+ "FROM partition_tree\n"
+ "ORDER BY partition_name::pg_catalog.text, level, relpartbound = 'DEFAULT';",
+ oid);
result = PSQLexec(buf.data);
if (!result)
goto error_return;
@@ -3443,9 +3507,6 @@
ctw, "", PQgetvalue(result, i, 0));
if (!PQgetisnull(result, i, 3))
appendPQExpBuffer(&buf, " %s", PQgetvalue(result, i, 3));
- if (child_relkind == RELKIND_PARTITIONED_TABLE ||
- child_relkind == RELKIND_PARTITIONED_INDEX)
- appendPQExpBufferStr(&buf, ", PARTITIONED");
if (strcmp(PQgetvalue(result, i, 2), "t") == 0)
appendPQExpBufferStr(&buf, " (DETACH PENDING)");
if (i < tuples - 1)