* OdbcParameterTest.cs: Fixed compilation on 1.0 profile.
[mono.git] / mcs / class / System.Data / System.Data.SqlTypes / SqlString.cs
index b1e57915b0acef2485175a81439192e28fe221f4..02d903a48df2c6529155036b31f3080e1d5ce1ad 100644 (file)
@@ -92,7 +92,10 @@ namespace System.Data.SqlTypes
                {
                        this.value = data;
                        lcid = CultureInfo.CurrentCulture.LCID;
-                       notNull = true;
+                       if (value != null)
+                               notNull = true;
+                       else
+                               notNull = false;
                        this.compareOptions = SqlCompareOptions.IgnoreCase |
                                SqlCompareOptions.IgnoreKanaType |
                                SqlCompareOptions.IgnoreWidth;
@@ -103,7 +106,10 @@ namespace System.Data.SqlTypes
                {
                        this.value = data;
                        this.lcid = lcid;
-                       notNull = true;
+                       if (value != null)
+                               notNull = true;
+                       else
+                               notNull = false;
                        this.compareOptions = SqlCompareOptions.IgnoreCase |
                                SqlCompareOptions.IgnoreKanaType |
                                SqlCompareOptions.IgnoreWidth;
@@ -120,7 +126,10 @@ namespace System.Data.SqlTypes
                        this.value = data;
                        this.lcid = lcid;
                        this.compareOptions = compareOptions;
-                       notNull = true;
+                       if (value != null)
+                               notNull = true;
+                       else
+                               notNull = false;
                }
 
                // init with locale id, compare options, array of bytes data,
@@ -131,7 +140,10 @@ namespace System.Data.SqlTypes
                        this.value = encoding.GetString (data);
                        this.lcid = lcid;
                        this.compareOptions = compareOptions;
-                       notNull = true;
+                       if (value != null)
+                               notNull = true;
+                       else
+                               notNull = false;
                }
 
                // init with locale id, compare options, array of bytes data,
@@ -150,7 +162,10 @@ namespace System.Data.SqlTypes
                        this.value = encoding.GetString (data, index, count);
                        this.lcid = lcid;
                        this.compareOptions = compareOptions;
-                       notNull = true;
+                       if (value != null)
+                               notNull = true;
+                       else
+                               notNull = false;
                }
 
                #endregion // Constructors
@@ -274,8 +289,8 @@ namespace System.Data.SqlTypes
                {
                        if (!(value is SqlString))
                                return false;
-                       if (this.IsNull && ((SqlString)value).IsNull)
-                               return true;
+                       if (this.IsNull)
+                               return ((SqlString)value).IsNull;
                        else if (((SqlString)value).IsNull)
                                return false;
                        else
@@ -409,11 +424,8 @@ namespace System.Data.SqlTypes
                {
                         if (x.IsNull || y.IsNull)
                                 return SqlString.Null;
-
-                       if (( x == null) || (y == null))
-                                return SqlString.Null;
-                       
-                       return new SqlString (x.Value + y.Value);
+                       else
+                               return new SqlString (x.Value + y.Value);
                }
 
                // Equality
@@ -572,18 +584,17 @@ namespace System.Data.SqlTypes
                        return new SqlString (x);
                }
 
-               #if NET_2_0
+#if NET_2_0
                 public static SqlString Add (SqlString x, SqlString y)
                 {
-                       return ( x + y);
-                                                                                                    
+                       return (x + y);
                 }
 
                public int CompareTo (SqlString value)
                 {
                        return CompareSqlString (value);
                 }
-                #endif
+#endif
 
 
 
@@ -591,26 +602,60 @@ namespace System.Data.SqlTypes
 #if NET_2_0
                public static XmlQualifiedName GetXsdType (XmlSchemaSet schemaSet)
                {
-                       XmlQualifiedName qualifiedName = new XmlQualifiedName ("string", "http://www.w3.org/2001/XMLSchema");
-                       return qualifiedName;
+                       if (schemaSet != null && schemaSet.Count == 0) {
+                               XmlSchema xs = new XmlSchema ();
+                               XmlSchemaComplexType ct = new XmlSchemaComplexType ();
+                               ct.Name = "string";
+                               xs.Items.Add (ct);
+                               schemaSet.Add (xs);
+                       }
+                       return new XmlQualifiedName ("string", "http://www.w3.org/2001/XMLSchema");
                }
 
-               [MonoTODO]
                XmlSchema IXmlSerializable.GetSchema ()
                {
-                       throw new NotImplementedException ();
+                       return null;
                }
                
-               [MonoTODO]
                void IXmlSerializable.ReadXml (XmlReader reader)
                {
-                       throw new NotImplementedException ();
+                       if (reader == null)
+                               return;
+
+                       switch (reader.ReadState) {
+                       case ReadState.EndOfFile:
+                       case ReadState.Error:
+                       case ReadState.Closed:
+                               return;
+                       }
+                       // Skip XML declaration and prolog
+                       // or do I need to validate for the <string> tag?
+                       reader.MoveToContent ();
+                       if (reader.EOF)
+                               return;
+                       
+                       reader.Read ();
+                       if (reader.NodeType == XmlNodeType.EndElement)
+                               return;
+
+                       if (reader.Value.Length > 0) {
+                               if (String.Compare ("Null", reader.Value) == 0) {
+                                       // means a null reference/invalid value
+                                       notNull = false;
+                                       return; 
+                               }
+                               // FIXME: Validate the value for expected format
+                               this.value = reader.Value;
+                               this.notNull = true;
+                               this.compareOptions = SqlCompareOptions.IgnoreCase |
+                                       SqlCompareOptions.IgnoreKanaType |
+                                       SqlCompareOptions.IgnoreWidth;
+                       }
                }
                
-               [MonoTODO]
                void IXmlSerializable.WriteXml (XmlWriter writer) 
                {
-                       throw new NotImplementedException ();
+                       writer.WriteString (this.ToString ());
                }
 #endif
        }