Ejemplo n.º 1
0
        private void ThreadHandler(object o)
        {
            try
            {
                while (GetEventsCountLocked() > 0)
                {
                    var operation = _database.NextOperation();

                    switch (operation)
                    {
                    case IscCodes.op_response:
                        _database.ReadResponse();
                        continue;

                    case IscCodes.op_exit:
                    case IscCodes.op_disconnect:
                        Close();
                        return;

                    case IscCodes.op_event:
                        var dbHandle = _database.ReadInt32();
                        var buffer   = _database.ReadBuffer();
                        var ast      = _database.ReadBytes(8);
                        var eventId  = _database.ReadInt32();

                        RemoteEvent currentEvent;
                        if (_events.TryRemove(eventId, out currentEvent))
                        {
                            // Notify new event counts
                            currentEvent.EventCounts(buffer);
                        }

                        continue;
                    }
                }
            }
            catch (ThreadAbortException)
            {
                return;
            }
            catch
            {
                return;
            }
        }
Ejemplo n.º 2
0
        private void ThreadHandler(object _)
        {
            try
            {
                while (_events.Any())
                {
                    var operation = _database.NextOperation();

                    switch (operation)
                    {
                    case IscCodes.op_response:
                        _database.ReadResponse();
                        continue;

                    case IscCodes.op_exit:
                    case IscCodes.op_disconnect:
                        Close();
                        return;

                    case IscCodes.op_event:
                        var dbHandle = _database.XdrStream.ReadInt32();
                        var buffer   = _database.XdrStream.ReadBuffer();
                        var ast      = _database.XdrStream.ReadBytes(8);
                        var eventId  = _database.XdrStream.ReadInt32();

                        RemoteEvent currentEvent;
                        if (_events.TryRemove(eventId, out currentEvent))
                        {
                            // Notify new event counts
                            currentEvent.EventCounts(buffer);
                        }
                        continue;
                    }
                }
            }
            catch (IOException ex) when((ex.InnerException as SocketException)?.SocketErrorCode == SocketError.Interrupted)
            {
                return;
            }
        }
