2002-10-04 Daniel Morgan <danmorg@sc.rr.com>
authorDaniel Morgan <monodanmorg@yahoo.com>
Fri, 4 Oct 2002 15:13:57 +0000 (15:13 -0000)
committerDaniel Morgan <monodanmorg@yahoo.com>
Fri, 4 Oct 2002 15:13:57 +0000 (15:13 -0000)
* SqlSharpCli.cs: modified
  - fix compile errors due to mcs has better error checking
  - fix exection of query with semicolon at end which resulted in an exception
  - added support for ? postioned parameters
  - added support for [] delimited named parameters
  - misc. tidbits

svn path=/trunk/mcs/; revision=7981

mcs/class/System.Data/Test/ChangeLog
mcs/class/System.Data/Test/SqlSharpCli.cs
mcs/tools/SqlSharp/SqlSharpCli.cs

index 3addb994a2594c87a1ea449b3fc2fa2bf08fdbe7..9f5d9b41a5eb5e147fe00226123faf5d4ae57e18 100644 (file)
@@ -1,3 +1,12 @@
+2002-10-04  Daniel Morgan <danmorg@sc.rr.com>
+
+       * SqlSharpCli.cs: modified 
+         - fix compile errors due to mcs has better error checking
+         - fix exection of query with semicolon at end which resulted in an exception
+         - added support for ? postioned parameters
+         - added support for [] delimited named parameters
+         - misc. tidbits
+
 2002-10-03  ville <vi64pa@koti.soon.fi>
 
        * System.Data.SqlClient/AllTests.cs:
