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; } }
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; } }
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); } }
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); } }