"Composite Keys or Multiple Complex Parameters Properties" - incorrect parsing 
of column properties
---------------------------------------------------------------------------------------------------

         Key: IBATISNET-166
         URL: http://issues.apache.org/jira/browse/IBATISNET-166
     Project: iBatis for .NET
        Type: Bug

  Components: DataMapper  
    Versions: DataMapper 1.3    
 Environment: Microsoft Windows Server 2003, DotNetFramework 1.1
    Reporter: cristian manea


The pdf documentation, Chapter 3, 3.5.13. Composite Keys or Multiple Complex 
Parameters Properties, says:

"However, there is an alternate syntax that allows multiple columns to be 
passed to the related mapped statement. This comes in handy for situations 
where a composite key relationship exists, or even if you simply want to use a 
parameter of some name other than #value#. The alternate syntax for the column 
attribute is simply {param1=column1, param2=column2, ..., paramN=columnN}."

Instead I found there will be ALWAYS the error: "columnN}" while getting the 
value from the query; i have downloaded the source and I have identified the 
point where the error is made: the split of the column does not consider the 
fact the the } and { are part of the string. 

It will work only if we don't use the { and } when defining the column property 
in the sqlmap definition (but in this way, the specification for the column 
property is not followed). It olny works by not following the specifications :) 
:).      
         ---  column="idlabel=desc_fk,idlanguage=id_language"  ----

Source code in "MappedStatement.cs", project "IbatisNet.DataMapper" where I 
have identified the error:

 private void SetObjectProperty(RequestScope request, ResultMap resultMap, 
ResultProperty mapping, ref object target, IDataReader reader) , 
...............................
                                if (paramString.IndexOf(',')>0 || 
paramString.IndexOf('=')>0) // composite parameters key
                                {
                                        IDictionary keyMap = new Hashtable();
                                        keys = keyMap;
                                        // define which character is seperating 
fields
                                        char[] splitter  = {'=',','};

                                        string[] paramTab = 
paramString.Split(splitter);
                                        if (paramTab.Length % 2 != 0) 
                                        {
                                                throw new 
DataMapperException("Invalid composite key string format in 
'"+mapping.PropertyName+". It must be: 
property1=column1,property2=column2,..."); 
                                        }
                                        IEnumerator enumerator = 
paramTab.GetEnumerator();
                                        while (!wasNull && 
enumerator.MoveNext()) 
                                        {
                                                string hashKey = 
((string)enumerator.Current).Trim();
                                                enumerator.MoveNext();
                                                object hashValue = 
reader.GetValue( reader.GetOrdinal(((string)enumerator.Current).Trim()) );

                                                keyMap.Add(hashKey, hashValue );
                                                wasNull = (hashValue == 
DBNull.Value);
                                        }
                                }
..................................

Since i am not participating at the project, I cannot modify the source.

Regards.

Cristian Manea
www.atypiqsoftware.ro

-- 
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

Reply via email to