#!/usr/bin/env python3
import json,pathlib
P=pathlib.Path(__file__).resolve().parent
def main():
 d=json.loads((P/'ddl-result.json').read_text());q=json.loads((P/'independent-readback.json').read_text());b0=json.loads((P/'B-before.json').read_text());b1=json.loads((P/'B-after.json').read_text());m=json.loads((P/'metadata-before-after.json').read_text())
 assert d['exit_code']==d['stderr_bytes']==q['exit_code']==q['stderr_bytes']==0
 r=d['report'];z=q['report'];assert r['status']==z['status']==b0['status']==b1['status']=='pass'
 assert r['ddl_count']==1 and r['business_dml']==r['global_parameter_changes']==r['privilege_changes']==0
 assert r['ddl_sql']=='ALTER TABLE "AIZHCT_APP"."YOSHOP_USER_GIFT_LOG" ADD CONSTRAINT "UK_GIFT_STORE_IDEMP" UNIQUE ("STORE_ID", "IDEMPOTENCY_KEY")'
 assert r['rows_before']==r['rows_after']==z['rows']==r['ascii_grammar_keys_before']==47
 assert r['actual_duplicate_groups_before']==r['ascii_folded_duplicate_groups_before']==0
 assert r['all19_column_exact_rows_sha256_before']==r['all19_column_exact_rows_sha256_after']==z['all19_columns_sha256']=='4d7e37400ea4e3fc16d81e498a019840b9b4a4be2dc4a5b76c9d05af379b66a3'
 assert r['own_user_sha256_before']==r['own_user_sha256_after']==z['own_user_sha256']
 assert r['s5_C_five_rows_sha256_before']==r['s5_C_five_rows_sha256_after']==z['s5_C_five_rows_sha256']
 assert b0['s5_rows']==b1['s5_rows']==5 and b0['s5_rows_sha256']==b1['s5_rows_sha256'] and b0['own_user_sha256']==b1['own_user_sha256']
 a=m['before'];c=m['after'];assert a['object']==c['object'] and a['columns']==c['columns'] and a['trigger_count']==c['trigger_count']==0
 old={x['constraint_name']:x for x in a['constraints']};new={x['constraint_name']:x for x in c['constraints']};assert len(new)==len(old)+1 and all(new[k]==v for k,v in old.items())
 assert [x for x in c['constraint_columns'] if x['constraint_name'] in old]==a['constraint_columns']
 uk=new['UK_GIFT_STORE_IDEMP'];assert uk['constraint_type']=='U' and uk['status']=='ENABLED' and uk['validated']=='VALIDATED'
 assert [x['column_name'] for x in c['constraint_columns'] if x['constraint_name']==uk['constraint_name']]==['STORE_ID','IDEMPOTENCY_KEY']
 oi={x['index_name']:x for x in a['indexes']};ni={x['index_name']:x for x in c['indexes']};assert len(ni)==len(oi)+1 and all(ni[k]==v for k,v in oi.items())
 assert [x for x in c['index_columns'] if x['index_name'] in oi]==a['index_columns']
 assert ni[uk['index_name']]['uniqueness']=='UNIQUE' and ni[uk['index_name']]['status']=='VALID'
 assert [x['column_name'] for x in c['index_columns'] if x['index_name']==uk['index_name']]==['STORE_ID','IDEMPOTENCY_KEY']
 assert r['Unicode_full_equivalence'] is False and r['application_error_mapping_and_concurrency_HTTP_verified'] is False
 print(json.dumps({'status':'pass','ddl_verified':1,'all47_rows_19_columns_unchanged':True,'S5_ten_rows_and_accounts_unchanged':True,'new_constraint':'UK_GIFT_STORE_IDEMP','only_added_index':uk['index_name'],'business_dml':0,'Unicode_full_equivalence':False},indent=2))
if __name__=='__main__':main()
