internal SqlDataRecord(SmiRecordBuffer recordBuffer, params SmiExtendedMetaData[] metaData)
        {
            Debug.Assert(null != recordBuffer, "invalid attempt to instantiate SqlDataRecord with null SmiRecordBuffer");
            Debug.Assert(null != metaData, "invalid attempt to instantiate SqlDataRecord with null SmiExtendedMetaData[]");

            _columnMetaData    = new SqlMetaData[metaData.Length];
            _columnSmiMetaData = new SmiExtendedMetaData[metaData.Length];
            for (int i = 0; i < _columnSmiMetaData.Length; i++)
            {
                _columnSmiMetaData[i] = metaData[i];
                _columnMetaData[i]    = MetaDataUtilsSmi.SmiExtendedMetaDataToSqlMetaData(_columnSmiMetaData[i]);
            }

            _eventSink = new SmiEventSink_Default( );

            if (InOutOfProcHelper.InProc)
            {
                _recordContext = SmiContextFactory.Instance.GetCurrentContext();
            }
            else
            {
                _recordContext = null;
            }
            _recordBuffer = recordBuffer;
            _eventSink.ProcessMessagesAndThrow();
        }
Exemplo n.º 2
0
 internal void OnOutOfScope( )
 {
     _metaDataSent        = null;
     _recordBufferSent    = null;
     _hadErrorInResultSet = false;
     _isBusy = false;
 }
Exemplo n.º 3
0
        public void SendResultsStart(SqlDataRecord record)
        {
            ADP.CheckArgumentNull(record, "record");

            SetPipeBusy( );
            try {
                EnsureNormalSendValid("SendResultsStart");

                SmiRecordBuffer recordBuffer = record.RecordBuffer;
                if (record.RecordContext == _smiContext)
                {
                    recordBuffer = record.RecordBuffer;
                }
                else
                {
                    recordBuffer = _smiContext.CreateRecordBuffer(record.InternalGetSmiMetaData(), _eventSink);    // Only MetaData needed for sending start
                }
                _smiContext.SendResultsStartToPipe(recordBuffer, _eventSink);

                // Handle any errors that are reported.
                _eventSink.ProcessMessagesAndThrow();

                // remember sent buffer info so it can be used in send row/end.
                _recordBufferSent = recordBuffer;
                _metaDataSent     = record.InternalGetMetaData();
            }
            catch {
                _eventSink.CleanMessages();
                throw;
            }
            finally {
                ClearPipeBusy( );
                Debug.Assert(_eventSink.HasMessages == false, "There should be no messages left in _eventsink at the end of the SendResultsStart!");
            }
        }
Exemplo n.º 4
0
        //
        //  SqlDataRecord public API
        //

        public SqlDataRecord(params SqlMetaData[] metaData)
        {
            // Initial consistency check
            if (null == metaData)
            {
                throw ADP.ArgumentNull(nameof(metaData));
            }

            _columnMetaData    = new SqlMetaData[metaData.Length];
            _columnSmiMetaData = new SmiExtendedMetaData[metaData.Length];
            for (int i = 0; i < _columnSmiMetaData.Length; i++)
            {
                if (null == metaData[i])
                {
                    throw ADP.ArgumentNull($"{nameof(metaData)}[{i}]");
                }
                _columnMetaData[i]    = metaData[i];
                _columnSmiMetaData[i] = MetaDataUtilsSmi.SqlMetaDataToSmiExtendedMetaData(_columnMetaData[i]);
            }

            _eventSink = new SmiEventSink_Default();

            _recordBuffer            = new MemoryRecordBuffer(_columnSmiMetaData);
            _usesStringStorageForXml = true;
            _eventSink.ProcessMessagesAndThrow();
        }
 public void SendResultsStart(SqlDataRecord record)
 {
     ADP.CheckArgumentNull(record, "record");
     this.SetPipeBusy();
     try
     {
         this.EnsureNormalSendValid("SendResultsStart");
         SmiRecordBuffer recordBuffer = record.RecordBuffer;
         if (record.RecordContext == this._smiContext)
         {
             recordBuffer = record.RecordBuffer;
         }
         else
         {
             recordBuffer = this._smiContext.CreateRecordBuffer(record.InternalGetSmiMetaData(), this._eventSink);
         }
         this._smiContext.SendResultsStartToPipe(recordBuffer, this._eventSink);
         this._eventSink.ProcessMessagesAndThrow();
         this._recordBufferSent = recordBuffer;
         this._metaDataSent     = record.InternalGetMetaData();
     }
     finally
     {
         this.ClearPipeBusy();
     }
 }
