def index(): content = "" results = [] error = None if request.method == "POST": content = request.form["content"] if not content: flash("Please provide SQL query") else: try: inter = Interpreter(tree=Parser(lex=Lexer(content)).parse(), working_dir=os.getenv("WORKING_DIR")) results = inter.do() except LexerException as err: error = "Lexer Error: %s" % str(err) except ParserException as err: error = "Parser Error: %s" % str(err) except (TableNotExists, TableColumnNotExists, StorageException) as err: error = "Storage Error: %s" % str(err) except Exception as err: error = "Error: %s" % str(err) elif request.method == "GET": content = "select uid, name, num_of_jobs, avg_salary from languages;" return render_template('index.html', content=content, results=results, error=error)
def setUp(self) -> None: if not os.path.exists(self.TEST_DIR): os.mkdir(self.TEST_DIR) queries = [ "create table foobar (primary key uid, a, b);", "insert into foobar set uid=1, a='a', b=100;", "insert into foobar set uid=2, a='b', b=100;", "insert into foobar set uid=3, a='c', b=200;", "insert into foobar set uid=4, a='d', b=200;", "insert into foobar set uid=5, a='e', b=300;", "insert into foobar set uid=6, a='f', b=300;", ] sql = "".join(queries) inter = Interpreter(tree=Parser(lex=Lexer(sql)).parse(), working_dir=self.TEST_DIR) inter.do()
def test_insert_ok(self, queries, expected): sql = "".join(queries) inter = Interpreter(tree=Parser(lex=Lexer(sql)).parse(), working_dir=self.TEST_DIR) results = inter.do() self.assertEqual(expected, results)
def test_select_expressions_ok(self, sql, expected): inter = Interpreter(tree=Parser(lex=Lexer(sql)).parse(), working_dir=self.TEST_DIR) results = inter.do() self.assertEqual(expected, results)