1 //------------------------------------------------------------------------------
2 // <copyright file="SmiSettersStream.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
5 // <owner current="true" primary="true">Microsoft</owner>
6 // <owner current="true" primary="false">Microsoft</owner>
7 //------------------------------------------------------------------------------
9 namespace Microsoft
.SqlServer
.Server
{
11 using System
.Data
.Common
;
12 using System
.Data
.SqlClient
;
13 using System
.Diagnostics
;
16 internal class SmiSettersStream
: Stream
{
18 private SmiEventSink_Default _sink
;
19 private ITypedSettersV3 _setters
;
21 private long _lengthWritten
;
22 private SmiMetaData _metaData
;
24 internal SmiSettersStream( SmiEventSink_Default sink
, ITypedSettersV3 setters
, int ordinal
, SmiMetaData metaData
) {
25 Debug
.Assert( null != sink
);
26 Debug
.Assert( null != setters
);
27 Debug
.Assert( 0 <= ordinal
);
28 Debug
.Assert( null != metaData
);
37 public override bool CanRead
{
43 // If CanSeek is false, Position, Seek, Length, and SetLength should throw.
44 public override bool CanSeek
{
50 public override bool CanWrite
{
56 public override long Length
{
58 return _lengthWritten
;
62 public override long Position
{
64 return _lengthWritten
;
67 throw SQL
.StreamSeekNotSupported();
71 public override void Flush() {
72 _lengthWritten
= ValueUtilsSmi
.SetBytesLength(_sink
, _setters
, _ordinal
, _metaData
, _lengthWritten
);
75 public override long Seek(long offset
, SeekOrigin origin
) {
76 throw SQL
.StreamSeekNotSupported();
79 public override void SetLength(long value) {
81 throw ADP
.ArgumentOutOfRange("value");
83 ValueUtilsSmi
.SetBytesLength(_sink
, _setters
, _ordinal
, _metaData
, value);
86 public override int Read(byte[] buffer
, int offset
, int count
) {
87 throw SQL
.StreamReadNotSupported();
90 public override void Write(byte[] buffer
, int offset
, int count
) {
91 _lengthWritten
+= ValueUtilsSmi
.SetBytes(_sink
, _setters
, _ordinal
, _metaData
, _lengthWritten
, buffer
, offset
, count
);