Ejemplo n.º 3
0
        public override DbValueBase[] Fetch()
        {
            if (_state == StatementState.Deallocated)
            {
                throw new InvalidOperationException("Statement is not correctly created.");
            }
            if (_statementType != DbStatementType.Select &&
                _statementType != DbStatementType.SelectForUpdate)
            {
                return(null);
            }

            if (!_allRowsFetched && _rows.Count == 0)
            {
                try
                {
                    _database.XdrStream.Write(IscCodes.op_fetch);
                    _database.XdrStream.Write(_handle);
                    _database.XdrStream.WriteBuffer(_fields.ToBlrArray());
                    _database.XdrStream.Write(0);                     // p_sqldata_message_number
                    _database.XdrStream.Write(_fetchSize);            // p_sqldata_messages
                    _database.XdrStream.Flush();

                    if (_database.NextOperation() == IscCodes.op_fetch_response)
                    {
                        IResponse response = null;

                        while (!_allRowsFetched)
                        {
                            response = _database.ReadResponse();

                            if (response is FetchResponse)
                            {
                                FetchResponse fetchResponse = (FetchResponse)response;

                                if (fetchResponse.Count > 0 && fetchResponse.Status == 0)
                                {
                                    var row = AllocNewRow();
                                    ReadRow(row);
                                    _rows.Enqueue(row);
                                }
                                else if (fetchResponse.Status == 100)
                                {
                                    _allRowsFetched = true;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else
                            {
                                break;
                            }
                        }
                    }
                    else
                    {
                        _database.ReadResponse();
                    }
                }
                catch (IOException ex)
                {
                    throw IscException.ForErrorCode(IscCodes.isc_net_read_err, ex);
                }
            }

            if (_rows != null && _rows.Count > 0)
            {
                var result = _rows.Dequeue();
                if (!_allRowsFetched)
                {
                    if (_bufferedRows == null)
                    {
                        _bufferedRows = new Stack <DbValueBase[]>();
                    }
                    _bufferedRows.Push(result);
                }
                return(result);
            }
            else
            {
                _rows.Clear();

                return(null);
            }
        }
Ejemplo n.º 4
0
        public override DbValue[] Fetch()
        {
            if (_state == StatementState.Deallocated)
            {
                throw new InvalidOperationException("Statement is not correctly created.");
            }
            if (_statementType == DbStatementType.StoredProcedure && !_allRowsFetched)
            {
                _allRowsFetched = true;
                return(GetOutputParameters());
            }
            else if (_statementType == DbStatementType.Insert && _allRowsFetched)
            {
                return(null);
            }
            else if (_statementType != DbStatementType.Select && _statementType != DbStatementType.SelectForUpdate)
            {
                return(null);
            }

            if (!_allRowsFetched && _rows.Count == 0)
            {
                try
                {
                    _database.XdrStream.Write(IscCodes.op_fetch);
                    _database.XdrStream.Write(_handle);
                    _database.XdrStream.WriteBuffer(_fields.ToBlrArray());
                    _database.XdrStream.Write(0);                     // p_sqldata_message_number
                    _database.XdrStream.Write(_fetchSize);            // p_sqldata_messages
                    _database.XdrStream.Flush();

                    if (_database.NextOperation() == IscCodes.op_fetch_response)
                    {
                        IResponse response = null;

                        while (!_allRowsFetched)
                        {
                            response = _database.ReadResponse();

                            if (response is FetchResponse fetchResponse)
                            {
                                if (fetchResponse.Count > 0 && fetchResponse.Status == 0)
                                {
                                    _rows.Enqueue(ReadRow());
                                }
                                else if (fetchResponse.Status == 100)
                                {
                                    _allRowsFetched = true;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else
                            {
                                break;
                            }
                        }
                    }
                    else
                    {
                        _database.ReadResponse();
                    }
                }
                catch (IOException ex)
                {
                    throw IscException.ForErrorCode(IscCodes.isc_network_error, ex);
                }
            }

            if (_rows != null && _rows.Count > 0)
            {
                return(_rows.Dequeue());
            }
            else
            {
                _rows.Clear();

                return(null);
            }
        }
        public override DbValue[] Fetch()
        {
            if (_state == StatementState.Deallocated)
            {
                throw new InvalidOperationException("Statement is not correctly created.");
            }
            if (_statementType != DbStatementType.Select &&
                _statementType != DbStatementType.SelectForUpdate)
            {
                return(null);
            }

            if (!_allRowsFetched && _rows.Count == 0)
            {
                // Fetch next batch of rows
                lock (_database.SyncObject)
                {
                    try
                    {
                        _database.Write(IscCodes.op_fetch);
                        _database.Write(_handle);
                        _database.WriteBuffer(_fields.ToBlrArray());
                        _database.Write(0);                                     // p_sqldata_message_number
                        _database.Write(_fetchSize);                            // p_sqldata_messages
                        _database.Flush();

                        if (_database.NextOperation() == IscCodes.op_fetch_response)
                        {
                            IResponse response = null;

                            while (!_allRowsFetched)
                            {
                                response = _database.ReadResponse();

                                if (response is FetchResponse)
                                {
                                    FetchResponse fetchResponse = (FetchResponse)response;

                                    if (fetchResponse.Count > 0 && fetchResponse.Status == 0)
                                    {
                                        _rows.Enqueue(ReadDataRow());
                                    }
                                    else if (fetchResponse.Status == 100)
                                    {
                                        _allRowsFetched = true;
                                    }
                                    else
                                    {
                                        break;
                                    }
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                        else
                        {
                            _database.ReadResponse();
                        }
                    }
                    catch (IOException)
                    {
                        throw new IscException(IscCodes.isc_net_read_err);
                    }
                }
            }

            if (_rows != null && _rows.Count > 0)
            {
                return(_rows.Dequeue());
            }
            else
            {
                _rows.Clear();

                return(null);
            }
        }