Exemplo n.º 6
0
        public void SendResultsEnd( )
        {
            SetPipeBusy( );
            try {
                EnsureResultStarted("SendResultsEnd");

                _smiContext.SendResultsEndToPipe(_recordBufferSent, _eventSink);

                // Once end called down to native code, assume end of resultset
                _metaDataSent        = null;
                _recordBufferSent    = null;
                _hadErrorInResultSet = false;

                // Handle any errors that are reported.
                _eventSink.ProcessMessagesAndThrow();
            }
            catch {
                _eventSink.CleanMessages();
                throw;
            }
            finally {
                ClearPipeBusy( );
                Debug.Assert(_eventSink.HasMessages == false, "There should be no messages left in _eventsink at the end of the SendResultsEnd!");
            }
        }
Exemplo n.º 7
0
        // Send results from SqlDataReader
        public void Send(SqlDataReader reader)
        {
            ADP.CheckArgumentNull(reader, "reader");

            SetPipeBusy( );
            try {
                EnsureNormalSendValid("Send");
                do
                {
                    SmiExtendedMetaData[] columnMetaData = reader.GetInternalSmiMetaData();

                    if (null != columnMetaData && 0 != columnMetaData.Length)   // SQLBUDT #340528 -- don't send empty results.
                    {
                        using (SmiRecordBuffer recordBuffer = _smiContext.CreateRecordBuffer(columnMetaData, _eventSink)) {
                            _eventSink.ProcessMessagesAndThrow(); // Handle any errors that are reported.


                            _smiContext.SendResultsStartToPipe(recordBuffer, _eventSink);
                            _eventSink.ProcessMessagesAndThrow(); // Handle any errors that are reported.

                            try {
                                while (reader.Read( ))
                                {
                                    if (SmiContextFactory.Instance.NegotiatedSmiVersion >= SmiContextFactory.KatmaiVersion)
                                    {
                                        ValueUtilsSmi.FillCompatibleSettersFromReader(_eventSink, recordBuffer, new List <SmiExtendedMetaData>(columnMetaData), reader);
                                    }
                                    else
                                    {
                                        ValueUtilsSmi.FillCompatibleITypedSettersFromReader(_eventSink, recordBuffer, columnMetaData, reader);
                                    }

                                    _smiContext.SendResultsRowToPipe(recordBuffer, _eventSink);
                                    _eventSink.ProcessMessagesAndThrow(); // Handle any errors that are reported.
                                }
                            }
                            finally {
                                _smiContext.SendResultsEndToPipe(recordBuffer, _eventSink);
                                _eventSink.ProcessMessagesAndThrow(); // Handle any errors that are reported.
                            }
                        }
                    }
                }while (reader.NextResult( ));
            }
            catch {
                _eventSink.CleanMessages();
                throw;
            }
            finally {
                ClearPipeBusy( );
                Debug.Assert(_eventSink.HasMessages == false, "There should be no messages left in _eventsink at the end of the Send reader!");
            }
        }
 public void Send(SqlDataReader reader)
 {
     ADP.CheckArgumentNull(reader, "reader");
     this.SetPipeBusy();
     try
     {
         this.EnsureNormalSendValid("Send");
         do
         {
             SmiExtendedMetaData[] internalSmiMetaData = reader.GetInternalSmiMetaData();
             if ((internalSmiMetaData != null) && (internalSmiMetaData.Length != 0))
             {
                 using (SmiRecordBuffer buffer = this._smiContext.CreateRecordBuffer(internalSmiMetaData, this._eventSink))
                 {
                     this._eventSink.ProcessMessagesAndThrow();
                     this._smiContext.SendResultsStartToPipe(buffer, this._eventSink);
                     this._eventSink.ProcessMessagesAndThrow();
                     try
                     {
                         while (reader.Read())
                         {
                             if (SmiContextFactory.Instance.NegotiatedSmiVersion >= 210L)
                             {
                                 ValueUtilsSmi.FillCompatibleSettersFromReader(this._eventSink, buffer, new List <SmiExtendedMetaData>(internalSmiMetaData), reader);
                             }
                             else
                             {
                                 ValueUtilsSmi.FillCompatibleITypedSettersFromReader(this._eventSink, buffer, internalSmiMetaData, reader);
                             }
                             this._smiContext.SendResultsRowToPipe(buffer, this._eventSink);
                             this._eventSink.ProcessMessagesAndThrow();
                         }
                     }
                     finally
                     {
                         this._smiContext.SendResultsEndToPipe(buffer, this._eventSink);
                         this._eventSink.ProcessMessagesAndThrow();
                     }
                 }
             }
         }while (reader.NextResult());
     }
     finally
     {
         this.ClearPipeBusy();
     }
 }
 public void SendResultsEnd()
 {
     this.SetPipeBusy();
     try
     {
         this.EnsureResultStarted("SendResultsEnd");
         this._smiContext.SendResultsEndToPipe(this._recordBufferSent, this._eventSink);
         this._metaDataSent        = null;
         this._recordBufferSent    = null;
         this._hadErrorInResultSet = false;
         this._eventSink.ProcessMessagesAndThrow();
     }
     finally
     {
         this.ClearPipeBusy();
     }
 }
