def drop_sql_ids(self, couch_ids): """Filter the given couch ids, removing ids that are in SQL""" for dbname, form_ids in split_list_by_db_partition(couch_ids): with XFormInstanceSQL.get_cursor_for_partition_db( dbname, readonly=True) as cursor: cursor.execute(self.sql, [form_ids]) yield from (form_id for form_id, in cursor.fetchall())
def _drop_sql_form_ids(couch_ids, domain): from corehq.sql_db.util import split_list_by_db_partition get_missing_forms = """ SELECT couch.form_id FROM (SELECT unnest(%s) AS form_id) AS couch LEFT JOIN form_processor_xforminstancesql sql USING (form_id) WHERE sql.form_id IS NULL """ for dbname, form_ids in split_list_by_db_partition(couch_ids): with XFormInstanceSQL.get_cursor_for_partition_db( dbname, readonly=True) as cursor: cursor.execute(get_missing_forms, [form_ids]) yield from (form_id for form_id, in cursor.fetchall())
def _update_forms(db_name, form_ids): with XFormInstanceSQL.get_cursor_for_partition_db(db_name) as cursor: cursor.execute( """ WITH max_dates as ( SELECT form_id, max(modified_on) as modified_on FROM ( SELECT form_id, CASE WHEN deleted_on is not NULL THEN deleted_on WHEN edited_on is not NULL AND edited_on > received_on THEN edited_on ELSE received_on END as modified_on FROM form_processor_xforminstancesql WHERE form_processor_xforminstancesql.form_id in %(form_ids)s union select form_id, max(date) as modified_on from form_processor_xformoperationsql where form_processor_xformoperationsql.form_id in %(form_ids)s group by form_id ) as d group by form_id ) UPDATE form_processor_xforminstancesql SET server_modified_on = max_dates.modified_on FROM max_dates WHERE form_processor_xforminstancesql.form_id = max_dates.form_id """, {'form_ids': form_ids})
def get_missing_form_ids(db, db_form_ids): with XFormInstanceSQL.get_cursor_for_partition_db( db, readonly=True) as cursor: cursor.execute(sql, [db_form_ids]) return [r[0] for r in cursor.fetchall()]