List:Commits« Previous MessageNext Message »
From:Reggie Burnett Date:July 29 2009 1:43am
Subject:bzr commit into connector-net-5.2 branch (reggie.burnett:698) Bug#46429
View as plain text  
#At file:///C:/work/bzr-connector-net/5.2/ based on revid:vvaintroub@stripped

  698 Reggie Burnett	2009-07-28
      - fixed MySqlScript class so that it respects delimiter statements (bug #46429)

    modified:
      CHANGES
      MySql.Data/Provider/Source/MySqlScript.cs
      MySql.Data/Tests/Source/ScriptExecution.cs
=== modified file 'CHANGES'
=== modified file 'CHANGES'
--- a/CHANGES	2009-07-28 20:13:31 +0000
+++ b/CHANGES	2009-07-29 01:43:20 +0000
@@ -1,6 +1,7 @@
 Version 5.2.8
 - fixed situation where TreatTinyAsBoolean had no effect with default database character set to UTF8
     (bug#46205)
+- fixed MySqlScript class so that it respects delimiter statements (bug #46429)
 
 Version 5.2.7 7/13/09
 - fixed procedure parameters collection so that an exception is thrown if we can't get the 

=== modified file 'MySql.Data/Provider/Source/MySqlScript.cs'
--- a/MySql.Data/Provider/Source/MySqlScript.cs	2008-10-10 19:28:06 +0000
+++ b/MySql.Data/Provider/Source/MySqlScript.cs	2009-07-29 01:43:20 +0000
@@ -51,7 +51,7 @@
         /// </summary>
         public MySqlScript()
         {
-            delimiter = ";";
+            Delimiter = ";";
         }
 
         /// <summary>
@@ -249,6 +249,7 @@
 
         private List<ScriptStatement> BreakIntoStatements(bool ansiQuotes, bool noBackslashEscapes)
         {
+            string currentDelimiter = Delimiter;
             int startPos = 0;
             List<ScriptStatement> statements = new List<ScriptStatement>();
             List<int> lineNumbers = BreakScriptIntoLines();
@@ -263,19 +264,27 @@
                 if (!tokenizer.Quoted &&
                     !tokenizer.IsSize)
                 {
-                    int delimiterPos = token.IndexOf(Delimiter);
-                    if (delimiterPos != -1)
-                    {
-                        int endPos = tokenizer.Index - token.Length + delimiterPos;
-                        if (tokenizer.Index == query.Length-1)
-                            endPos++;
-                        string currentQuery = query.Substring(startPos, endPos-startPos);
-                        ScriptStatement statement = new ScriptStatement();
-                        statement.text = currentQuery.Trim();
-                        statement.line = FindLineNumber(startPos, lineNumbers);
-                        statement.position = startPos - lineNumbers[statement.line];
-                        statements.Add(statement);
-                        startPos = endPos + delimiter.Length;
+                    if (token.ToLowerInvariant() == "delimiter")
+                    {
+                        currentDelimiter = tokenizer.NextToken();
+                        startPos = tokenizer.Index;
+                    }
+                    else
+                    {
+                        int delimiterPos = token.IndexOf(currentDelimiter);
+                        if (delimiterPos != -1)
+                        {
+                            int endPos = tokenizer.Index - token.Length + delimiterPos;
+                            if (tokenizer.Index == query.Length - 1)
+                                endPos++;
+                            string currentQuery = query.Substring(startPos, endPos - startPos);
+                            ScriptStatement statement = new ScriptStatement();
+                            statement.text = currentQuery.Trim();
+                            statement.line = FindLineNumber(startPos, lineNumbers);
+                            statement.position = startPos - lineNumbers[statement.line];
+                            statements.Add(statement);
+                            startPos = endPos + delimiter.Length;
+                        }
                     }
                 }
                 token = tokenizer.NextToken();

=== modified file 'MySql.Data/Tests/Source/ScriptExecution.cs'
--- a/MySql.Data/Tests/Source/ScriptExecution.cs	2008-10-10 19:28:06 +0000
+++ b/MySql.Data/Tests/Source/ScriptExecution.cs	2009-07-29 01:43:20 +0000
@@ -19,6 +19,7 @@
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
 
 using System;
+using System.Text;
 using System.Data;
 using System.IO;
 using NUnit.Framework;
@@ -169,5 +170,25 @@
                 Assert.AreEqual(1, count);
             }
         }
+         
+        /// <summary>
+        /// Bug #46429 use DELIMITER command in MySql.Data.MySqlClient.MySqlScript  
+        /// </summary>
+        [Test]
+        public void ScriptWithDelimiterStatements()
+        {
+            StringBuilder sql = new StringBuilder();
+
+            sql.AppendFormat("{0}DELIMITER $${0}", Environment.NewLine);
+            sql.AppendFormat(statementTemplate1, 1, "$$");
+            sql.AppendFormat("{0}DELIMITER //{0}", Environment.NewLine);
+            sql.AppendFormat(statementTemplate1, 2, "//");
+
+            MySqlScript s = new MySqlScript();
+            s.Query = sql.ToString();
+            s.Delimiter = "XX";
+            s.Connection = conn;
+            int count = s.Execute();
+        }
     }
 }


Attachment: [text/bzr-bundle] bzr/reggie.burnett@sun.com-20090729014320-0yv7w4pb76yk6tpo.bundle
Thread
bzr commit into connector-net-5.2 branch (reggie.burnett:698) Bug#46429Reggie Burnett29 Jul