1 //------------------------------------------------------------------------------
2 // <copyright file="SqlXmlStorage.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
5 // <owner current="true" primary="true">[....]</owner>
6 // <owner current="true" primary="false">[....]</owner>
7 // <owner current="false" primary="false">[....]</owner>
8 //------------------------------------------------------------------------------
10 namespace System.Data.Common {
14 using System.Xml.Serialization;
15 using System.Data.SqlTypes;
16 using System.Diagnostics;
18 using System.Collections;
19 internal sealed class SqlXmlStorage : DataStorage {
21 private SqlXml[] values;
23 public SqlXmlStorage(DataColumn column)
24 : base(column, typeof(SqlXml), SqlXml.Null, SqlXml.Null, StorageType.Empty) {
27 override public Object Aggregate(int[] records, AggregateType kind) {
30 case AggregateType.First:
31 if (records.Length > 0) {
32 return values[records[0]];
34 return null;// no data => null
36 case AggregateType.Count:
38 for (int i = 0; i < records.Length; i++) {
39 if (!IsNull(records[i]))
45 catch (OverflowException) {
46 throw ExprException.Overflow(typeof(SqlXml));
48 throw ExceptionBuilder.AggregateException(kind, _dataType);
51 override public int Compare(int recordNo1, int recordNo2) {
52 //return values[recordNo1].CompareTo(values[recordNo2]);
56 override public int CompareValueTo(int recordNo, Object value) {
57 // SqlXml valueNo2 = ((value == null)||(value == DBNull.Value))? SqlXml.Null : (SqlXml)value;
58 // return values[recordNo].CompareTo(valueNo2);
62 override public void Copy(int recordNo1, int recordNo2) {
63 values[recordNo2] = values[recordNo1];
66 override public Object Get(int record) {
67 return values[record];
70 override public bool IsNull(int record) {
71 return (values[record].IsNull);
74 override public void Set(int record, Object value) {
75 if ((value == DBNull.Value) || (value == null)){
76 values[record] = SqlXml.Null;
79 values[record] = (SqlXml)value;
83 override public void SetCapacity(int capacity) {
84 SqlXml[] newValues = new SqlXml[capacity];
86 Array.Copy(values, 0, newValues, 0, Math.Min(capacity, values.Length));
91 override public object ConvertXmlToObject(string s) {
92 XmlTextReader reader = new XmlTextReader(s, XmlNodeType.Element, null) ;
93 return (new SqlXml(reader));
96 /* SqlXml newValue = new SqlXml();
98 StringReader strReader = new StringReader(s);
99 XmlTextReader xmlTextReader = new XmlTextReader(strReader);
100 ((IXmlSerializable)newValue).ReadXml(xmlTextReader);
101 xmlTextReader.Close();
106 override public string ConvertObjectToXml(object value) {
107 SqlXml reader = (SqlXml) value;
111 return reader.Value; // SqlXml.Value returns string
115 override protected object GetEmptyStorage(int recordCount) {
116 return new SqlXml[recordCount];
119 override protected void CopyValue(int record, object store, BitArray nullbits, int storeIndex) {
120 SqlXml[] typedStore = (SqlXml[]) store;
121 typedStore[storeIndex] = values[record];
122 nullbits.Set(storeIndex, IsNull(record));
125 override protected void SetStorage(object store, BitArray nullbits) {
126 values = (SqlXml[]) store;
127 //SetNullStorage(nullbits);