Search Postgresql Archives

Passing XML column in an array

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux