PageRenderTime 50ms CodeModel.GetById 20ms RepoModel.GetById 1ms app.codeStats 0ms

/mcs/class/referencesource/System.Data/System/Data/SQLTypes/SqlTypesSchemaImporter.cs

https://github.com/pruiz/mono
C# | 248 lines | 168 code | 35 blank | 45 comment | 19 complexity | c892dc8902496e6882249506beeafb09 MD5 | raw file
Possible License(s): LGPL-2.0, MPL-2.0-no-copyleft-exception, CC-BY-SA-3.0, GPL-2.0
  1. //------------------------------------------------------------------------------
  2. // <copyright file="SqlTypesSchemaImporter.cs" company="Microsoft">
  3. // Copyright (c) Microsoft Corporation. All rights reserved.
  4. // </copyright>
  5. // <owner current="true" primary="true">dondu</owner>
  6. // <owner current="true" primary="false">Microsoft</owner>
  7. // <owner current="true" primary="false">Microsoft</owner>
  8. //------------------------------------------------------------------------------
  9. namespace System.Data.SqlTypes {
  10. using System;
  11. using System.CodeDom;
  12. using System.CodeDom.Compiler;
  13. using System.Collections;
  14. using System.Collections.Specialized;
  15. using System.Xml;
  16. using System.Xml.Schema;
  17. using System.Xml.Serialization;
  18. using System.Xml.Serialization.Advanced;
  19. public class SqlTypesSchemaImporterExtensionHelper : SchemaImporterExtension {
  20. private string m_name;
  21. private string m_targetNamespace;
  22. private string[] m_references;
  23. private CodeNamespaceImport[] m_namespaceImports;
  24. private string m_destinationType;
  25. private bool m_direct;
  26. public SqlTypesSchemaImporterExtensionHelper(string name,
  27. string targetNamespace,
  28. string[] references,
  29. CodeNamespaceImport[] namespaceImports,
  30. string destinationType,
  31. bool direct) {
  32. Init(name, targetNamespace, references, namespaceImports, destinationType, direct);
  33. }
  34. public SqlTypesSchemaImporterExtensionHelper(string name, string destinationType) {
  35. Init(name, SqlTypesNamespace, null, null, destinationType, true);
  36. }
  37. public SqlTypesSchemaImporterExtensionHelper(string name, string destinationType, bool direct) {
  38. Init(name, SqlTypesNamespace, null, null, destinationType, direct);
  39. }
  40. private void Init(string name,
  41. string targetNamespace,
  42. string[] references,
  43. CodeNamespaceImport[] namespaceImports,
  44. string destinationType,
  45. bool direct) {
  46. m_name = name;
  47. m_targetNamespace = targetNamespace;
  48. if (references == null) {
  49. m_references = new string[1];
  50. m_references[0] = "System.Data.dll";
  51. } else {
  52. m_references = references;
  53. }
  54. if (namespaceImports == null) {
  55. m_namespaceImports = new CodeNamespaceImport[2];
  56. m_namespaceImports[0] = new CodeNamespaceImport("System.Data");
  57. m_namespaceImports[1] = new CodeNamespaceImport("System.Data.SqlTypes");
  58. } else {
  59. m_namespaceImports = namespaceImports;
  60. }
  61. m_destinationType = destinationType;
  62. m_direct = direct;
  63. }
  64. public override string ImportSchemaType(string name,
  65. string xmlNamespace,
  66. XmlSchemaObject context,
  67. XmlSchemas schemas,
  68. XmlSchemaImporter importer,
  69. CodeCompileUnit compileUnit,
  70. CodeNamespace mainNamespace,
  71. CodeGenerationOptions options,
  72. CodeDomProvider codeProvider) {
  73. if (m_direct) {
  74. if (context is XmlSchemaElement) {
  75. if ((0 == string.CompareOrdinal(m_name, name)) && (0 == string.CompareOrdinal(m_targetNamespace, xmlNamespace))) {
  76. compileUnit.ReferencedAssemblies.AddRange(m_references);
  77. mainNamespace.Imports.AddRange(m_namespaceImports);
  78. return m_destinationType;
  79. }
  80. }
  81. }
  82. return null;
  83. }
  84. public override string ImportSchemaType(XmlSchemaType type,
  85. XmlSchemaObject context,
  86. XmlSchemas schemas,
  87. XmlSchemaImporter importer,
  88. CodeCompileUnit compileUnit,
  89. CodeNamespace mainNamespace,
  90. CodeGenerationOptions options,
  91. CodeDomProvider codeProvider) {
  92. if (!m_direct) {
  93. if ((type is XmlSchemaSimpleType) && (context is XmlSchemaElement)) {
  94. XmlSchemaType basetype = ((XmlSchemaSimpleType) type).BaseXmlSchemaType;
  95. XmlQualifiedName qname = basetype.QualifiedName;
  96. if ((0 == string.CompareOrdinal(m_name, qname.Name)) && (0 == string.CompareOrdinal(m_targetNamespace, qname.Namespace))) {
  97. compileUnit.ReferencedAssemblies.AddRange(m_references);
  98. mainNamespace.Imports.AddRange(m_namespaceImports);
  99. return m_destinationType;
  100. }
  101. }
  102. }
  103. return null;
  104. }
  105. protected static readonly string SqlTypesNamespace = "http://schemas.microsoft.com/sqlserver/2004/sqltypes";
  106. };
  107. public sealed class TypeCharSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
  108. public TypeCharSchemaImporterExtension() : base("char", "System.Data.SqlTypes.SqlString", false) { }
  109. }
  110. public sealed class TypeNCharSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
  111. public TypeNCharSchemaImporterExtension() : base("nchar", "System.Data.SqlTypes.SqlString", false) { }
  112. }
  113. public sealed class TypeVarCharSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
  114. public TypeVarCharSchemaImporterExtension() : base("varchar", "System.Data.SqlTypes.SqlString", false) { }
  115. }
  116. public sealed class TypeNVarCharSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
  117. public TypeNVarCharSchemaImporterExtension() : base("nvarchar", "System.Data.SqlTypes.SqlString", false) { }
  118. }
  119. public sealed class TypeTextSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
  120. public TypeTextSchemaImporterExtension() : base("text", "System.Data.SqlTypes.SqlString", false) { }
  121. }
  122. public sealed class TypeNTextSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
  123. public TypeNTextSchemaImporterExtension() : base("ntext", "System.Data.SqlTypes.SqlString", false) { }
  124. }
  125. public sealed class TypeVarBinarySchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
  126. public TypeVarBinarySchemaImporterExtension() : base("varbinary", "System.Data.SqlTypes.SqlBinary", false) { }
  127. }
  128. public sealed class TypeBinarySchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
  129. public TypeBinarySchemaImporterExtension() : base("binary", "System.Data.SqlTypes.SqlBinary", false) { }
  130. }
  131. public sealed class TypeVarImageSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
  132. public TypeVarImageSchemaImporterExtension() : base("image", "System.Data.SqlTypes.SqlBinary", false) { }
  133. }
  134. /*
  135. <xsd:simpleType name=\"timestamp\">
  136. <xsd:restriction base=\"xsd:base64Binary\">
  137. <xsd:maxLength value=\"8\"/>
  138. </xsd:restriction>
  139. </xsd:simpleType>
  140. */
  141. /*
  142. <xsd:simpleType name=\"timestampNumeric\">
  143. <!-- The timestampNumeric type supports a legacy format of timestamp. -->
  144. <xsd:restriction base=\"xsd:long\"/>
  145. </xsd:simpleType>
  146. */
  147. public sealed class TypeDecimalSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
  148. public TypeDecimalSchemaImporterExtension() : base("decimal", "System.Data.SqlTypes.SqlDecimal", false) { }
  149. }
  150. public sealed class TypeNumericSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
  151. public TypeNumericSchemaImporterExtension() : base("numeric", "System.Data.SqlTypes.SqlDecimal", false) { }
  152. }
  153. public sealed class TypeBigIntSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
  154. public TypeBigIntSchemaImporterExtension() : base("bigint", "System.Data.SqlTypes.SqlInt64") { }
  155. }
  156. public sealed class TypeIntSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
  157. public TypeIntSchemaImporterExtension() : base("int", "System.Data.SqlTypes.SqlInt32") { }
  158. }
  159. public sealed class TypeSmallIntSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
  160. public TypeSmallIntSchemaImporterExtension() : base("smallint", "System.Data.SqlTypes.SqlInt16") { }
  161. }
  162. public sealed class TypeTinyIntSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
  163. public TypeTinyIntSchemaImporterExtension() : base("tinyint", "System.Data.SqlTypes.SqlByte") { }
  164. }
  165. public sealed class TypeBitSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
  166. public TypeBitSchemaImporterExtension() : base("bit", "System.Data.SqlTypes.SqlBoolean") { }
  167. }
  168. public sealed class TypeFloatSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
  169. public TypeFloatSchemaImporterExtension() : base("float", "System.Data.SqlTypes.SqlDouble") { }
  170. }
  171. public sealed class TypeRealSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
  172. public TypeRealSchemaImporterExtension() : base("real", "System.Data.SqlTypes.SqlSingle") { }
  173. }
  174. /*
  175. <xsd:simpleType name=\"utcdatetime\">
  176. <xsd:restriction base=\"xsd:dateTime\">
  177. <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]))\"/>
  178. <xsd:maxInclusive value=\"9999-12-31T23:59:59.9999999Z\"/>
  179. <xsd:minInclusive value=\"0001-01-01T00:00:00.0000000Z\"/>
  180. </xsd:restriction>
  181. </xsd:simpleType>
  182. */
  183. public sealed class TypeDateTimeSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
  184. public TypeDateTimeSchemaImporterExtension() : base("datetime", "System.Data.SqlTypes.SqlDateTime") { }
  185. }
  186. public sealed class TypeSmallDateTimeSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
  187. public TypeSmallDateTimeSchemaImporterExtension() : base("smalldatetime", "System.Data.SqlTypes.SqlDateTime") { }
  188. }
  189. public sealed class TypeMoneySchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
  190. public TypeMoneySchemaImporterExtension() : base("money", "System.Data.SqlTypes.SqlMoney") { }
  191. }
  192. public sealed class TypeSmallMoneySchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
  193. public TypeSmallMoneySchemaImporterExtension() : base("smallmoney", "System.Data.SqlTypes.SqlMoney") { }
  194. }
  195. public sealed class TypeUniqueIdentifierSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
  196. public TypeUniqueIdentifierSchemaImporterExtension() : base("uniqueidentifier", "System.Data.SqlTypes.SqlGuid") { }
  197. }
  198. /*
  199. <!-- sql_variant directly maps to xsd:anyType -->
  200. */
  201. /*
  202. <xsd:complexType name=\"xml\" mixed=\"true\">
  203. <xsd:sequence>
  204. <xsd:any minOccurs=\"0\" maxOccurs=\"unbounded\" processContents=\"skip\" />
  205. </xsd:sequence>
  206. </xsd:complexType>
  207. */
  208. /*
  209. <xsd:simpleType name=\"dbobject\">
  210. <xsd:restriction base=\"xsd:anyURI\" />
  211. </xsd:simpleType>
  212. */
  213. }