Example #1
0
        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);
                }
            }
        }
Example #3
0
        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);
     }
 }
Example #6
0
        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);
                }
            }
        }
Example #8
0
        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);
                }
            }
        }