Author: rgrabowski
Date: Wed Mar 29 19:00:27 2006
New Revision: 389973

URL: http://svn.apache.org/viewcvs?rev=389973&view=rev
Log:
Fix for IBATISNET-143: selectKey nodes may contain dynamic sql.

Modified:
    
ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/NUnit/SqlMapTests/DynamicPrependTest.cs
    
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/DomSqlMapBuilder.cs

Modified: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/NUnit/SqlMapTests/DynamicPrependTest.cs
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/NUnit/SqlMapTests/DynamicPrependTest.cs?rev=389973&r1=389972&r2=389973&view=diff
==============================================================================
--- 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/NUnit/SqlMapTests/DynamicPrependTest.cs
 (original)
+++ 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/NUnit/SqlMapTests/DynamicPrependTest.cs
 Wed Mar 29 19:00:27 2006
@@ -432,6 +432,26 @@
                        Assert.AreEqual(1234, testAccount.Id);
                        Assert.AreEqual("#The Pound Signs#", 
testAccount.FirstName);
                }
+
+               [Test]
+               public void TestSelectKeyWithDynamicSql()
+               {
+                       Account account = new Account();
+                       account.Id = 99998;
+                       account.FirstName = "R";
+                       account.LastName = "G";
+
+                       Hashtable param = new Hashtable(2);
+                       param["Account"] = account;
+                       param["AccountsTableName"] = "Accounts";
+                       object selectKeyValue = 
sqlMap.Insert("SelectKeyWithDynamicSql", param);
+
+                       Assert.IsNotNull(selectKeyValue);
+                       Assert.AreEqual(99998, Convert.ToInt32(selectKeyValue));
+
+                       Assert.IsTrue(param.ContainsKey("AccountId"));
+                       Assert.AreEqual(99998, (int)param["AccountId"]);
+               }
                #endregion
 
        }

Modified: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/DomSqlMapBuilder.cs
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/DomSqlMapBuilder.cs?rev=389973&r1=389972&r2=389973&view=diff
==============================================================================
--- 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/DomSqlMapBuilder.cs 
(original)
+++ 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/DomSqlMapBuilder.cs 
Wed Mar 29 19:00:27 2006
@@ -1166,6 +1166,9 @@
                                // Set sql statement SelectKey 
                                if (insert.SelectKey != null)
                                {
+                                       _configScope.ErrorContext.MoreInfo = 
"loading selectKey tag";
+                                       _configScope.NodeContext = 
xmlNode.SelectSingleNode( ApplyMappingNamespacePrefix(XML_SELECTKEY), 
_configScope.XmlNamespaceManager);
+
                                        insert.SelectKey.Id = insert.Id;
                                        insert.SelectKey.Initialize( 
_configScope );
                                        insert.SelectKey.Id += DOT + 
"SelectKey";
@@ -1174,13 +1177,8 @@
                                        // of the parent <select> node
                                        // insert.SelectKey.Initialize( 
_configScope );
                                        // insert.SelectKey.Id = insert.Id + 
DOT + "SelectKey";
-                                       
-                                       string commandText = 
xmlNode.SelectSingleNode( ApplyMappingNamespacePrefix(XML_SELECTKEY), 
_configScope.XmlNamespaceManager).FirstChild.InnerText.Replace('\n', ' 
').Replace('\r', ' ').Replace('\t', ' ').Trim();
-                                       commandText = 
NodeUtils.ParsePropertyTokens(commandText, _configScope.Properties);
-                                       StaticSql sql = new 
StaticSql(_configScope, insert.SelectKey);
-                                       IDalSession session = new 
SqlMapSession( _configScope.SqlMapper );
-                                       sql.BuildPreparedStatement( session, 
commandText );
-                                       insert.SelectKey.Sql = sql;             
                        
+
+                                       ProcessSqlStatement(insert.SelectKey);
                                        
                                        // Build MappedStatement
                                        mappedStatement = new MappedStatement( 
_configScope.SqlMapper, insert.SelectKey);


Reply via email to