public void Attach(ServiceParameterBuffer spb, string dataSource, int port, string service) { GenericResponse response = null; lock (this) { try { _database.Write(IscCodes.op_service_attach); _database.Write(0); _database.Write(service); _database.WriteBuffer(spb.ToArray()); _database.Flush(); response = _database.ReadGenericResponse(); _handle = response.ObjectHandle; } catch (IOException) { _database.Detach(); throw new IscException(IscCodes.isc_net_write_err); } } }
public override byte[] GetSlice(int sliceLength) { lock (_database.SyncObject) { try { byte[] sdl = GenerateSDL(Descriptor); _database.Write(IscCodes.op_get_slice); // Op code _database.Write(_transaction.Handle); // Transaction _database.Write(_handle); // Array id _database.Write(sliceLength); // Slice length _database.WriteBuffer(sdl); // Slice descriptor language _database.Write(string.Empty); // Slice parameters _database.Write(0); // Slice proper _database.Flush(); return(ReceiveSliceResponse(Descriptor)); } catch (IOException) { throw new IscException(IscCodes.isc_net_read_err); } } }
public void BeginTransaction(TransactionParameterBuffer tpb) { lock (_stateSyncRoot) { if (_state != TransactionState.NoTransaction) { throw GetNoValidTransactionException(); } try { GenericResponse response; lock (_database.SyncObject) { _database.Write(IscCodes.op_transaction); _database.Write(_database.Handle); _database.WriteBuffer(tpb.ToArray()); _database.Flush(); response = _database.ReadGenericResponse(); _database.TransactionCount++; } _handle = response.ObjectHandle; _state = TransactionState.Active; } catch (IOException) { throw new IscException(IscCodes.isc_net_read_err); } } }
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); } }