Modified:
trunk/TestSuite/GetSchemaTests.cs
trunk/TestSuite/StoredProcedure.cs
trunk/mysqlclient/MySql.Data.2005.csproj
trunk/mysqlclient/StoredProcedure.cs
Log:
Small corrections found during testing.
Modified: trunk/TestSuite/GetSchemaTests.cs
===================================================================
--- trunk/TestSuite/GetSchemaTests.cs 2006-11-02 19:43:46 UTC (rev 453)
+++ trunk/TestSuite/GetSchemaTests.cs 2006-11-02 21:04:23 UTC (rev 454)
@@ -192,18 +192,18 @@
Assert.AreEqual("Procedure Parameters", dt.TableName);
Assert.AreEqual("test", dt.Rows[0]["ROUTINE_SCHEMA"].ToString().ToLower());
Assert.AreEqual("sptest", dt.Rows[0]["ROUTINE_NAME"].ToString().ToLower());
- Assert.AreEqual("id", dt.Rows[0]["PARAMETER_NAME"].ToString().ToLower());
+ Assert.AreEqual("?id", dt.Rows[0]["PARAMETER_NAME"].ToString().ToLower());
Assert.AreEqual(1, dt.Rows[0]["ORDINAL_POSITION"]);
Assert.AreEqual("IN", dt.Rows[0]["PARAMETER_MODE"]);
Assert.AreEqual("NO", dt.Rows[0]["IS_RESULT"]);
- restrictions[4] = "name";
+ restrictions[4] = "?name";
dt.Clear();
dt = conn.GetSchema("Procedure Parameters", restrictions);
Assert.AreEqual(1, dt.Rows.Count);
Assert.AreEqual("test", dt.Rows[0]["ROUTINE_SCHEMA"].ToString().ToLower());
Assert.AreEqual("sptest", dt.Rows[0]["ROUTINE_NAME"].ToString().ToLower());
- Assert.AreEqual("name", dt.Rows[0]["PARAMETER_NAME"].ToString().ToLower());
+ Assert.AreEqual("?name", dt.Rows[0]["PARAMETER_NAME"].ToString().ToLower());
Assert.AreEqual(2, dt.Rows[0]["ORDINAL_POSITION"]);
Assert.AreEqual("IN", dt.Rows[0]["PARAMETER_MODE"]);
Assert.AreEqual("NO", dt.Rows[0]["IS_RESULT"]);
@@ -219,7 +219,7 @@
Assert.AreEqual("Procedure Parameters", dt.TableName);
Assert.AreEqual("test", dt.Rows[0]["ROUTINE_SCHEMA"].ToString().ToLower());
Assert.AreEqual("spfunc", dt.Rows[0]["ROUTINE_NAME"].ToString().ToLower());
- Assert.AreEqual("id", dt.Rows[0]["PARAMETER_NAME"].ToString().ToLower());
+ Assert.AreEqual("?id", dt.Rows[0]["PARAMETER_NAME"].ToString().ToLower());
Assert.AreEqual(1, dt.Rows[0]["ORDINAL_POSITION"]);
Assert.AreEqual("IN", dt.Rows[0]["PARAMETER_MODE"]);
Assert.AreEqual("NO", dt.Rows[0]["IS_RESULT"]);
@@ -344,28 +344,28 @@
Assert.AreEqual("spTest", parameters.Rows[3][2]);
Assert.AreEqual("PROCEDURE", parameters.Rows[0][3]);
- Assert.AreEqual("id", parameters.Rows[0][4]);
+ Assert.AreEqual("?id", parameters.Rows[0][4]);
Assert.AreEqual(1, parameters.Rows[0][5]);
Assert.AreEqual("IN", parameters.Rows[0][6]);
Assert.AreEqual("NO", parameters.Rows[0][7]);
Assert.AreEqual("INT", parameters.Rows[0][8].ToString().ToUpper());
Assert.AreEqual("PROCEDURE", parameters.Rows[1][3]);
- Assert.AreEqual("id2", parameters.Rows[1][4]);
+ Assert.AreEqual("?id2", parameters.Rows[1][4]);
Assert.AreEqual(2, parameters.Rows[1][5]);
Assert.AreEqual("IN", parameters.Rows[1][6]);
Assert.AreEqual("NO", parameters.Rows[1][7]);
Assert.AreEqual("INT", parameters.Rows[1][8].ToString().ToUpper());
Assert.AreEqual("PROCEDURE", parameters.Rows[2][3]);
- Assert.AreEqual("io1", parameters.Rows[2][4]);
+ Assert.AreEqual("?io1", parameters.Rows[2][4]);
Assert.AreEqual(3, parameters.Rows[2][5]);
Assert.AreEqual("INOUT", parameters.Rows[2][6]);
Assert.AreEqual("NO", parameters.Rows[2][7]);
Assert.AreEqual("VARCHAR", parameters.Rows[2][8].ToString().ToUpper());
Assert.AreEqual("PROCEDURE", parameters.Rows[3][3]);
- Assert.AreEqual("out1", parameters.Rows[3][4]);
+ Assert.AreEqual("?out1", parameters.Rows[3][4]);
Assert.AreEqual(4, parameters.Rows[3][5]);
Assert.AreEqual("OUT", parameters.Rows[3][6]);
Assert.AreEqual("NO", parameters.Rows[3][7]);
Modified: trunk/TestSuite/StoredProcedure.cs
===================================================================
--- trunk/TestSuite/StoredProcedure.cs 2006-11-02 19:43:46 UTC (rev 453)
+++ trunk/TestSuite/StoredProcedure.cs 2006-11-02 21:04:23 UTC (rev 454)
@@ -443,7 +443,7 @@
MySqlCommand cmd = new MySqlCommand("fnTest", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("?valin", 22);
- cmd.Parameters.Add("retval", MySqlDbType.Int32);
+ cmd.Parameters.Add("?retval", MySqlDbType.Int32);
cmd.Parameters[1].Direction = ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery();
Assert.AreEqual(44, cmd.Parameters[1].Value);
@@ -531,39 +531,39 @@
MySqlCommandBuilder.DeriveParameters(cmd);
Assert.AreEqual(9, cmd.Parameters.Count);
- Assert.AreEqual("valin", cmd.Parameters[0].ParameterName);
+ Assert.AreEqual("?valin", cmd.Parameters[0].ParameterName);
Assert.AreEqual(ParameterDirection.Input, cmd.Parameters[0].Direction);
Assert.AreEqual(MySqlDbType.NewDecimal, cmd.Parameters[0].MySqlDbType);
- Assert.AreEqual("val2", cmd.Parameters[1].ParameterName);
+ Assert.AreEqual("?val2", cmd.Parameters[1].ParameterName);
Assert.AreEqual(ParameterDirection.Input, cmd.Parameters[1].Direction);
Assert.AreEqual(MySqlDbType.Int32, cmd.Parameters[1].MySqlDbType);
- Assert.AreEqual("val3", cmd.Parameters[2].ParameterName);
+ Assert.AreEqual("?val3", cmd.Parameters[2].ParameterName);
Assert.AreEqual(ParameterDirection.InputOutput, cmd.Parameters[2].Direction);
Assert.AreEqual(MySqlDbType.Float, cmd.Parameters[2].MySqlDbType);
- Assert.AreEqual("val4", cmd.Parameters[3].ParameterName);
+ Assert.AreEqual("?val4", cmd.Parameters[3].ParameterName);
Assert.AreEqual(ParameterDirection.Output, cmd.Parameters[3].Direction);
Assert.AreEqual(MySqlDbType.Double, cmd.Parameters[3].MySqlDbType);
- Assert.AreEqual("val5", cmd.Parameters[4].ParameterName);
+ Assert.AreEqual("?val5", cmd.Parameters[4].ParameterName);
Assert.AreEqual(ParameterDirection.InputOutput, cmd.Parameters[4].Direction);
Assert.AreEqual(MySqlDbType.Bit, cmd.Parameters[4].MySqlDbType);
- Assert.AreEqual("val6", cmd.Parameters[5].ParameterName);
+ Assert.AreEqual("?val6", cmd.Parameters[5].ParameterName);
Assert.AreEqual(ParameterDirection.Input, cmd.Parameters[5].Direction);
Assert.AreEqual(MySqlDbType.VarChar, cmd.Parameters[5].MySqlDbType);
- Assert.AreEqual("val7", cmd.Parameters[6].ParameterName);
+ Assert.AreEqual("?val7", cmd.Parameters[6].ParameterName);
Assert.AreEqual(ParameterDirection.Input, cmd.Parameters[6].Direction);
Assert.AreEqual(MySqlDbType.Set, cmd.Parameters[6].MySqlDbType);
- Assert.AreEqual("val8", cmd.Parameters[7].ParameterName);
+ Assert.AreEqual("?val8", cmd.Parameters[7].ParameterName);
Assert.AreEqual(ParameterDirection.Input, cmd.Parameters[7].Direction);
Assert.AreEqual(MySqlDbType.String, cmd.Parameters[7].MySqlDbType);
- Assert.AreEqual("val9", cmd.Parameters[8].ParameterName);
+ Assert.AreEqual("?val9", cmd.Parameters[8].ParameterName);
Assert.AreEqual(ParameterDirection.Input, cmd.Parameters[8].Direction);
Assert.AreEqual(MySqlDbType.NewDecimal, cmd.Parameters[8].MySqlDbType);
@@ -594,7 +594,7 @@
MySqlCommandBuilder.DeriveParameters(cmd);
Assert.AreEqual(2, cmd.Parameters.Count);
- Assert.AreEqual("v1", cmd.Parameters[0].ParameterName);
+ Assert.AreEqual("?v1", cmd.Parameters[0].ParameterName);
Assert.AreEqual(ParameterDirection.Input, cmd.Parameters[0].Direction);
Assert.AreEqual(MySqlDbType.Datetime, cmd.Parameters[0].MySqlDbType);
@@ -650,7 +650,7 @@
execSQL("CREATE PROCEDURE spTest(\"@Param1\" text) BEGIN SELECT \"@Param1\"; END");
MySqlCommand cmd = new MySqlCommand("spTest", conn);
- cmd.Parameters.Add("@Param1", "This is my value");
+ cmd.Parameters.Add("?@Param1", "This is my value");
cmd.CommandType = CommandType.StoredProcedure;
string val = (string)cmd.ExecuteScalar();
@@ -728,10 +728,10 @@
MySqlCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "spTest";
- cmd.Parameters.Add("p1", MySqlDbType.UInt16, 9);
- cmd.Parameters["p1"].Value = 44;
- cmd.Parameters.Add("p2", MySqlDbType.VarChar, 2);
- cmd.Parameters["p2"].Value = "ss";
+ cmd.Parameters.Add("?p1", MySqlDbType.UInt16, 9);
+ cmd.Parameters["?p1"].Value = 44;
+ cmd.Parameters.Add("?p2", MySqlDbType.VarChar, 2);
+ cmd.Parameters["?p2"].Value = "ss";
try
{
cmd.ExecuteNonQuery();
@@ -765,9 +765,9 @@
MySqlCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "spTest";
- cmd.Parameters.Add("Name", "Item3");
- cmd.Parameters.Add("Table1Id", MySqlDbType.Int32);
- cmd.Parameters["Table1Id"].Direction = ParameterDirection.Output;
+ cmd.Parameters.Add("?Name", "Item3");
+ cmd.Parameters.Add("?Table1Id", MySqlDbType.Int32);
+ cmd.Parameters["?Table1Id"].Direction = ParameterDirection.Output;
DataSet ds = new DataSet();
MySqlDataAdapter da = new MySqlDataAdapter(cmd);
@@ -839,14 +839,14 @@
MySqlCommand command = new MySqlCommand("spTest", conn);
command.CommandType = System.Data.CommandType.StoredProcedure;
- param1 = command.Parameters.Add("p", MySqlDbType.Int32);
+ param1 = command.Parameters.Add("?p", MySqlDbType.Int32);
param1.Value = 3;
MySqlDataReader reader = null;
try
{
command.Prepare();
- reader = command.ExecuteReader(CommandBehavior.SingleRow);
+ reader = command.ExecuteReader();
reader.Read();
}
catch (Exception ex)
@@ -876,7 +876,7 @@
MySqlCommand c = new MySqlCommand("spTest", conn);
c.CommandType = CommandType.StoredProcedure;
IDataParameter p = c.CreateParameter();
- p.ParameterName = "pp";
+ p.ParameterName = "?pp";
p.Value = 10;
c.Parameters.Add(p);
c.Prepare();
@@ -934,7 +934,7 @@
try
{
MySqlCommand cmd = new MySqlCommand("spTest", conn);
- cmd.Parameters.Add("p_paramname", 2);
+ cmd.Parameters.Add("?p_paramname", 2);
cmd.CommandType = CommandType.StoredProcedure;
cmd.ExecuteScalar();
}
Modified: trunk/mysqlclient/MySql.Data.2005.csproj
===================================================================
--- trunk/mysqlclient/MySql.Data.2005.csproj 2006-11-02 19:43:46 UTC (rev 453)
+++ trunk/mysqlclient/MySql.Data.2005.csproj 2006-11-02 21:04:23 UTC (rev 454)
@@ -94,6 +94,7 @@
<Reference Include="System">
<Name>System</Name>
</Reference>
+ <Reference Include="System.Configuration.Install" />
<Reference Include="System.Data">
<Name>System.Data</Name>
</Reference>
@@ -138,6 +139,9 @@
<Compile Include="Driver.cs" />
<Compile Include="Exception.cs" />
<Compile Include="Field.cs" />
+ <Compile Include="Installer.cs">
+ <SubType>Component</SubType>
+ </Compile>
<Compile Include="ISSchemaProvider.cs" />
<Compile Include="Logger.cs" />
<Compile Include="MySqlClientFactory.cs" />
Modified: trunk/mysqlclient/StoredProcedure.cs
===================================================================
--- trunk/mysqlclient/StoredProcedure.cs 2006-11-02 19:43:46 UTC (rev 453)
+++ trunk/mysqlclient/StoredProcedure.cs 2006-11-02 21:04:23 UTC (rev 454)
@@ -31,110 +31,114 @@
/// </summary>
internal class StoredProcedure : PreparableStatement
{
- private string hash;
- private string outSelect;
- private DataTable parametersTable;
- private string processedCommandText;
+ private string hash;
+ private string outSelect;
+ private DataTable parametersTable;
+ private string processedCommandText;
- public StoredProcedure(MySqlConnection connection, string text) :
- base(connection, text)
+ public StoredProcedure(MySqlConnection connection, string text)
+ :
+ base(connection, text)
{
uint code = (uint)DateTime.Now.GetHashCode();
hash = code.ToString();
- this.connection = connection;
+ this.connection = connection;
}
private string GetReturnParameter()
{
- if (parameters != null)
- foreach (MySqlParameter p in parameters)
- if (p.Direction == ParameterDirection.ReturnValue)
- return hash + p.ParameterName;
+ if (parameters != null)
+ foreach (MySqlParameter p in parameters)
+ if (p.Direction == ParameterDirection.ReturnValue)
+ {
+ string pName = p.ParameterName.Substring(1);
+ return hash + pName;
+ }
return null;
}
- public override string ProcessedCommandText
- {
- get
- {
- if (processedCommandText == null)
- ProcessCommandText();
- return processedCommandText;
- }
- }
+ public override string ProcessedCommandText
+ {
+ get
+ {
+ if (processedCommandText == null)
+ ProcessCommandText();
+ return processedCommandText;
+ }
+ }
- private void ProcessCommandText()
- {
- // first retrieve the procedure definition from our
- // procedure cache
- string spName = commandText;
- if (spName.IndexOf(".") == -1)
- spName = connection.Database + "." + spName;
- DataSet ds = connection.ProcedureCache.GetProcedure(connection, spName);
+ private void ProcessCommandText()
+ {
+ // first retrieve the procedure definition from our
+ // procedure cache
+ string spName = commandText;
+ if (spName.IndexOf(".") == -1)
+ spName = connection.Database + "." + spName;
+ DataSet ds = connection.ProcedureCache.GetProcedure(connection, spName);
- DataTable procTable = ds.Tables["procedures"];
- parametersTable = ds.Tables["procedure parameters"];
+ DataTable procTable = ds.Tables["procedures"];
+ parametersTable = ds.Tables["procedure parameters"];
- StringBuilder sqlStr = new StringBuilder();
- StringBuilder setStr = new StringBuilder();
- outSelect = String.Empty;
+ StringBuilder sqlStr = new StringBuilder();
+ StringBuilder setStr = new StringBuilder();
+ outSelect = String.Empty;
- string retParm = GetReturnParameter();
- foreach (DataRow param in parametersTable.Rows)
- {
- if (param["ORDINAL_POSITION"].Equals(0)) continue;
- string mode = (string)param["PARAMETER_MODE"];
- string pName = (string)param["PARAMETER_NAME"];
- string datatype = (string)param["DATA_TYPE"];
+ string retParm = GetReturnParameter();
+ foreach (DataRow param in parametersTable.Rows)
+ {
+ if (param["ORDINAL_POSITION"].Equals(0)) continue;
+ string mode = (string)param["PARAMETER_MODE"];
+ string pName = (string)param["PARAMETER_NAME"];
+ string datatype = (string)param["DATA_TYPE"];
- // make sure the parameters given to us have an appropriate
- // type set if it's not already
- MySqlParameter p = parameters[pName];
- if (!p.TypeHasBeenSet)
- {
- bool unsigned = param["FLAGS"].ToString().IndexOf("UNSIGNED") != -1;
- bool real_as_float =
procTable.Rows[0]["SQL_MODE"].ToString().IndexOf("REAL_AS_FLOAT") != -1;
- p.MySqlDbType = MetaData.NameToType(datatype, unsigned,
real_as_float, connection);
- }
+ // make sure the parameters given to us have an appropriate
+ // type set if it's not already
+ MySqlParameter p = parameters[pName];
+ if (!p.TypeHasBeenSet)
+ {
+ bool unsigned = param["FLAGS"].ToString().IndexOf("UNSIGNED") != -1;
+ bool real_as_float =
procTable.Rows[0]["SQL_MODE"].ToString().IndexOf("REAL_AS_FLOAT") != -1;
+ p.MySqlDbType = MetaData.NameToType(datatype, unsigned, real_as_float, connection);
+ }
- string basePName = pName.Substring(1);
- string vName = string.Format("@{0}{1}", hash, basePName);
+ string basePName = pName.Substring(1);
+ string vName = string.Format("@{0}{1}", hash, basePName);
- if (mode == "OUT" || mode == "INOUT")
- {
- outSelect += vName + ", ";
- sqlStr.Append(vName);
- sqlStr.Append(", ");
- }
- else
- {
- sqlStr.Append(pName);
- sqlStr.Append(", ");
- }
+ if (mode == "OUT" || mode == "INOUT")
+ {
+ outSelect += vName + ", ";
+ sqlStr.Append(vName);
+ sqlStr.Append(", ");
+ }
+ else
+ {
+ sqlStr.Append(pName);
+ sqlStr.Append(", ");
+ }
- if (mode == "INOUT")
- {
- setStr.AppendFormat("SET {0}={1};", vName, pName);
- outSelect += vName + ", ";
- }
- }
+ if (mode == "INOUT")
+ {
+ setStr.AppendFormat("SET {0}={1};", vName, pName);
+ outSelect += vName + ", ";
+ }
+ }
string sqlCmd = sqlStr.ToString().TrimEnd(' ', ',');
outSelect = outSelect.TrimEnd(' ', ',');
- if (procTable.Rows[0]["ROUTINE_TYPE"].Equals("PROCEDURE"))
- sqlCmd = String.Format("call {0} ({1})", commandText, sqlCmd);
- else
- {
- sqlCmd = String.Format("set @{0}={1} ({2})", retParm,
- commandText, sqlCmd);
- outSelect = String.Format("@{0}", retParm);
- }
+ if (procTable.Rows[0]["ROUTINE_TYPE"].Equals("PROCEDURE"))
+ sqlCmd = String.Format("call {0} ({1})", commandText, sqlCmd);
+ else
+ {
+ sqlCmd = String.Format("set @{0}={1} ({2})", retParm,
+ commandText, sqlCmd);
+ outSelect = String.Format("@{0}", retParm);
+ }
if (setStr.Length > 0)
sqlCmd = setStr.ToString() + sqlCmd;
- string oldCmdText = commandText;
+ string oldCmdText = commandText;
- processedCommandText = sqlCmd;
+ processedCommandText = sqlCmd;
}
public override void Close()
@@ -146,23 +150,23 @@
MySqlCommand cmd = new MySqlCommand("SELECT " + outSelect, connection);
MySqlDataReader reader = cmd.ExecuteReader();
- // since MySQL likes to return user variables as strings
- // we reset the types of the readers internal value objects
- // this will allow those value objects to parse the string based
- // return values
- for (int i=0; i < reader.FieldCount; i++)
+ // since MySQL likes to return user variables as strings
+ // we reset the types of the readers internal value objects
+ // this will allow those value objects to parse the string based
+ // return values
+ for (int i = 0; i < reader.FieldCount; i++)
{
string fieldName = reader.GetName(i);
- fieldName = marker + fieldName.Remove(0, hash.Length+1);
- reader.values[i] =
MySqlField.GetIMySqlValue(parameters[fieldName].MySqlDbType, true);
+ fieldName = marker + fieldName.Remove(0, hash.Length + 1);
+ reader.values[i] = MySqlField.GetIMySqlValue(parameters[fieldName].MySqlDbType,
true);
}
reader.Read();
- for (int i=0; i < reader.FieldCount; i++)
+ for (int i = 0; i < reader.FieldCount; i++)
{
string fieldName = reader.GetName(i);
- fieldName = marker + fieldName.Remove(0, hash.Length+1);
- parameters[fieldName].Value = reader.GetValue(i);
+ fieldName = marker + fieldName.Remove(0, hash.Length + 1);
+ parameters[fieldName].Value = reader.GetValue(i);
}
reader.Close();
}
| Thread |
|---|
| • Connector/NET commit: r454 - in trunk: TestSuite mysqlclient | rburnett | 2 Nov |