[ http://issues.apache.org/jira/browse/IBATISNET-166?page=all ] Gilles Bayon closed IBATISNET-166: ----------------------------------
Fix Version: DataMapper 1.5 Resolution: Duplicate Assign To: Gilles Bayon Duplicate issue with IBATISNET-141 Already fixed > "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 > Assignee: Gilles Bayon > Fix For: DataMapper 1.5 > > 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