Re: XML/XPath issues: text/CDATA in XMLTABLE, XPath evaluated with wrong context

Ramanarayana <raam.soft@gmail.com>

From: Ramanarayana <raam.soft@gmail.com>
To: Pavel Stehule <pavel.stehule@gmail.com>
Cc: Markus Winand <markus.winand@winand.at>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Alvaro Herrera <alvherre@2ndquadrant.com>
Date: 2019-03-01T00:36:17Z
Lists: pgsql-hackers
Hi,
The below statement needs to be executed before running the query to
replicate the issue

update xmldata set data = regexp_replace(data::text, '791',
'<!--ah-->7<!--oh-->9<!--uh-->1')::xml;

On Thu, 28 Feb 2019 at 17:55, Pavel Stehule <pavel.stehule@gmail.com> wrote:

>
>
> čt 28. 2. 2019 v 10:31 odesílatel Pavel Stehule <pavel.stehule@gmail.com>
> napsal:
>
>>
>>
>> čt 28. 2. 2019 v 9:58 odesílatel Ramanarayana <raam.soft@gmail.com>
>> napsal:
>>
>>> Hi,
>>>
>>>         I have tested the three issues fixed in patch 001. Array Indexes
>>> issue is still there.Running the following query returns ERROR: more
>>> than one value returned by column XPath expression
>>>
>>> SELECT xmltable.*
>>> FROM (SELECT data FROM xmldata) x,
>>> LATERAL XMLTABLE('/ROWS/ROW'
>>> PASSING data
>>> COLUMNS
>>> country_name text PATH 'COUNTRY_NAME/text()' NOT NULL,
>>> size_text float PATH 'SIZE/text()',
>>> size_text_1 float PATH 'SIZE/text()[1]',
>>> size_text_2 float PATH 'SIZE/text()[2]',
>>> "SIZE" float, size_xml xml PATH 'SIZE')
>>>
>>> The other two issues are resolved by this patch.
>>>
>>
> I tested xmltable-xpath-result-processing-bugfix-6.patch
>
> and it is working
>
> postgres=# SELECT  xmltable.*
> postgres-#    FROM (SELECT data FROM xmldata) x,
> postgres-#         LATERAL XMLTABLE('/ROWS/ROW'
> postgres(#                          PASSING data
> postgres(#                          COLUMNS
> postgres(#                                   country_name text PATH
> 'COUNTRY_NAME/text()' NOT NULL,
> postgres(#                                   size_text float PATH
> 'SIZE/text()',
> postgres(#                                   size_text_1 float PATH
> 'SIZE/text()[1]',
> postgres(#                                   size_text_2 float PATH
> 'SIZE/text()[2]',
> postgres(#                                   "SIZE" float, size_xml xml
> PATH 'SIZE')  ;
> ┌──────────────┬───────────┬─────────────┬─────────────┬──────┬────────────────────────────┐
>
> │ country_name │ size_text │ size_text_1 │ size_text_2 │ SIZE │
> size_xml          │
> ╞══════════════╪═══════════╪═════════════╪═════════════╪══════╪════════════════════════════╡
>
> │ Australia    │         ∅ │           ∅ │           ∅ │    ∅ │
> ∅                          │
> │ China        │         ∅ │           ∅ │           ∅ │    ∅ │
> ∅                          │
> │ HongKong     │         ∅ │           ∅ │           ∅ │    ∅ │
> ∅                          │
> │ India        │         ∅ │           ∅ │           ∅ │    ∅ │
> ∅                          │
> │ Japan        │         ∅ │           ∅ │           ∅ │    ∅ │
> ∅                          │
> │ Singapore    │       791 │         791 │           ∅ │  791 │ <SIZE
> unit="km">791</SIZE> │
> └──────────────┴───────────┴─────────────┴─────────────┴──────┴────────────────────────────┘
>
> (6 rows)
>
> Regards
>
> Pavel
>
>
>>
>> what patches you are used?
>>
>> Regards
>>
>> Pavel
>>
>>
>>> --
>>> Cheers
>>> Ram 4.0
>>>
>>

-- 
Cheers
Ram 4.0

Commits

  1. Remove EState.es_range_table_array.

  2. Rationalize use of list_concat + list_copy combinations.

  3. Cosmetic improvements in setup of planner's per-RTE arrays.

  4. Make better use of the new List implementation in a couple of places

  5. Fix sepgsql test results for commit d97b714a2.

  6. Avoid using lcons and list_delete_first where it's easy to do so.

  7. Remove lappend_cell...() family of List functions.

  8. Clean up some ad-hoc code for sorting and de-duplicating Lists.

  9. Redesign the API for list sorting (list_qsort becomes list_sort).

  10. Remove dead code.

  11. Represent Lists as expansible arrays, not chains of cons-cells.

  12. Standardize some more loops that chase down parallel lists.

  13. Reimplement the linked list data structure used throughout the backend.