public override void Prepare(string commandText) { ClearAll(); try { if (_state == StatementState.Deallocated) { SendAllocateToBuffer(); _database.XdrStream.Flush(); ProcessAllocateResponce(_database.ReadGenericResponse()); } SendPrepareToBuffer(commandText); _database.XdrStream.Flush(); ProcessPrepareResponse(_database.ReadGenericResponse()); SendInfoSqlToBuffer(StatementTypeInfoItems, IscCodes.STATEMENT_TYPE_BUFFER_SIZE); _database.XdrStream.Flush(); _statementType = ProcessStatementTypeInfoBuffer(ProcessInfoSqlResponse(_database.ReadGenericResponse())); _state = StatementState.Prepared; } catch (IOException ex) { if (_state == StatementState.Allocated) { _state = StatementState.Error; } throw IscException.ForErrorCode(IscCodes.isc_net_read_err, ex); } }
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 void Attach(ServiceParameterBuffer spb, string dataSource, int port, string service) { GenericResponse response = null; lock (this) { try { #warning Separate method for op_service_attach as for i.e. op_attach _database.XdrStream.Write(IscCodes.op_service_attach); _database.XdrStream.Write(0); _database.XdrStream.Write(service); _database.XdrStream.WriteBuffer(spb.ToArray()); _database.XdrStream.Flush(); response = _database.ReadGenericResponse(); _handle = response.ObjectHandle; } catch (IOException ex) { _database.Detach(); throw IscException.ForErrorCode(IscCodes.isc_net_write_err, ex); } } }
protected override byte[] GetSegment() { int requested = SegmentSize; lock (_database.SyncObject) { try { _database.XdrStream.Write(IscCodes.op_get_segment); _database.XdrStream.Write(_blobHandle); _database.XdrStream.Write((requested + 2 < short.MaxValue) ? requested + 2 : short.MaxValue); _database.XdrStream.Write(0); // Data segment _database.XdrStream.Flush(); GenericResponse response = _database.ReadGenericResponse(); RblRemoveValue(IscCodes.RBL_segment); if (response.ObjectHandle == 1) { RblAddValue(IscCodes.RBL_segment); } else if (response.ObjectHandle == 2) { RblAddValue(IscCodes.RBL_eof_pending); } byte[] buffer = response.Data; if (buffer.Length == 0) { // previous segment was last, this has no data return(buffer); } int len = 0; int srcpos = 0; int destpos = 0; while (srcpos < buffer.Length) { len = IscHelper.VaxInteger(buffer, srcpos, 2); srcpos += 2; Buffer.BlockCopy(buffer, srcpos, buffer, destpos, len); srcpos += len; destpos += len; } byte[] result = new byte[destpos]; Buffer.BlockCopy(buffer, 0, result, 0, destpos); return(result); } catch (IOException ex) { throw IscException.ForErrorCode(IscCodes.isc_net_read_err, ex); } } }
public virtual void Attach(ServiceParameterBuffer spb, string dataSource, int port, string service, byte[] cryptKey) { try { SendAttachToBuffer(spb, service); _database.XdrStream.Flush(); ProcessAttachResponse(_database.ReadGenericResponse()); } catch (IOException ex) { _database.Detach(); throw IscException.ForErrorCode(IscCodes.isc_net_write_err, ex); } }
public override void PutSlice(Array sourceArray, int sliceLength) { try { byte[] sdl = GenerateSDL(Descriptor); byte[] slice = EncodeSliceArray(sourceArray); _database.XdrStream.Write(IscCodes.op_put_slice); _database.XdrStream.Write(_transaction.Handle); _database.XdrStream.Write(ArrayHandle); _database.XdrStream.Write(sliceLength); _database.XdrStream.WriteBuffer(sdl); _database.XdrStream.Write(string.Empty); _database.XdrStream.Write(sliceLength); _database.XdrStream.Write(slice, 0, slice.Length); _database.XdrStream.Flush(); GenericResponse response = _database.ReadGenericResponse(); _handle = response.BlobId; } catch (IOException ex) { throw IscException.ForErrorCode(IscCodes.isc_net_read_err, ex); } }
public override void PutSlice(System.Array sourceArray, int sliceLength) { lock (_database.SyncObject) { try { byte[] sdl = GenerateSDL(Descriptor); byte[] slice = EncodeSliceArray(sourceArray); _database.XdrStream.Write(IscCodes.op_put_slice); // Op code _database.XdrStream.Write(_transaction.Handle); // Transaction _database.XdrStream.Write((long)0); // Array Handle _database.XdrStream.Write(sliceLength); // Slice length _database.XdrStream.WriteBuffer(sdl); // Slice descriptor language _database.XdrStream.Write(string.Empty); // Slice parameters _database.XdrStream.Write(sliceLength); // Slice length _database.XdrStream.Write(slice, 0, slice.Length); // Slice proper _database.XdrStream.Flush(); GenericResponse response = _database.ReadGenericResponse(); _handle = response.BlobId; } catch (IOException ex) { throw IscException.ForErrorCode(IscCodes.isc_net_read_err, ex); } } }
public override void BeginTransaction(TransactionParameterBuffer tpb) { lock (_stateSyncRoot) { if (_state != TransactionState.NoTransaction) { throw new InvalidOperationException(); } try { GenericResponse response; lock (_database.SyncObject) { _database.XdrStream.Write(IscCodes.op_transaction); _database.XdrStream.Write(_database.Handle); _database.XdrStream.WriteBuffer(tpb.ToArray()); _database.XdrStream.Flush(); response = _database.ReadGenericResponse(); _database.TransactionCount++; } _handle = response.ObjectHandle; _state = TransactionState.Active; } catch (IOException ex) { throw IscException.ForErrorCode(IscCodes.isc_net_read_err, ex); } } }
public override void Prepare(string commandText) { // Clear data ClearAll(); lock (_database.SyncObject) { try { if (_state == StatementState.Deallocated) { // Allocate statement SendAllocateToBuffer(); _database.XdrStream.Flush(); ProcessAllocateResponce(_database.ReadGenericResponse()); } SendPrepareToBuffer(commandText); _database.XdrStream.Flush(); ProcessPrepareResponse(_database.ReadGenericResponse()); // Grab statement type SendInfoSqlToBuffer(StatementTypeInfoItems, IscCodes.STATEMENT_TYPE_BUFFER_SIZE); _database.XdrStream.Flush(); _statementType = ProcessStatementTypeInfoBuffer(ProcessInfoSqlResponse(_database.ReadGenericResponse())); _state = StatementState.Prepared; } catch (IOException ex) { // if the statement has been already allocated, it's now in error if (_state == StatementState.Allocated) { _state = StatementState.Error; } throw IscException.ForErrorCode(IscCodes.isc_net_read_err, ex); } } }