예제 #1
0
 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
예제 #2
0
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")
예제 #3
0
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)
예제 #4
0
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)
예제 #5
0
    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
예제 #6
0
 def _parse_statements(self, query):
     return SQLParser(
         RelativeIdLoader(self)).parse_runnable_statements(query)
예제 #7
0
def assert_convert_to_set_clause(expected, string):
    assert expected == SQLParser().convert_set_clause(string)
예제 #8
0
def run_extract_set_group(expected, string):
    assert expected == SQLParser().extract_set_group(string)
예제 #9
0
def run_test_parse_update(expected, query):
    assert expected == SQLParser().parse_update_stmt(query)
예제 #10
0
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)