#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#46429 | Reggie Burnett | 29 Jul |