Files
dolt/integration-tests/mysql-client-tests/python/py-sqlalchemy-test.py
2025-10-12 17:33:54 -07:00

68 lines
2.2 KiB
Python

import sqlalchemy
from sqlalchemy.engine import Engine
from sqlalchemy import create_engine
import sys
QUERY_RESPONSE = [
{"create table test (pk int, `value` int, primary key(pk))": []},
{"describe test": [
('pk', 'int', 'NO', 'PRI', None, ''),
('value', 'int', 'YES', '', None, '')
]},
{"insert into test (pk, `value`) values (0,0)": ()},
{"select * from test": [(0, 0)]},
{"call dolt_add('-A');": [(0,)]},
{"call dolt_commit('-m', 'my commit')": [('',)]},
{"select COUNT(*) FROM dolt_log": [(2,)]},
{"call dolt_checkout('-b', 'mybranch')": [(0, "Switched to branch 'mybranch'")]},
{"insert into test (pk, `value`) values (1,1)": []},
{"call dolt_commit('-a', '-m', 'my commit2')": [('',)]},
{"call dolt_checkout('main')": [(0, "Switched to branch 'main'")]},
{"call dolt_merge('mybranch')": [('',1,0,)]},
{"select COUNT(*) FROM dolt_log": [(3,)]},
]
def main():
user = sys.argv[1]
port = int(sys.argv[2])
db = sys.argv[3]
conn_string_base = "mysql+mysqlconnector://"
engine = create_engine(conn_string_base +
"{user}@127.0.0.1:{port}/{db}".format(user=user,
port=port,
db=db)
)
with engine.connect() as con:
for query_response in QUERY_RESPONSE:
query = list(query_response.keys())[0]
exp_results = query_response[query]
result_proxy = con.execute(query)
try:
results = result_proxy.fetchall()
if (results != exp_results) and ("dolt_commit" not in query) and ("dolt_merge" not in query):
print("Query:")
print(query)
print("Expected:")
print(exp_results)
print("Received:")
print(results)
sys.exit(1)
# You can't call fetchall on an insert
# so we'll just ignore the exception
except sqlalchemy.exc.ResourceClosedError:
pass
con.close()
sys.exit(0)
main()