File: fx\src\data\System\Data\SQLTypes\SqlTypesSchemaImporter.cs
Project: ndp\System.Data.csproj (System.Data)
//------------------------------------------------------------------------------
// <copyright file="SqlTypesSchemaImporter.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
// <owner current="true" primary="true">dondu</owner>
// <owner current="true" primary="false">Microsoft</owner>
// <owner current="true" primary="false">Microsoft</owner>
//------------------------------------------------------------------------------
 
 
namespace System.Data.SqlTypes {
 
    using System;
    using System.CodeDom;
    using System.CodeDom.Compiler;
    using System.Collections;
    using System.Collections.Specialized;
    using System.Xml;
    using System.Xml.Schema;
    using System.Xml.Serialization;
    using System.Xml.Serialization.Advanced;
 
    public class SqlTypesSchemaImporterExtensionHelper : SchemaImporterExtension {
        private string m_name;
        private string m_targetNamespace;
        private string[] m_references;
        private CodeNamespaceImport[] m_namespaceImports;
        private string m_destinationType;
        private bool m_direct;
       public SqlTypesSchemaImporterExtensionHelper(string name,
                                                     string targetNamespace,
                                                     string[] references,
                                                     CodeNamespaceImport[] namespaceImports,
                                                     string destinationType,
                                                     bool direct) {
            Init(name, targetNamespace, references, namespaceImports, destinationType, direct);
        }
        public SqlTypesSchemaImporterExtensionHelper(string name, string destinationType) {
            Init(name, SqlTypesNamespace, null, null, destinationType, true);
        }
        public SqlTypesSchemaImporterExtensionHelper(string name, string destinationType, bool direct) {
            Init(name, SqlTypesNamespace, null, null, destinationType, direct);
        }
        private void Init(string name,
                          string targetNamespace,
                          string[] references,
                          CodeNamespaceImport[] namespaceImports,
                          string destinationType,
                          bool direct) {
            m_name = name;
            m_targetNamespace = targetNamespace;
            if (references == null) {
                m_references = new string[1];
                m_references[0] = "System.Data.dll";
            } else {
                m_references = references;
            }
            if (namespaceImports == null) {
                m_namespaceImports = new CodeNamespaceImport[2];
                m_namespaceImports[0] = new CodeNamespaceImport("System.Data");
                m_namespaceImports[1] = new CodeNamespaceImport("System.Data.SqlTypes");
            } else {
                m_namespaceImports = namespaceImports;
            }
            m_destinationType = destinationType;
            m_direct = direct;
        }
        public override string ImportSchemaType(string name,
                                                string xmlNamespace,
                                                XmlSchemaObject context,
                                                XmlSchemas schemas,
                                                XmlSchemaImporter importer,
                                                CodeCompileUnit compileUnit,
                                                CodeNamespace mainNamespace,
                                                CodeGenerationOptions options,
                                                CodeDomProvider codeProvider) {
            if (m_direct) {
                if (context is XmlSchemaElement) {
                    if ((0 == string.CompareOrdinal(m_name, name)) && (0 == string.CompareOrdinal(m_targetNamespace, xmlNamespace))) {
                        compileUnit.ReferencedAssemblies.AddRange(m_references);
                        mainNamespace.Imports.AddRange(m_namespaceImports);
                        return m_destinationType;
                    }
                }
            }
            return null;
        }
        public override string ImportSchemaType(XmlSchemaType type,
                                                XmlSchemaObject context,
                                                XmlSchemas schemas,
                                                XmlSchemaImporter importer,
                                                CodeCompileUnit compileUnit,
                                                CodeNamespace mainNamespace,
                                                CodeGenerationOptions options,
                                                CodeDomProvider codeProvider) {
            if (!m_direct) {
                if ((type is XmlSchemaSimpleType) && (context is XmlSchemaElement)) {
                    XmlSchemaType basetype = ((XmlSchemaSimpleType) type).BaseXmlSchemaType;
                    XmlQualifiedName qname = basetype.QualifiedName;
                    if ((0 == string.CompareOrdinal(m_name, qname.Name)) && (0 == string.CompareOrdinal(m_targetNamespace, qname.Namespace))) {
                        compileUnit.ReferencedAssemblies.AddRange(m_references);
                        mainNamespace.Imports.AddRange(m_namespaceImports);
                        return m_destinationType;
                    }
                }
            }
            return null;
        }
 
        protected static readonly string SqlTypesNamespace = "http://schemas.microsoft.com/sqlserver/2004/sqltypes";
    };
    
