mirror of
https://github.com/MariaDB/server.git
synced 2025-10-28 17:15:19 +03:00
Bug #16171518 - LOAD XML DOES NOT HANDLE EMPTY ELEMENTS
DESCRIPTION
===========
Inability of mysql LOAD XML command to handle empty XML
tags i.e. <row><tag/></row>. Also the behaviour is wrong
and (different than above) when there is a space in empty
tag i.e. <row><tag /></row>
ANALYSIS
========
In read_xml() the case where we encounter a close tag ('/')
we're decreasing the 'level' blindly which is wrong.
Actually when its an without-space-empty-tag (succeeding
char is '>'), we need to skip the decrement. In other words
whenever we hit a close tag ('/'), decrease the 'level'
only when (i) It's not an (without space) empty tag i.e.
<tag/> or, (ii) It is of format <row col="val" .../>
FIX
===
The switch case for '/' is modified. We've removed the
blind decrement of 'level'. We do it only when its not an
without-space-empty-tag. Also we are setting 'in_tag' to
false to let program know that we're done reading current
tag (required in the case of format <row col="val" .../>)
This commit is contained in:
@@ -116,3 +116,17 @@ LOAD XML INFILE '../../std_data/loadxml.dat' INTO TABLE t1
|
||||
ROWS IDENTIFIED BY '<row>' (a,@b) SET b=concat('!',@b);
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Bug#16171518 LOAD XML DOES NOT HANDLE EMPTY ELEMENTS
|
||||
--echo #
|
||||
CREATE TABLE t1 (col1 VARCHAR(3), col2 VARCHAR(3), col3 VARCHAR(3), col4 VARCHAR(4));
|
||||
LOAD XML INFILE '../../std_data/bug16171518_1.dat' INTO TABLE t1;
|
||||
SELECT * FROM t1 ORDER BY col1, col2, col3, col4;
|
||||
DROP TABLE t1;
|
||||
|
||||
CREATE TABLE t1 (col1 VARCHAR(3), col2 VARCHAR(3), col3 INTEGER);
|
||||
LOAD XML INFILE '../../std_data/bug16171518_2.dat' INTO TABLE t1;
|
||||
SELECT * FROM t1 ORDER BY col1, col2, col3;
|
||||
DROP TABLE t1;
|
||||
|
||||
Reference in New Issue
Block a user