from pathlib import Path
import sqlite3,re,sys
out=Path(__file__).resolve().parent;label='red' if '--baseline' in sys.argv else 'green'
root=out.parent/('review-baseline' if label=='red' else 'code')
s=(root/'infrastructure/repository/src/main/java/cn/jojo/cc/core/dao/english/QuestionSegmentDao.java').read_text()
sql=re.search(r'@Select\("(SELECT \* FROM cc_new_question[^"\n]+)"\)',s).group(1)
assert sql.endswith(' FOR UPDATE')
# SQLite executes the exact selected columns/filter; only MySQL lock syntax and named placeholder are adapted.
db=sqlite3.connect(':memory:');db.executescript('CREATE TABLE cc_new_question(id INTEGER PRIMARY KEY, del_flag INTEGER, update_time INTEGER);INSERT INTO cc_new_question VALUES(1,0,1000);INSERT INTO cc_new_question VALUES(2,1,1000);')
lines=['source SQL='+sql,'scope=legacy column/filter contract only; SQLite does not prove MySQL FOR UPDATE locking']
try:
 query=sql.removesuffix(' FOR UPDATE').replace('#{questionId}','?')
 assert db.execute(query,(1,)).fetchone()==(1,0,1000)
 assert db.execute(query,(2,)).fetchone() is None
 lines.append('PASS live row selected; deleted legacy row rejected');code=0
except Exception as e:lines.append('FAIL '+str(e));code=1
lines.append('exit='+str(code));(out/(label+'-sql-contract.txt')).write_text('\n'.join(lines)+'\n');print('\n'.join(lines));sys.exit(code)