    public sealed class TypeCharSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
        public TypeCharSchemaImporterExtension() : base("char", "System.Data.SqlTypes.SqlString", false) { }
    }
 
    public sealed class TypeNCharSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
        public TypeNCharSchemaImporterExtension() : base("nchar", "System.Data.SqlTypes.SqlString", false) { }
    }
 
    public sealed class TypeVarCharSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
        public TypeVarCharSchemaImporterExtension() : base("varchar", "System.Data.SqlTypes.SqlString", false) { }
    }
 
    public sealed class TypeNVarCharSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
        public TypeNVarCharSchemaImporterExtension() : base("nvarchar", "System.Data.SqlTypes.SqlString", false) { }
    }
 
    public sealed class TypeTextSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
        public TypeTextSchemaImporterExtension() : base("text", "System.Data.SqlTypes.SqlString", false) { }
    }
 
    public sealed class TypeNTextSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
        public TypeNTextSchemaImporterExtension() : base("ntext", "System.Data.SqlTypes.SqlString", false) { }
    }
 
    public sealed class TypeVarBinarySchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
        public TypeVarBinarySchemaImporterExtension() : base("varbinary", "System.Data.SqlTypes.SqlBinary", false) { }
    }
 
    public sealed class TypeBinarySchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
        public TypeBinarySchemaImporterExtension() : base("binary", "System.Data.SqlTypes.SqlBinary", false) { }
    }
 
    public sealed class TypeVarImageSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
        public TypeVarImageSchemaImporterExtension() : base("image", "System.Data.SqlTypes.SqlBinary", false) { }
    }
 
/*
  <xsd:simpleType name=\"timestamp\">
    <xsd:restriction base=\"xsd:base64Binary\">
      <xsd:maxLength value=\"8\"/>
    </xsd:restriction>
  </xsd:simpleType>
*/
 
/*
  <xsd:simpleType name=\"timestampNumeric\">
  <!-- The timestampNumeric type supports a legacy format of timestamp. -->
    <xsd:restriction base=\"xsd:long\"/>
  </xsd:simpleType>
*/
 
    public sealed class TypeDecimalSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
        public TypeDecimalSchemaImporterExtension() : base("decimal", "System.Data.SqlTypes.SqlDecimal", false) { }
    }
 
    public sealed class TypeNumericSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
        public TypeNumericSchemaImporterExtension() : base("numeric", "System.Data.SqlTypes.SqlDecimal", false) { }
    }
 
    public sealed class TypeBigIntSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
        public TypeBigIntSchemaImporterExtension() : base("bigint", "System.Data.SqlTypes.SqlInt64") { }
    }
 
    public sealed class TypeIntSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
        public TypeIntSchemaImporterExtension() : base("int", "System.Data.SqlTypes.SqlInt32") { }
    }
 
    public sealed class TypeSmallIntSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
        public TypeSmallIntSchemaImporterExtension() : base("smallint", "System.Data.SqlTypes.SqlInt16") { }
    }
 
    public sealed class TypeTinyIntSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
        public TypeTinyIntSchemaImporterExtension() : base("tinyint", "System.Data.SqlTypes.SqlByte") { }
    }
 
    public sealed class TypeBitSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
        public TypeBitSchemaImporterExtension() : base("bit", "System.Data.SqlTypes.SqlBoolean") { }
    }
 
    public sealed class TypeFloatSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
        public TypeFloatSchemaImporterExtension() : base("float", "System.Data.SqlTypes.SqlDouble") { }
    }
 
    public sealed class TypeRealSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
        public TypeRealSchemaImporterExtension() : base("real", "System.Data.SqlTypes.SqlSingle") { }
    }
 
/*
  <xsd:simpleType name=\"utcdatetime\">
    <xsd:restriction base=\"xsd:dateTime\">
      <xsd:pattern value=\"((000[1-9])|(00[1-9][0-9])|(0[1-9][0-9]{2})|([1-9][0-9]{3}))-((0[1-9])|(1[0,1,2]))-((0[1-9])|([1,2][0-9])|(3[0,1]))T(([0,1][0-9])|(2[0-3]))(:[0-5][0-9]){2}\.[0-9]{7}(Z|(\-|\+)(((0[1-9])|(1[0-2])):[0-5][0-9]))\"/>
      <xsd:maxInclusive value=\"9999-12-31T23:59:59.9999999Z\"/>
      <xsd:minInclusive value=\"0001-01-01T00:00:00.0000000Z\"/>
    </xsd:restriction>
  </xsd:simpleType>
*/
 
    public sealed class TypeDateTimeSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
        public TypeDateTimeSchemaImporterExtension() : base("datetime", "System.Data.SqlTypes.SqlDateTime") { }
    }
 
    public sealed class TypeSmallDateTimeSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
        public TypeSmallDateTimeSchemaImporterExtension() : base("smalldatetime", "System.Data.SqlTypes.SqlDateTime") { }
    }
 
    public sealed class TypeMoneySchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
        public TypeMoneySchemaImporterExtension() : base("money", "System.Data.SqlTypes.SqlMoney") { }
    }
 
    public sealed class TypeSmallMoneySchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
        public TypeSmallMoneySchemaImporterExtension() : base("smallmoney", "System.Data.SqlTypes.SqlMoney") { }
    }
 
    public sealed class TypeUniqueIdentifierSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
        public TypeUniqueIdentifierSchemaImporterExtension() : base("uniqueidentifier", "System.Data.SqlTypes.SqlGuid") { }
    }
 
/*
  <!-- sql_variant directly maps to xsd:anyType -->
*/
 
/*
  <xsd:complexType name=\"xml\" mixed=\"true\">
    <xsd:sequence>
      <xsd:any minOccurs=\"0\" maxOccurs=\"unbounded\" processContents=\"skip\" />
    </xsd:sequence>
  </xsd:complexType>
*/
 
/*
  <xsd:simpleType name=\"dbobject\">
    <xsd:restriction base=\"xsd:anyURI\" />
  </xsd:simpleType>
*/
 
}