Exemplo n.º 10
0
        internal SqlDataRecord(SmiRecordBuffer recordBuffer, params SmiExtendedMetaData[] metaData)
        {
            Debug.Assert(null != recordBuffer, "invalid attempt to instantiate SqlDataRecord with null SmiRecordBuffer");
            Debug.Assert(null != metaData, "invalid attempt to instantiate SqlDataRecord with null SmiExtendedMetaData[]");

            _columnMetaData    = new SqlMetaData[metaData.Length];
            _columnSmiMetaData = new SmiExtendedMetaData[metaData.Length];
            for (int i = 0; i < _columnSmiMetaData.Length; i++)
            {
                _columnSmiMetaData[i] = metaData[i];
                _columnMetaData[i]    = MetaDataUtilsSmi.SmiExtendedMetaDataToSqlMetaData(_columnSmiMetaData[i]);
            }

            _eventSink = new SmiEventSink_Default();

            _recordBuffer = recordBuffer;
            _eventSink.ProcessMessagesAndThrow();
        }
        //
        //  SqlDataRecord public API
        //

        public SqlDataRecord(params SqlMetaData[] metaData)
        {
            // Initial consistency check
            if (null == metaData)
            {
                throw ADP.ArgumentNull("metadata");
            }

            _columnMetaData    = new SqlMetaData[metaData.Length];
            _columnSmiMetaData = new SmiExtendedMetaData[metaData.Length];
            ulong smiVersion = SmiVersion;

            for (int i = 0; i < _columnSmiMetaData.Length; i++)
            {
                if (null == metaData[i])
                {
                    throw ADP.ArgumentNull("metadata[" + i + "]");
                }
                _columnMetaData[i]    = metaData[i];
                _columnSmiMetaData[i] = MetaDataUtilsSmi.SqlMetaDataToSmiExtendedMetaData(_columnMetaData[i]);
                if (!MetaDataUtilsSmi.IsValidForSmiVersion(_columnSmiMetaData[i], smiVersion))
                {
                    throw ADP.VersionDoesNotSupportDataType(_columnSmiMetaData[i].TypeName);
                }
            }

            _eventSink = new SmiEventSink_Default( );

            if (InOutOfProcHelper.InProc)
            {
                _recordContext           = SmiContextFactory.Instance.GetCurrentContext();
                _recordBuffer            = _recordContext.CreateRecordBuffer(_columnSmiMetaData, _eventSink);
                _usesStringStorageForXml = false;
            }
            else
            {
                _recordContext           = null;
                _recordBuffer            = new MemoryRecordBuffer(_columnSmiMetaData);
                _usesStringStorageForXml = true;
            }
            _eventSink.ProcessMessagesAndThrow();
        }
 internal SqlDataRecord(SmiRecordBuffer recordBuffer, params SmiExtendedMetaData[] metaData)
 {
     this._columnMetaData = new SqlMetaData[metaData.Length];
     this._columnSmiMetaData = new SmiExtendedMetaData[metaData.Length];
     for (int i = 0; i < this._columnSmiMetaData.Length; i++)
     {
         this._columnSmiMetaData[i] = metaData[i];
         this._columnMetaData[i] = MetaDataUtilsSmi.SmiExtendedMetaDataToSqlMetaData(this._columnSmiMetaData[i]);
     }
     this._eventSink = new SmiEventSink_Default();
     if (InOutOfProcHelper.InProc)
     {
         this._recordContext = SmiContextFactory.Instance.GetCurrentContext();
     }
     else
     {
         this._recordContext = null;
     }
     this._recordBuffer = recordBuffer;
     this._eventSink.ProcessMessagesAndThrow();
 }
