{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "\"\"\"\n", "The module optimize_query contains a function which sends the query\n", "to Optimizer to be optimized and returns the optimized query back.\n", "\"\"\"\n", "import asyncio\n", "import nest_asyncio\n", "nest_asyncio.apply()\n", "\n", "from libs_pkg.exception_handler import *\n", "\n", "async def opt_comm_exec(reader, writer, query, db_name, flag):\n", " \"\"\"\n", " This function sends the query to Optimizer to be optimized and returns the optimized query back.\n", " \n", " :param reader: The stream reader of the connection to Optimizer.\n", " :param writer: The stream writer of the connection to Optimizer.\n", " :param query: The query to be optimized given as string.\n", " :param db_name: The The currently open database related to the given query.\n", " :param flag: The boolean value that shows if the command should be executed by optimizer (True) or should be optimized (False).\n", " \n", " :return: The optimized query as string.\n", " \"\"\"\n", " \n", " if reader == None or writer == None:\n", " raise SecondoAPI_Error('Connection to Optimizer reset.')\n", " else:\n", " \n", " #execute query\n", " if flag:\n", " writer.write(b'\\n')\n", " \n", " #optimize query\n", " else: \n", " writer.write(b'\\n')\n", " \n", " writer.write(b'\\n')\n", " db_name += \"\\n\"\n", " writer.write(db_name.encode())\n", " \n", " writer.write(b'\\n')\n", " \n", " writer.write(b'\\n')\n", " query += \"\\n\"\n", " writer.write(query.encode())\n", " \n", " writer.write(b'\\n')\n", " \n", " if flag:\n", " writer.write(b'\\n')\n", " \n", " else: \n", " writer.write(b'\\n')\n", " \n", " await writer.drain()\n", " \n", " res = await reader.readline()\n", " res = res.decode()\n", " if not res:\n", " raise SecondoAPI_Error(\"Connection to Optimizer is broken.\")\n", " if res != \"\\n\":\n", " raise SecondoError(\"Wrong Data received from Optimizer.\")\n", " res = await reader.readline()\n", " res = res.decode()\n", " if not res:\n", " raise SecondoAPI_Error('Connection to Optimizer is broken.')\n", " opt_res = \"\"\n", " count = 3\n", " while res != \"\\n\":\n", " if flag:\n", " opt_res += res\n", " else:\n", " opt_res += res.replace(\" \\n\", \"\")\n", " res = await reader.readline()\n", " res = res.decode()\n", " count += 1\n", " if not res:\n", " raise SecondoAPI_Error('Connection to Optimizer is broken.')\n", " \n", " if opt_res == \"\":\n", " raise SecondoAPI_Error('Optimization failed due to some Errors in the query.')\n", " return opt_res" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.4" } }, "nbformat": 4, "nbformat_minor": 2 }