Currently [[ItqlInterpreter]] takes a string, parses it into a command AST, and executes it. Execution uses information out of the AST for managing sessions. <br/> <br/> We need to split [[ItqlInterpreter]] into classes which perform parsing, perform execution, and manage sessions. This will allow the same mechanism to be shared between 3 separate paradigms: <br/> 1. Client parsing, establishing connections, and sending AST to server (current implementation). <br/> 2. Client connects to server, sends raw string. Server parses TQL and executes on local session. <br/> 3. Client connects to server, sends raw string. Server parses SPARQL and executes on local session. <br/> <br/> Allowing options 2 and 3 has several advantages: <br/> - Closer to what happens with databases like [[MySQL]], and presents a much more portable paradigm. <br/> - Allows easier avoidance of "session management" when a task inside the server JVM wishes to execute a query (such as in the Krule engine). <br/> - This is the required paradigm for SPARQL protocol. <br/> - Better separation of tasks than currently exists in [[ItqlInterpreter]]. <br/> - Permits clients to perform connection pooling. <br/> - Allows client transaction API that is separated from the query language.