You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ibatis.apache.org by "Ron Grabowski (JIRA)" <ib...@incubator.apache.org> on 2005/09/09 07:25:30 UTC

[jira] Created: (IBATISNET-110) Whitespace is not maintained properly when CDATA tags are used

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


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


[jira] Closed: (IBATISNET-110) Whitespace is not maintained properly when CDATA tags are used

Posted by "Gilles Bayon (JIRA)" <ib...@incubator.apache.org>.
     [ http://issues.apache.org/jira/browse/IBATISNET-110?page=all ]
     
Gilles Bayon closed IBATISNET-110:
----------------------------------

    Fix Version: DataMapper 1.3
     Resolution: Fixed

In SVN

> 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


[jira] Assigned: (IBATISNET-110) Whitespace is not maintained properly when CDATA tags are used

Posted by "Gilles Bayon (JIRA)" <ib...@incubator.apache.org>.
     [ 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