SmiSettersStream.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. //------------------------------------------------------------------------------
  2. // <copyright file="SmiSettersStream.cs" company="Microsoft">
  3. // Copyright (c) Microsoft Corporation. All rights reserved.
  4. // </copyright>
  5. // <owner current="true" primary="true">Microsoft</owner>
  6. // <owner current="true" primary="false">Microsoft</owner>
  7. //------------------------------------------------------------------------------
  8. namespace Microsoft.SqlServer.Server {
  9. using System;
  10. using System.Data.Common;
  11. using System.Data.SqlClient;
  12. using System.Diagnostics;
  13. using System.IO;
  14. internal class SmiSettersStream : Stream {
  15. private SmiEventSink_Default _sink;
  16. private ITypedSettersV3 _setters;
  17. private int _ordinal;
  18. private long _lengthWritten;
  19. private SmiMetaData _metaData;
  20. internal SmiSettersStream( SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, SmiMetaData metaData ) {
  21. Debug.Assert( null != sink );
  22. Debug.Assert( null != setters );
  23. Debug.Assert( 0 <= ordinal );
  24. Debug.Assert( null != metaData );
  25. _sink = sink;
  26. _setters = setters;
  27. _ordinal = ordinal;
  28. _lengthWritten = 0;
  29. _metaData = metaData;
  30. }
  31. public override bool CanRead {
  32. get {
  33. return false;
  34. }
  35. }
  36. // If CanSeek is false, Position, Seek, Length, and SetLength should throw.
  37. public override bool CanSeek {
  38. get {
  39. return false;
  40. }
  41. }
  42. public override bool CanWrite {
  43. get {
  44. return true;
  45. }
  46. }
  47. public override long Length {
  48. get {
  49. return _lengthWritten;
  50. }
  51. }
  52. public override long Position {
  53. get {
  54. return _lengthWritten;
  55. }
  56. set {
  57. throw SQL.StreamSeekNotSupported();
  58. }
  59. }
  60. public override void Flush() {
  61. _lengthWritten = ValueUtilsSmi.SetBytesLength(_sink, _setters, _ordinal, _metaData, _lengthWritten);
  62. }
  63. public override long Seek(long offset, SeekOrigin origin) {
  64. throw SQL.StreamSeekNotSupported();
  65. }
  66. public override void SetLength(long value) {
  67. if ( value < 0 ) {
  68. throw ADP.ArgumentOutOfRange("value");
  69. }
  70. ValueUtilsSmi.SetBytesLength(_sink, _setters, _ordinal, _metaData, value);
  71. }
  72. public override int Read(byte[] buffer, int offset, int count) {
  73. throw SQL.StreamReadNotSupported();
  74. }
  75. public override void Write(byte[] buffer, int offset, int count) {
  76. _lengthWritten += ValueUtilsSmi.SetBytes(_sink, _setters, _ordinal, _metaData, _lengthWritten, buffer, offset, count);
  77. }
  78. }
  79. }