Exemplo n.º 13
0
 internal SqlDataRecord(SmiRecordBuffer recordBuffer, params SmiExtendedMetaData[] metaData)
 {
     this._columnMetaData    = new SqlMetaData[metaData.Length];
     this._columnSmiMetaData = new SmiExtendedMetaData[metaData.Length];
     for (int i = 0; i < this._columnSmiMetaData.Length; i++)
     {
         this._columnSmiMetaData[i] = metaData[i];
         this._columnMetaData[i]    = MetaDataUtilsSmi.SmiExtendedMetaDataToSqlMetaData(this._columnSmiMetaData[i]);
     }
     this._eventSink = new SmiEventSink_Default();
     if (InOutOfProcHelper.InProc)
     {
         this._recordContext = SmiContextFactory.Instance.GetCurrentContext();
     }
     else
     {
         this._recordContext = null;
     }
     this._recordBuffer = recordBuffer;
     this._eventSink.ProcessMessagesAndThrow();
 }
 public SqlDataRecord(params SqlMetaData[] metaData)
 {
     if (metaData == null)
     {
         throw ADP.ArgumentNull("metadata");
     }
     this._columnMetaData = new SqlMetaData[metaData.Length];
     this._columnSmiMetaData = new SmiExtendedMetaData[metaData.Length];
     ulong smiVersion = this.SmiVersion;
     for (int i = 0; i < this._columnSmiMetaData.Length; i++)
     {
         if (metaData[i] == null)
         {
             throw ADP.ArgumentNull("metadata[" + i + "]");
         }
         this._columnMetaData[i] = metaData[i];
         this._columnSmiMetaData[i] = MetaDataUtilsSmi.SqlMetaDataToSmiExtendedMetaData(this._columnMetaData[i]);
         if (!MetaDataUtilsSmi.IsValidForSmiVersion(this._columnSmiMetaData[i], smiVersion))
         {
             throw ADP.VersionDoesNotSupportDataType(this._columnSmiMetaData[i].TypeName);
         }
     }
     this._eventSink = new SmiEventSink_Default();
     if (InOutOfProcHelper.InProc)
     {
         this._recordContext = SmiContextFactory.Instance.GetCurrentContext();
         this._recordBuffer = this._recordContext.CreateRecordBuffer(this._columnSmiMetaData, this._eventSink);
         this._usesStringStorageForXml = false;
     }
     else
     {
         this._recordContext = null;
         this._recordBuffer = new MemoryRecordBuffer(this._columnSmiMetaData);
         this._usesStringStorageForXml = true;
     }
     this._eventSink.ProcessMessagesAndThrow();
 }
Exemplo n.º 15
0
 internal abstract void SendResultsEndToPipe( SmiRecordBuffer recordBuffer, SmiEventSink eventSink );
Exemplo n.º 16
0
        internal SqlDataRecord(SmiRecordBuffer recordBuffer, params SmiExtendedMetaData[] metaData)
        {
            Debug.Assert(null != recordBuffer, "invalid attempt to instantiate SqlDataRecord with null SmiRecordBuffer");
            Debug.Assert(null != metaData, "invalid attempt to instantiate SqlDataRecord with null SmiExtendedMetaData[]");

            _columnMetaData = new SqlMetaData[metaData.Length];
            _columnSmiMetaData = new SmiExtendedMetaData[metaData.Length];
            for (int i = 0; i < _columnSmiMetaData.Length; i++)
            {
                _columnSmiMetaData[i] = metaData[i];
                _columnMetaData[i] = MetaDataUtilsSmi.SmiExtendedMetaDataToSqlMetaData(_columnSmiMetaData[i]);
            }

            _eventSink = new SmiEventSink_Default();

            _recordBuffer = recordBuffer;
            _eventSink.ProcessMessagesAndThrow();
        }
