コード例 #1
0
        /// <summary>
        /// Retrieves the next part of the result.
        /// </summary>
        /// <returns></returns>
        public string Next()
        {
            if (!hasNextItem)
            {
                return(null);
            }

            NetworkOperations.Message msg = new NetworkOperations.Message();
            msg.Instruction = InstructionCode.GetNextItem;
            NetworkOperations.WriteMessage(msg, outputStream);

            NetworkOperations.StringItem item = NetworkOperations.ReadStringItem(inputStream);
            if (item.Item == null)
            {
                hasNextItem = false;
                return(null);
            }
            else
            {
                text += item.Item;
                return(item.Item);
            }
        }
コード例 #2
0
        /// <summary>
        /// Executes a query that is read from a stream.
        /// </summary>
        public QueryResult Execute(TextReader queryReader)
        {
            try
            {
                if (!inTransaction)
                {
                    BeginTransaction();
                }

                string query = queryReader.ReadToEnd();
                NetworkOperations.Message msg = new NetworkOperations.Message();
                msg.Instruction = InstructionCode.Execute;

                MemoryStream stream = new MemoryStream();
                BinaryWriter writer = new BinaryWriter(stream);
                writer.Write((byte)0);                 // xml is 0, scheme xml is 1
                NetworkOperations.WriteString(writer, query);
                writer.Close();

                msg.Body = stream.ToArray();

                NetworkOperations.WriteMessage(msg, outputStream);

                NetworkOperations.ReadMessage(msg, inputStream);

                if (msg.Instruction == InstructionCode.QuerySucceeded)
                {
                    return(new QueryResult(NetworkOperations.ReadStringItem(inputStream), inputStream, outputStream));
                }

                else if (msg.Instruction == InstructionCode.QueryFailed || msg.Instruction == InstructionCode.UpdateFailed || msg.Instruction == InstructionCode.GeneralError)
                {
                    throw NetworkOperations.GetErrorInfo(msg.Instruction, msg.Body);
                }

                else if (msg.Instruction == InstructionCode.UpdateSucceeded)
                {
                    haveUpdated = true;
                    return(null);
                }

                else if (msg.Instruction == InstructionCode.BulkLoadFileRequest)
                {
                    try
                    {
                        haveUpdated = true;
                        string filename   = NetworkOperations.ReadString(msg, 0);
                        Stream fileStream = File.OpenRead(filename);
                        if (!NetworkOperations.BulkLoad(fileStream, inputStream, outputStream))
                        {
                            throw new SednaException(InstructionCode.BulkLoadFailed, "Bulk load failed");
                        }
                        return(null);
                    }
                    finally
                    {
                        stream.Close();
                    }
                }
                else if (msg.Instruction == InstructionCode.BulkLoadStreamRequest)
                {
                    if (!NetworkOperations.BulkLoad(Console.OpenStandardInput(), inputStream, outputStream))
                    {
                        throw new SednaException("Bulk load failed");
                    }
                    return(null);
                }
                else
                {
                    throw new SednaException("Unexpected error");
                }
            }
            catch (Exception ex)
            {
                inTransaction = false;
                haveUpdated   = false;
                throw ex;
            }
        }