private NetworkOperations.Message CreateParametersMessage(string dbname, string userName, string password) { NetworkOperations.Message msg = new NetworkOperations.Message(); MemoryStream stream = new MemoryStream(); BinaryWriter writer = new BinaryWriter(stream); msg.Instruction = InstructionCode.Login; writer.Write((byte)1); // protocol version... 1.0 writer.Write((byte)0); NetworkOperations.WriteString(writer, userName, dbname); writer.Close(); msg.Body = stream.ToArray(); return(msg); }
/// <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; } }