Exemplo n.º 17
0
        //
        //  SqlDataRecord public API
        //

        public SqlDataRecord(params SqlMetaData[] metaData)
        {
            // Initial consistency check
            if (null == metaData)
            {
                throw ADP.ArgumentNull("metadata");
            }

            _columnMetaData = new SqlMetaData[metaData.Length];
            _columnSmiMetaData = new SmiExtendedMetaData[metaData.Length];
            for (int i = 0; i < _columnSmiMetaData.Length; i++)
            {
                if (null == metaData[i])
                {
                    throw ADP.ArgumentNull("metadata[" + i + "]");
                }
                _columnMetaData[i] = metaData[i];
                _columnSmiMetaData[i] = MetaDataUtilsSmi.SqlMetaDataToSmiExtendedMetaData(_columnMetaData[i]);
            }

            _eventSink = new SmiEventSink_Default();

            _recordBuffer = new MemoryRecordBuffer(_columnSmiMetaData);
            _usesStringStorageForXml = true;
            _eventSink.ProcessMessagesAndThrow();
        }
Exemplo n.º 18
0
 internal abstract void SendResultsStartToPipe(SmiRecordBuffer recordBuffer, SmiEventSink eventSink);
Exemplo n.º 19
0
        public void SendResultsStart( SqlDataRecord record ) {
            ADP.CheckArgumentNull(record, "record");

            SetPipeBusy( );
            try {
                EnsureNormalSendValid( "SendResultsStart" );

                SmiRecordBuffer recordBuffer = record.RecordBuffer;
                if (record.RecordContext == _smiContext) {
                    recordBuffer = record.RecordBuffer;
                } else {
                    recordBuffer = _smiContext.CreateRecordBuffer(record.InternalGetSmiMetaData(), _eventSink);    // Only MetaData needed for sending start
                }
                _smiContext.SendResultsStartToPipe( recordBuffer, _eventSink );

                // Handle any errors that are reported.
                _eventSink.ProcessMessagesAndThrow();

                // remember sent buffer info so it can be used in send row/end.
                _recordBufferSent = recordBuffer;
                _metaDataSent = record.InternalGetMetaData();
            }
            catch {
                _eventSink.CleanMessages();
                throw;
            }
            finally {
                ClearPipeBusy( );
                Debug.Assert(_eventSink.HasMessages == false, "There should be no messages left in _eventsink at the end of the SendResultsStart!");
            }
        }
Exemplo n.º 20
0
        internal SqlDataRecord( SmiRecordBuffer recordBuffer, params SmiExtendedMetaData[] metaData ) {
            Debug.Assert(null != recordBuffer, "invalid attempt to instantiate SqlDataRecord with null SmiRecordBuffer");
            Debug.Assert(null != metaData, "invalid attempt to instantiate SqlDataRecord with null SmiExtendedMetaData[]");

            _columnMetaData = new SqlMetaData[metaData.Length];
            _columnSmiMetaData = new SmiExtendedMetaData[metaData.Length];
            for (int i = 0; i < _columnSmiMetaData.Length; i++) {
                _columnSmiMetaData[i] = metaData[i];
                _columnMetaData[i] = MetaDataUtilsSmi.SmiExtendedMetaDataToSqlMetaData( _columnSmiMetaData[i] );
            }

            _eventSink = new SmiEventSink_Default( );

            if (InOutOfProcHelper.InProc) {
                _recordContext = SmiContextFactory.Instance.GetCurrentContext();
            }
            else {
                _recordContext = null;
            }
            _recordBuffer = recordBuffer;
            _eventSink.ProcessMessagesAndThrow();
        }
Exemplo n.º 21
0
 internal void OnOutOfScope( ) {
     _metaDataSent = null;
     _recordBufferSent = null;
     _hadErrorInResultSet = false;
     _isBusy = false;
 }
Exemplo n.º 22
0
        public void SendResultsEnd( ) {
            SetPipeBusy( );
            try {
                EnsureResultStarted( "SendResultsEnd" );

                _smiContext.SendResultsEndToPipe( _recordBufferSent, _eventSink );

                // Once end called down to native code, assume end of resultset
                _metaDataSent = null;
                _recordBufferSent = null;
                _hadErrorInResultSet = false;

                // Handle any errors that are reported.
                _eventSink.ProcessMessagesAndThrow();
            }
            catch {
                _eventSink.CleanMessages();
                throw;
            }
            finally {
                ClearPipeBusy( );
                Debug.Assert(_eventSink.HasMessages == false, "There should be no messages left in _eventsink at the end of the SendResultsEnd!");
            }
        }