[ http://issues.apache.org/jira/browse/IBATISNET-110?page=all ]
Gilles Bayon reassigned IBATISNET-110: -------------------------------------- Assign To: Gilles Bayon > Whitespace is not maintained properly when CDATA tags are used > -------------------------------------------------------------- > > Key: IBATISNET-110 > URL: http://issues.apache.org/jira/browse/IBATISNET-110 > Project: iBatis for .NET > Type: Bug > Reporter: Ron Grabowski > Assignee: Gilles Bayon > Fix For: DataMapper 1.3 > > The ParseDynamicTags method in DomSqlMapBuilder.cs calls Trim() when building > the sql statement. The following statement: > <statement id="GetMany"><![CDATA[SELECT * FROM User ]]></statement> > <statement id="GetOne" extends="GetMany"> WHERE Id=3</statement</statement> > is incorrectly constructed as: > SELECT * FROM UserWHERE Id=3 > when it should be: > SELECT * FROM User WHERE Id=3 > The same error occurs when two or more CDATA nodes and/or a Text node is used > inside the same statement. This statement: > <statement id="GetMany"> > <![CDATA[SELECT * ]]> > <![CDATA[FROM ]]> > User > </statement> > is incorrectly rendered as: > SELECT *FROMUser > This is the offending code: > string data = child.InnerText.Replace('\n', ' ').Replace('\r', ' > ').Replace('\t', ' ').Trim(); //?? > One solution is to trim the beginning of the first node and trim the end of > the last node: > string data = child.InnerText.Replace('\n', ' ').Replace('\r', ' > ').Replace('\t', ' '); > if (i == 0) > { > // trim whitespace from the beginning of the string > data = Regex.Replace(data, @"^\s*(.*)$", "$1"); > } > else if (i == children.Count - 1) > { > // trim whitespace from the end of the string > data = Regex.Replace(data, @"^(.*?)\s*$", "$1"); > } > Yes, I know there is a TrimStart and TrimEnd method but I think there are > more whitespace characters than just " ", "\n", "\t", "\r"...especially if > the xml file is encoded with a funky content-type. There may be a more > effecient regular expression to remove whitespace. > Another solution is to remove the call to Trim after Replace. > I think that if the user is using a CDATA node, they probably don't want > their sql messed with. Perhaps if we encounter a CDATA node we shouldn't try > to make it all fit on one line: > trimCdataNodes="false" ??? > Thank you to Chad Humphries for encountering this bug. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira