def _run_content_on_db(self, content): stmt = SQLParser().parse_statements(content)[0] if stmt.startswith("SELECT"): return self._db().fetch(stmt) else: self._db().execute(content) return None
def test_splits_multiple_runnable_stmts(): sqltext = """SELECT * FROM VERB; SELECT * FROM ENTITY;""" stmt1 = "SELECT * FROM VERB" stmt2 = "SELECT * FROM ENTITY" assert [stmt1, stmt2] == SQLParser().split(sqltext) assert [stmt1, stmt2, "--some comment" ] == SQLParser().split(sqltext + "\n--some comment")
def test_parse_full_sql(): sqltext = """ --insert entity def INSERT INTO ENTITY_DEF (ID, ENV_ID, NAME) VALUES ( @ED.customerID, --id @ENV.Dflt, --env_id 'customer'--name ); --insert a verb INSERT INTO VERB (ID, NAME) VALUES ( @ED.customerID, --id 'search'--name ); """ statement1 = """INSERT INTO ENTITY_DEF (ID, ENV_ID, NAME) VALUES ( \t3, 66, 'customer')""" statement2 = """INSERT INTO VERB (ID, NAME) VALUES ( \t3, 'search')""" table = {"ED": {"customerID": 3}, "ENV": {"Dflt": 66}} loader = FakeRelativeIdLoader(table) assert [statement1, statement2] == SQLParser(loader).parse_runnable_statements(sqltext)
def test_remove_comments_and_strip_str(): sqltext = """ INSERT INTO VERB(ID,NAME) VALUES(12, --id "search" --name ) """ expected = """INSERT INTO VERB(ID,NAME) VALUES(12, "search" )""" assert expected == SQLParser().strip_comments(sqltext)
def execute(self, query, sqlparser=SQLParser(), commit=False, verbose="q"): cursor = self._conn().cursor() for statement in self._parse_statements(query): try: cursor.execute(statement) if verbose == "v": print("\n" + statement + "\nReturned " + str(cursor.rowcount) + " row(s)") except Exception as excinfo: print("The following statement failed:\n" + statement + "\n" "Due to: " + str(excinfo)) raise if commit: self.commit() return cursor
def _parse_statements(self, query): return SQLParser( RelativeIdLoader(self)).parse_runnable_statements(query)
def assert_convert_to_set_clause(expected, string): assert expected == SQLParser().convert_set_clause(string)
def run_extract_set_group(expected, string): assert expected == SQLParser().extract_set_group(string)
def run_test_parse_update(expected, query): assert expected == SQLParser().parse_update_stmt(query)
def test_parse_sql_ended_with_comments_remove_end_comments(): statement1 = "INSERT INTO VERB(ID,NAME) VALUES(1,'search')" sqltext = statement1 + ";\n--some comment" loader = FakeRelativeIdLoader(None) assert [statement1] == SQLParser(loader).parse_runnable_statements(sqltext)