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

Pavel Stehule <pavel.stehule@gmail.com>

From: Pavel Stehule <pavel.stehule@gmail.com>
To: Ramanarayana <raam.soft@gmail.com>
Cc: Markus Winand <markus.winand@winand.at>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Alvaro Herrera <alvherre@2ndquadrant.com>
Date: 2019-02-28T12:24:53Z
Lists: pgsql-hackers
č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
>>
>

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.