See #9.
PROGRAM = pg_filedump
OBJS = pg_filedump.o decode.o stringinfo.o
-REGRESS = datatypes float numeric
+REGRESS = datatypes float numeric xml
EXTRA_CLEAN = *.heap
PG_CONFIG = pg_config
COPY: \N
-*** End of File Encountered. Last Block Read: 0 ***
---
-----------------------------------------------------------------------------------------------
---
-create table xml (x xml);
-insert into xml values ('<xml></xml>'), (null);
-\set relname xml
-\ir run_test.sql
-\echo Testing :relname
-Testing xml
-vacuum :"relname";
-checkpoint;
-select relfilenode from pg_class where relname = :'relname' \gset
-select lo_import(format('base/%s/%s', :'datoid', :'relfilenode')) as oid \gset
-\set output :relname '.heap'
-\lo_export :oid :output
-\setenv relname :relname
-\! pg_filedump -D $relname $relname.heap | sed -e "s/logid ./logid ./" -e "s/recoff 0x......../recoff 0x......../"
-
-*******************************************************************
-* PostgreSQL File/Block Formatted Dump Utility
-*
-* File: xml.heap
-* Options used: -D xml
-*******************************************************************
-
-Block 0 ********************************************************
-<Header> -----
- Block Offset: 0x00000000 Offsets: Lower 32 (0x0020)
- Block: Size 8192 Version 4 Upper 8128 (0x1fc0)
- LSN: logid . recoff 0x........ Special 8192 (0x2000)
- Items: 2 Free Space: 8096
- Checksum: 0x0000 Prune XID: 0x00000000 Flags: 0x0004 (ALL_VISIBLE)
- Length (including item array): 32
-
-<Data> -----
- Item 1 -- Length: 36 Offset: 8152 (0x1fd8) Flags: NORMAL
-COPY: <xml></xml>
- Item 2 -- Length: 24 Offset: 8128 (0x1fc0) Flags: NORMAL
-COPY: \N
-
-
*** End of File Encountered. Last Block Read: 0 ***
--
----------------------------------------------------------------------------------------------
COPY: \N
-*** End of File Encountered. Last Block Read: 0 ***
---
-----------------------------------------------------------------------------------------------
---
-create table xml (x xml);
-insert into xml values ('<xml></xml>'), (null);
-\set relname xml
-\ir run_test.sql
-\echo Testing :relname
-Testing xml
-vacuum :"relname";
-checkpoint;
-select relfilenode from pg_class where relname = :'relname' \gset
-select lo_import(format('base/%s/%s', :'datoid', :'relfilenode')) as oid \gset
-\set output :relname '.heap'
-\lo_export :oid :output
-\setenv relname :relname
-\! pg_filedump -D $relname $relname.heap | sed -e "s/logid ./logid ./" -e "s/recoff 0x......../recoff 0x......../"
-
-*******************************************************************
-* PostgreSQL File/Block Formatted Dump Utility
-*
-* File: xml.heap
-* Options used: -D xml
-*******************************************************************
-
-Block 0 ********************************************************
-<Header> -----
- Block Offset: 0x00000000 Offsets: Lower 32 (0x0020)
- Block: Size 8192 Version 4 Upper 8132 (0x1fc4)
- LSN: logid . recoff 0x........ Special 8192 (0x2000)
- Items: 2 Free Space: 8100
- Checksum: 0x0000 Prune XID: 0x00000000 Flags: 0x0004 (ALL_VISIBLE)
- Length (including item array): 32
-
-<Data> -----
- Item 1 -- Length: 36 Offset: 8156 (0x1fdc) Flags: NORMAL
-COPY: <xml></xml>
- Item 2 -- Length: 24 Offset: 8132 (0x1fc4) Flags: NORMAL
-COPY: \N
-
-
*** End of File Encountered. Last Block Read: 0 ***
--
----------------------------------------------------------------------------------------------
--- /dev/null
+-- 64 bit output in *.out, 32 bit output in *_3.out
+-- server without --with-libxml support output in *_1.out
+select oid as datoid from pg_database where datname = current_database() \gset
+----------------------------------------------------------------------------------------------
+create table xml (x xml);
+insert into xml values ('<xml></xml>'), (null);
+\set relname xml
+\ir run_test.sql
+\echo Testing :relname
+Testing xml
+vacuum :"relname";
+checkpoint;
+select relfilenode from pg_class where relname = :'relname' \gset
+select lo_import(format('base/%s/%s', :'datoid', :'relfilenode')) as oid \gset
+\set output :relname '.heap'
+\lo_export :oid :output
+\setenv relname :relname
+\! pg_filedump -D $relname $relname.heap | sed -e "s/logid ./logid ./" -e "s/recoff 0x......../recoff 0x......../"
+
+*******************************************************************
+* PostgreSQL File/Block Formatted Dump Utility
+*
+* File: xml.heap
+* Options used: -D xml
+*******************************************************************
+
+Block 0 ********************************************************
+<Header> -----
+ Block Offset: 0x00000000 Offsets: Lower 32 (0x0020)
+ Block: Size 8192 Version 4 Upper 8128 (0x1fc0)
+ LSN: logid . recoff 0x........ Special 8192 (0x2000)
+ Items: 2 Free Space: 8096
+ Checksum: 0x0000 Prune XID: 0x00000000 Flags: 0x0004 (ALL_VISIBLE)
+ Length (including item array): 32
+
+<Data> -----
+ Item 1 -- Length: 36 Offset: 8152 (0x1fd8) Flags: NORMAL
+COPY: <xml></xml>
+ Item 2 -- Length: 24 Offset: 8128 (0x1fc0) Flags: NORMAL
+COPY: \N
+
+
+*** End of File Encountered. Last Block Read: 0 ***
+--
+----------------------------------------------------------------------------------------------
+--
--- /dev/null
+-- 64 bit output in *.out, 32 bit output in *_3.out
+-- server without --with-libxml support output in *_1.out
+select oid as datoid from pg_database where datname = current_database() \gset
+----------------------------------------------------------------------------------------------
+create table xml (x xml);
+insert into xml values ('<xml></xml>'), (null);
+ERROR: unsupported XML feature
+LINE 1: insert into xml values ('<xml></xml>'), (null);
+ ^
+DETAIL: This functionality requires the server to be built with libxml support.
+HINT: You need to rebuild PostgreSQL using --with-libxml.
+\set relname xml
+\ir run_test.sql
+\echo Testing :relname
+Testing xml
+vacuum :"relname";
+checkpoint;
+select relfilenode from pg_class where relname = :'relname' \gset
+select lo_import(format('base/%s/%s', :'datoid', :'relfilenode')) as oid \gset
+\set output :relname '.heap'
+\lo_export :oid :output
+\setenv relname :relname
+\! pg_filedump -D $relname $relname.heap | sed -e "s/logid ./logid ./" -e "s/recoff 0x......../recoff 0x......../"
+
+*******************************************************************
+* PostgreSQL File/Block Formatted Dump Utility
+*
+* File: xml.heap
+* Options used: -D xml
+*******************************************************************
+Error: Unable to read full page header from block 0.
+ ===> Read 0 bytes
+Notice: Block size determined from reading block 0 is zero, using default 8192 instead.
+Hint: Use -S <size> to specify the size manually.
+Error: Premature end of file encountered.
+--
+----------------------------------------------------------------------------------------------
+--
--- /dev/null
+-- 64 bit output in *.out, 32 bit output in *_3.out
+-- server without --with-libxml support output in *_1.out
+select oid as datoid from pg_database where datname = current_database() \gset
+----------------------------------------------------------------------------------------------
+create table xml (x xml);
+insert into xml values ('<xml></xml>'), (null);
+\set relname xml
+\ir run_test.sql
+\echo Testing :relname
+Testing xml
+vacuum :"relname";
+checkpoint;
+select relfilenode from pg_class where relname = :'relname' \gset
+select lo_import(format('base/%s/%s', :'datoid', :'relfilenode')) as oid \gset
+\set output :relname '.heap'
+\lo_export :oid :output
+\setenv relname :relname
+\! pg_filedump -D $relname $relname.heap | sed -e "s/logid ./logid ./" -e "s/recoff 0x......../recoff 0x......../"
+
+*******************************************************************
+* PostgreSQL File/Block Formatted Dump Utility
+*
+* File: xml.heap
+* Options used: -D xml
+*******************************************************************
+
+Block 0 ********************************************************
+<Header> -----
+ Block Offset: 0x00000000 Offsets: Lower 32 (0x0020)
+ Block: Size 8192 Version 4 Upper 8132 (0x1fc4)
+ LSN: logid . recoff 0x........ Special 8192 (0x2000)
+ Items: 2 Free Space: 8100
+ Checksum: 0x0000 Prune XID: 0x00000000 Flags: 0x0004 (ALL_VISIBLE)
+ Length (including item array): 32
+
+<Data> -----
+ Item 1 -- Length: 36 Offset: 8156 (0x1fdc) Flags: NORMAL
+COPY: <xml></xml>
+ Item 2 -- Length: 24 Offset: 8132 (0x1fc4) Flags: NORMAL
+COPY: \N
+
+
+*** End of File Encountered. Last Block Read: 0 ***
+--
+----------------------------------------------------------------------------------------------
+--
insert into xid values ('-1'), ('0'), ('1'), (null);
\set relname xid
\ir run_test.sql
-
-create table xml (x xml);
-insert into xml values ('<xml></xml>'), (null);
-\set relname xml
-\ir run_test.sql
--- /dev/null
+-- 64 bit output in *.out, 32 bit output in *_3.out
+-- server without --with-libxml support output in *_1.out
+
+select oid as datoid from pg_database where datname = current_database() \gset
+
+----------------------------------------------------------------------------------------------
+
+create table xml (x xml);
+insert into xml values ('<xml></xml>'), (null);
+\set relname xml
+\ir run_test.sql