index 87be0b72d8b11176803103ad710a3d460a5d7bd6..062dddd73406e2235196bb7e60fd0c5e084f070c 100644 (file)
@@ -339,9 +339,9 @@ namespace Mono.Data.SqlSharp {
                public void BuildParameters(IDbCommand cmd) {
                        ParametersBuilder parmsBuilder = \r
                                new ParametersBuilder(cmd, \r
-                               BindVariableCharacter.Semicolon);\r
+                               BindVariableCharacter.Colon);\r
                        \r
-                       Console.WriteLine("GetParms...");\r
+                       Console.WriteLine("Get Parameters (if any)...");\r
                        parmsBuilder.ParseParameters();\r
                        IList parms = (IList) cmd.Parameters;\r
                \r
@@ -354,15 +354,24 @@ namespace Mono.Data.SqlSharp {
                                \r
                                string inValue = "";\r
                                bool found;\r
-                               found = GetInternalVariable(theParmName, out inValue);\r
-                               if(found == true) {\r
+                               if(parmsBuilder.ParameterMarkerCharacter == '?') {\r
+                                       Console.Write("Enter Parameter " + \r
+                                               (p + 1).ToString() +\r
+                                               ": ");\r
+                                       inValue = Console.ReadLine();\r
                                        prm.Value = inValue;\r
                                }\r
                                else {\r
-                                       Console.Write("Enter Parameter " + (p + 1).ToString() +\r
-                                               ": " + theParmName + ": ");\r
-                                       inValue = Console.ReadLine();\r
-                                       prm.Value = inValue;\r
+                                       found = GetInternalVariable(theParmName, out inValue);\r
+                                       if(found == true) {\r
+                                               prm.Value = inValue;\r
+                                       }\r
+                                       else {\r
+                                               Console.Write("Enter Parameter " + (p + 1).ToString() +\r
+                                                       ": " + theParmName + ": ");\r
+                                               inValue = Console.ReadLine();\r
+                                               prm.Value = inValue;\r
+                                       }\r
                                }\r
                        }
                        parmsBuilder = null;
@@ -437,7 +446,7 @@ namespace Mono.Data.SqlSharp {
                }
 
                public void ExecuteSqlScalar(string sql) {
-                       Console.WriteLine("Execute SQL Non Query: " + sql);
+                       Console.WriteLine("Execute SQL Scalar: " + sql);
 
                        IDbCommand cmd = null;
                        string retrievedValue = "";
@@ -546,6 +555,12 @@ namespace Mono.Data.SqlSharp {
                                        conn = new OleDbConnection();
                                        break;
                                case "POSTGRESQL":
+                                       // FIXME: System.Data.SqlClient should
+                                       //        be used for MS SQL Server 7/2000
+                                       //        and move the PostgreSQL provider
+                                       //        to Mono.Data.PostgreSQL
+                                       //        and use a connection class
+                                       //        PgSqlConnection
                                        conn = new SqlConnection();
                                        break;
                                case "LOADEXTPROVIDER":
@@ -644,9 +659,6 @@ namespace Mono.Data.SqlSharp {
                                connectionString = "";
                }
 
-               public void ReadCommandsFromFile(StreamReader inCmds) {
-               }
-
                public void SetupOutputResultsFile(string[] parms) {\r
                        if(parms.Length != 2) {
                                Console.WriteLine("Error: wrong number of parameters");
@@ -991,7 +1003,8 @@ namespace Mono.Data.SqlSharp {
                                if(build == null)
                                        Console.WriteLine("SQL Buffer is empty.");
                                else
-                                       Console.WriteLine("SQL Bufer\n" + buff);
+                                       Console.WriteLine("SQL Bufer:\n" + buff);
+                               break;
                        default:
                                // Error
                                Console.WriteLine("Error: Unknown user command.");
@@ -1089,7 +1102,7 @@ namespace Mono.Data.SqlSharp {
                                                        build = new StringBuilder();
                                                }
                                                build.Append(entry);
-                                               build.Append("\n");
+                                               //build.Append("\n");
                                                buff = build.ToString();
                                                ExecuteSql(buff);
                                                build = null;
@@ -1111,10 +1124,11 @@ namespace Mono.Data.SqlSharp {
                }
        }
 
-       enum BindVariableCharacter {\r
-               Semicolon,    // ';'\r
-               At,           // '@'\r
-               QuestionMark  // '?'\r
+       public enum BindVariableCharacter {\r
+               Colon,         // ':'  - named parameter - :name\r
+               At,            // '@'  - named parameter - @name\r
+               QuestionMark,  // '?'  - positioned parameter - ?\r
+               SquareBrackets // '[]' - delimited named parameter - [name]\r
        }\r
 \r
        public class ParametersBuilder {\r
@@ -1127,12 +1141,15 @@ namespace Mono.Data.SqlSharp {
                        \r
                private void SetBindCharacter() {\r
                        switch(bindCharSetting) {\r
-                       case BindVariableCharacter.Semicolon:\r
+                       case BindVariableCharacter.Colon:\r
                                bindChar = ':';\r
                                break;\r
                        case BindVariableCharacter.At:\r
                                bindChar = '@';\r
                                break;\r
+                       case BindVariableCharacter.SquareBrackets:\r
+                               bindChar = '[';\r
+                               break;\r
                        case BindVariableCharacter.QuestionMark:\r
                                bindChar = '?';\r
                                break;\r
@@ -1147,6 +1164,12 @@ namespace Mono.Data.SqlSharp {
                        SetBindCharacter();\r
                }       \r
 \r
+               public char ParameterMarkerCharacter {\r
+                       get {\r
+                               return bindChar;\r
+                       }\r
+               }\r
+\r
                public int ParseParameters() {  \r
 \r
                        int numParms = 0;\r
@@ -1165,28 +1188,64 @@ namespace Mono.Data.SqlSharp {
                                }\r
                                else if(chars[i] == bindChar && \r
                                        bStringConstFound == false) {\r
-                                       StringBuilder parm = new StringBuilder();\r
-                                       i++;\r
-                                       while(i <= chars.Length) {\r
-                                               char ch;\r
-                                               if(i == chars.Length)\r
-                                                       ch = ' '; // a space\r
-                                               else\r
-                                                       ch = chars[i];\r
+                                       if(bindChar != '?') {\r
+                                               StringBuilder parm = new StringBuilder();\r
+                                               i++;\r
+                                               if(bindChar.Equals('[')) {\r
+                                                       bool endingBracketFound = false;\r
+                                                       while(i <= chars.Length) {\r
+                                                               char ch;\r
+                                                               if(i == chars.Length)\r
+                                                                       ch = ' '; // a space\r
+                                                               else\r
+                                                                       ch = chars[i];\r
 \r
-                                               if(Char.IsLetterOrDigit(ch)) {\r
-                                                       parm.Append(ch);\r
+                                                               if(Char.IsLetterOrDigit(ch) || ch == ' ') {\r
+                                                                       parm.Append(ch);\r
+                                                               }\r
+                                                               else if (ch == ']') {\r
+                                                                       endingBracketFound = true;\r
+                                                                       string p = parm.ToString();\r
+                                                                       AddParameter(p);\r
+                                                                       numParms ++;\r
+                                                                       break;\r
+                                                               }\r
+                                                               else throw new Exception("SQL Parser Error: Invalid character in parameter name");\r
+                                                               i++;\r
+                                                       }\r
+                                                       i--;\r
+                                                       if(endingBracketFound == false)\r
+                                                               throw new Exception("SQL Parser Error: Ending bracket not found for parameter");\r
                                                }\r
                                                else {\r
+                                                       while(i <= chars.Length) {\r
+                                                               char ch;\r
+                                                               if(i == chars.Length)\r
+                                                                       ch = ' '; // a space\r
+                                                               else\r
+                                                                       ch = chars[i];\r
 \r
-                                                       string p = parm.ToString();\r
-                                                       AddParameter(p);\r
-                                                       numParms ++;\r
-                                                       break;\r
+                                                               if(Char.IsLetterOrDigit(ch)) {\r
+                                                                       parm.Append(ch);\r
+                                                               }\r
+                                                               else {\r
+\r
+                                                                       string p = parm.ToString();\r
+                                                                       AddParameter(p);\r
+                                                                       numParms ++;\r
+                                                                       break;\r
+                                                               }\r
+                                                               i++;\r
+                                                       }\r
+                                                       i--;\r
                                                }\r
-                                               i++;\r
                                        }\r
-                                       i--;\r
+                                       else {\r
+                                               // placeholder paramaeter for ?\r
+                                               string p = numParms.ToString();\r
+                                               AddParameter(p);\r
+                                               numParms ++;\r
+                                       }\r
                                }                       \r
                        }\r
                        return numParms;\r
index 87be0b72d8b11176803103ad710a3d460a5d7bd6..062dddd73406e2235196bb7e60fd0c5e084f070c 100644 (file)
@@ -339,9 +339,9 @@ namespace Mono.Data.SqlSharp {
                public void BuildParameters(IDbCommand cmd) {
                        ParametersBuilder parmsBuilder = \r
                                new ParametersBuilder(cmd, \r
-                               BindVariableCharacter.Semicolon);\r
+                               BindVariableCharacter.Colon);\r
                        \r
-                       Console.WriteLine("GetParms...");\r
+                       Console.WriteLine("Get Parameters (if any)...");\r
                        parmsBuilder.ParseParameters();\r
                        IList parms = (IList) cmd.Parameters;\r
                \r
@@ -354,15 +354,24 @@ namespace Mono.Data.SqlSharp {
                                \r
                                string inValue = "";\r
                                bool found;\r
-                               found = GetInternalVariable(theParmName, out inValue);\r
-                               if(found == true) {\r
+                               if(parmsBuilder.ParameterMarkerCharacter == '?') {\r
+                                       Console.Write("Enter Parameter " + \r
+                                               (p + 1).ToString() +\r
+                                               ": ");\r
+                                       inValue = Console.ReadLine();\r
                                        prm.Value = inValue;\r
                                }\r
                                else {\r
-                                       Console.Write("Enter Parameter " + (p + 1).ToString() +\r
-                                               ": " + theParmName + ": ");\r
-                                       inValue = Console.ReadLine();\r
-                                       prm.Value = inValue;\r
+                                       found = GetInternalVariable(theParmName, out inValue);\r
+                                       if(found == true) {\r
+                                               prm.Value = inValue;\r
+                                       }\r
+                                       else {\r
+                                               Console.Write("Enter Parameter " + (p + 1).ToString() +\r
+                                                       ": " + theParmName + ": ");\r
+                                               inValue = Console.ReadLine();\r
+                                               prm.Value = inValue;\r
+                                       }\r
                                }\r
                        }
                        parmsBuilder = null;
@@ -437,7 +446,7 @@ namespace Mono.Data.SqlSharp {
                }
 
                public void ExecuteSqlScalar(string sql) {
-                       Console.WriteLine("Execute SQL Non Query: " + sql);
+                       Console.WriteLine("Execute SQL Scalar: " + sql);
 
                        IDbCommand cmd = null;
                        string retrievedValue = "";
@@ -546,6 +555,12 @@ namespace Mono.Data.SqlSharp {
                                        conn = new OleDbConnection();
                                        break;
                                case "POSTGRESQL":
+                                       // FIXME: System.Data.SqlClient should
+                                       //        be used for MS SQL Server 7/2000
+                                       //        and move the PostgreSQL provider
+                                       //        to Mono.Data.PostgreSQL
+                                       //        and use a connection class
+                                       //        PgSqlConnection
                                        conn = new SqlConnection();
                                        break;
                                case "LOADEXTPROVIDER":
@@ -644,9 +659,6 @@ namespace Mono.Data.SqlSharp {
                                connectionString = "";
                }
 
-               public void ReadCommandsFromFile(StreamReader inCmds) {
-               }
-
                public void SetupOutputResultsFile(string[] parms) {\r
                        if(parms.Length != 2) {
                                Console.WriteLine("Error: wrong number of parameters");
@@ -991,7 +1003,8 @@ namespace Mono.Data.SqlSharp {
                                if(build == null)
                                        Console.WriteLine("SQL Buffer is empty.");
                                else
-                                       Console.WriteLine("SQL Bufer\n" + buff);
+                                       Console.WriteLine("SQL Bufer:\n" + buff);
+                               break;
                        default:
                                // Error
                                Console.WriteLine("Error: Unknown user command.");
@@ -1089,7 +1102,7 @@ namespace Mono.Data.SqlSharp {
                                                        build = new StringBuilder();
                                                }
                                                build.Append(entry);
-                                               build.Append("\n");
+                                               //build.Append("\n");
                                                buff = build.ToString();
                                                ExecuteSql(buff);
                                                build = null;
@@ -1111,10 +1124,11 @@ namespace Mono.Data.SqlSharp {
                }
        }
 
-       enum BindVariableCharacter {\r
-               Semicolon,    // ';'\r
-               At,           // '@'\r
-               QuestionMark  // '?'\r
+       public enum BindVariableCharacter {\r
+               Colon,         // ':'  - named parameter - :name\r
+               At,            // '@'  - named parameter - @name\r
+               QuestionMark,  // '?'  - positioned parameter - ?\r
+               SquareBrackets // '[]' - delimited named parameter - [name]\r
        }\r
 \r
        public class ParametersBuilder {\r
@@ -1127,12 +1141,15 @@ namespace Mono.Data.SqlSharp {
                        \r
                private void SetBindCharacter() {\r
                        switch(bindCharSetting) {\r
-                       case BindVariableCharacter.Semicolon:\r
+                       case BindVariableCharacter.Colon:\r
                                bindChar = ':';\r
                                break;\r
                        case BindVariableCharacter.At:\r
                                bindChar = '@';\r
                                break;\r
+                       case BindVariableCharacter.SquareBrackets:\r
+                               bindChar = '[';\r
+                               break;\r
                        case BindVariableCharacter.QuestionMark:\r
                                bindChar = '?';\r
                                break;\r
@@ -1147,6 +1164,12 @@ namespace Mono.Data.SqlSharp {
                        SetBindCharacter();\r
                }       \r
 \r
+               public char ParameterMarkerCharacter {\r
+                       get {\r
+                               return bindChar;\r
+                       }\r
+               }\r
+\r
                public int ParseParameters() {  \r
 \r
                        int numParms = 0;\r
@@ -1165,28 +1188,64 @@ namespace Mono.Data.SqlSharp {
                                }\r
                                else if(chars[i] == bindChar && \r
                                        bStringConstFound == false) {\r
-                                       StringBuilder parm = new StringBuilder();\r
-                                       i++;\r
-                                       while(i <= chars.Length) {\r
-                                               char ch;\r
-                                               if(i == chars.Length)\r
-                                                       ch = ' '; // a space\r
-                                               else\r
-                                                       ch = chars[i];\r
+                                       if(bindChar != '?') {\r
+                                               StringBuilder parm = new StringBuilder();\r
+                                               i++;\r
+                                               if(bindChar.Equals('[')) {\r
+                                                       bool endingBracketFound = false;\r
+                                                       while(i <= chars.Length) {\r
+                                                               char ch;\r
+                                                               if(i == chars.Length)\r
+                                                                       ch = ' '; // a space\r
+                                                               else\r
+                                                                       ch = chars[i];\r
 \r
-                                               if(Char.IsLetterOrDigit(ch)) {\r
-                                                       parm.Append(ch);\r
+                                                               if(Char.IsLetterOrDigit(ch) || ch == ' ') {\r
+                                                                       parm.Append(ch);\r
+                                                               }\r
+                                                               else if (ch == ']') {\r
+                                                                       endingBracketFound = true;\r
+                                                                       string p = parm.ToString();\r
+                                                                       AddParameter(p);\r
+                                                                       numParms ++;\r
+                                                                       break;\r
+                                                               }\r
+                                                               else throw new Exception("SQL Parser Error: Invalid character in parameter name");\r
+                                                               i++;\r
+                                                       }\r
+                                                       i--;\r
+                                                       if(endingBracketFound == false)\r
+                                                               throw new Exception("SQL Parser Error: Ending bracket not found for parameter");\r
                                                }\r
                                                else {\r
+                                                       while(i <= chars.Length) {\r
+                                                               char ch;\r
+                                                               if(i == chars.Length)\r
+                                                                       ch = ' '; // a space\r
+                                                               else\r
+                                                                       ch = chars[i];\r
 \r
-                                                       string p = parm.ToString();\r
-                                                       AddParameter(p);\r
-                                                       numParms ++;\r
-                                                       break;\r
+                                                               if(Char.IsLetterOrDigit(ch)) {\r
+                                                                       parm.Append(ch);\r
+                                                               }\r
+                                                               else {\r
+\r
+                                                                       string p = parm.ToString();\r
+                                                                       AddParameter(p);\r
+                                                                       numParms ++;\r
+                                                                       break;\r
+                                                               }\r
+                                                               i++;\r
+                                                       }\r
+                                                       i--;\r
                                                }\r
-                                               i++;\r
                                        }\r
-                                       i--;\r
+                                       else {\r
+                                               // placeholder paramaeter for ?\r
+                                               string p = numParms.ToString();\r
+                                               AddParameter(p);\r
+                                               numParms ++;\r
+                                       }\r
                                }                       \r
                        }\r
                        return numParms;\r