2010-07-06 Veerapuram Varadhan <vvaradhan@novell.com>
authorVeerapuram Varadhan <v.varadhan@gmail.com>
Tue, 6 Jul 2010 15:12:32 +0000 (15:12 -0000)
committerVeerapuram Varadhan <v.varadhan@gmail.com>
Tue, 6 Jul 2010 15:12:32 +0000 (15:12 -0000)
** Fixes #609109
* TdsComm.cs (Append[DateTime]): Handle datetime values sanely
that are less than epoch.
(Append[string]): Fix boundary checking for availability of
enough buffer

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

mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/ChangeLog
mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/TdsComm.cs
mcs/class/Mono.Data.Tds/Mono.Data.Tds/ChangeLog
mcs/class/Mono.Data.Tds/Mono.Data.Tds/TdsMetaParameter.cs

index 4b783869034fb6ced5182785ad02e86a15eb1a33..568b9d3cb4fc36ab58fa69f198475cab6e3307ea 100644 (file)
@@ -1,3 +1,9 @@
+2010-07-06  Veerapuram Varadhan  <vvaradhan@novell.com>
+
+       ** Fixes #609109
+       * TdsComm.cs (Append[DateTime]): Handle datetime values sanely that are less than epoch.
+       (Append[string]): Fix boundary checking for availability of enough buffer
+       
 2010-07-03  Veerapuram Varadhan  <vvaradhan@novell.com>
 
        ** Fixes #609935
index 757610daa71c99097a328fcbbf274c0e6019a50e..e245fe8706c02c1f8a1f7021f48d34ce7190e616 100644 (file)
@@ -266,13 +266,28 @@ namespace Mono.Data.Tds.Protocol {
                {
                        DateTime epoch = new DateTime (1900,1,1);
                        
-                       TimeSpan span = t - epoch;
-                       int days = span.Days ;
+                       TimeSpan span = t - epoch; //new TimeSpan (t.Ticks - epoch.Ticks);
+                       int days, hours, minutes, secs;
+                       long msecs;
                        int val = 0;    
 
+                       days = span.Days;
+                       hours = span.Hours;
+                       minutes = span.Minutes;
+                       secs = span.Seconds;
+                       msecs = span.Milliseconds;
+                       
+                       if (epoch > t) {
+                               hours = t.Hour - epoch.Hour;
+                               minutes = t.Minute - epoch.Minute;
+                               secs = t.Second - epoch.Second;
+                               msecs = t.Millisecond - epoch.Millisecond;
+                               days--;
+                       }
+                       
                        SendIfFull (bytes);
                        if (bytes == 8) {
-                               long ms = (span.Hours * 3600 + span.Minutes * 60 + span.Seconds)*1000L + (long)span.Milliseconds;
+                               long ms = (hours * 3600 + minutes * 60 + secs)*1000L + (long)msecs;
                                val = (int) ((ms*300)/1000);
                                AppendInternal ((int) days);
                                AppendInternal ((int) val);
@@ -379,7 +394,7 @@ namespace Mono.Data.Tds.Protocol {
                                int lenToWrite = s.Length * ssize;
                                // if nextOutBufferLength points to the last buffer in outBuffer, 
                                // we would get a DivisionByZero while calculating remBufLen
-                               if (outBufferLength - nextOutBufferIndex < 1)
+                               if (outBufferLength - nextOutBufferIndex < ssize)
                                        SendIfFull (ssize);
                                
                                int remBufLen = outBufferLength - nextOutBufferIndex;
index e298d93919115ab89f9ec6be02a718f38d653e02..20bd6e2e7aa9a59b9f7ad8f7b946ab6c04fb4cd9 100644 (file)
@@ -1,3 +1,8 @@
+2010-07-06  Veerapuram Varadhan  <vvaradhan@novell.com>
+
+       * TdsMetaParameter.cs (Prepare): Use the count of characters in nvarchar 
+       param as the size, to match .NET implementation.
+       
 2010-07-03  Veerapuram Varadhan  <vvaradhan@novell.com>
 
        ** Fixes #609935
index e722106f1a6192dbbb7153db29c68336f4325d54..8ed81f7a16b5fc1f88e7ee63602af5daef36b281 100644 (file)
@@ -246,8 +246,8 @@ namespace Mono.Data.Tds {
                                break;
                        case "nvarchar":
                        case "xml":
-                               int paramSize = GetActualSize ();
-                               result.Append (paramSize > 0 ? (paramSize > 8000 ? "(max)" : String.Format ("({0})", paramSize)) : "(4000)");
+                               int paramSize = GetActualSize () / 2;
+                               result.Append (paramSize > 0 ? (paramSize > 4000 ? "(max)" : String.Format ("({0})", paramSize)) : "(4000)");
                                break;
                        case "char":
                        case "nchar":