From: | Garfield Lewis <garfield(dot)lewis(at)lzlabs(dot)com> |
---|---|
To: | PostgreSQL mailing lists <pgsql-general(at)postgresql(dot)org> |
Subject: | Passing XML column in an array |
Date: | 2022-02-10 17:14:09 |
Message-ID: | 247353C7-F577-46D7-9EB6-FA4CB8452D5F@lzlabs.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Hi All,
I have the following code:
141 if ( 0 != iXmlArrDim ) {
142 Datum *pXmlData = NULL;
143 bool *pXmlDataNulls = NULL;
144 uint32_t iXmlCount = 0;
145 bool bFirstTime = true;
146
147 Assert( XMLOID == ARR_ELEMENTS( pXmlDataArr ) );
148
149 deconstruct_array( pXmlDataArr,
150 XMLOID,
151 -1,
152 false,
153 'i',
154 &pXmlData,
155 &pXmlDataNulls,
156 (int32_t*)&iXmlCount );
157
158 initStringInfo( &xmlStr );
159
160 for ( size_t ix = 0; ix < iXmlCount; ++ix ) {
161 xmltype *pX = DatumGetXmlP( pXmlData[ix] );
162 char *pData = VARDATA( pX );
163 uint32_t iData = VARSIZE( pX ) - VARHDRSZ;
164
165 if ( !bFirstTime )
166 appendStringInfoString( &xmlStr, ", " );
167 else
168 bFirstTime = false;
169
170 appendStringInfoString( &xmlStr,
171 (const char*)lzXmlCharStrndup( pData,
172 iData ) );
173 }
174
175 pfree( pXmlData );
176 pfree( pXmlDataNulls );
177 }
I am trying to pass an array into a new function I am creating called lzxmlexists via the following statement:
wdbs=# SELECT "XT"."ROWKEY" , "XT"."XMLT1C1" FROM "LZQAAS"."T642_XML_T1" "XT" WHERE "ROWKEY"=64201 AND lzxmlexists( ' $XTX//DeptName[ . = $Dn ]', 'DEFAULT', ARRAY["XT"."XMLT1C1"] ) ORDER BY "ROWKEY";
The column XT.XMLT1C1 exists because I can do a simple select to see the contents. The problem is that in the code above I hit the following error at line 161.
160 for ( size_t ix = 0; ix < iXmlCount; ++ix ) {
(gdb)
163 xmltype *pX = DatumGetXmlP( pXmlData[ix] );
(gdb)
Program received signal SIGSEGV, Segmentation fault.
0x00000000008b3514 in pg_detoast_datum ()
Obviously, I’ve done something wrong, or I am misunderstanding something.
BTW, if I change the array input to something like this ARRAY[‘something-variable’::xml] it works no problem, but it seems as though getting the input from the column results in garbage that traps.
Any suggestion/help would be greatly appreciated.
Regards,
Garfield
From | Date | Subject | |
---|---|---|---|
Next Message | Peter J. Holzer | 2022-02-10 17:22:29 | Re: Can we go beyond the standard to make Postgres radically better? |
Previous Message | Merlin Moncure | 2022-02-10 16:54:46 | Re: Can we go beyond the standard to make Postgres radically better? |