Patch(Tags): Check if column exists (#8682)

* fix: tags patch

* fix: auto_commit_on_many_writes

* fix: check if tag exists

* fix: check if tag or tag link exists

* fix: check if column exists

* fix: set autocommit false

* fix: use ignore in insert query for bulk insert

* fix: add option to ignore duplicates
This commit is contained in:
Himanshu 2019-10-29 15:22:38 +05:30 committed by mergify[bot]
parent 9793ed8e5b
commit bf57a1d79a
3 changed files with 15 additions and 10 deletions

View file

@ -968,7 +968,7 @@ class Database(object):
frappe.flags.touched_tables = set()
frappe.flags.touched_tables.update(tables)
def bulk_insert(self, doctype, fields, values):
def bulk_insert(self, doctype, fields, values, ignore_duplicates=False):
"""
Insert multiple records at a time
@ -982,7 +982,8 @@ class Database(object):
for idx, value in enumerate(values):
insert_list.append(tuple(value))
if idx and (idx%10000 == 0 or idx < len(values)-1):
self.sql("""INSERT INTO `tab{doctype}` ({fields}) VALUES {values}""".format(
self.sql("""INSERT {ignore_duplicates} INTO `tab{doctype}` ({fields}) VALUES {values}""".format(
ignore_duplicates="IGNORE" if ignore_duplicates else "",
doctype=doctype,
fields=fields,
values=", ".join(['%s'] * len(insert_list))

View file

@ -254,3 +254,4 @@ frappe.patches.v12_0.delete_duplicate_indexes
frappe.patches.v12_0.set_default_incoming_email_port
frappe.patches.v12_0.update_global_search
execute:frappe.reload_doc('desk', 'doctype', 'notification_settings')
frappe.patches.v12_0.setup_tags

View file

@ -12,19 +12,22 @@ def execute():
time = frappe.utils.get_datetime()
for doctype in frappe.get_list("DocType", filters={"istable": 0, "issingle": 0}):
for dt_tags in frappe.db.sql("select `name`, `_user_tags` from `tab{0}`".format(doctype.name), as_dict=True):
tags = dt_tags.get("_user_tags").split(",") if dt_tags.get("_user_tags") else None
if not tags:
if not frappe.db.count(doctype.name) or not frappe.db.has_column(doctype.name, "_user_tags"):
continue
for _user_tags in frappe.db.sql("select `name`, `_user_tags` from `tab{0}`".format(doctype.name), as_dict=True):
if not _user_tags.get("_user_tags"):
continue
for tag in tags:
for tag in _user_tags.get("_user_tags").split(",") if _user_tags.get("_user_tags") else []:
if not tag:
continue
tag_list.append((tag.strip(), time, time, 'Administrator'))
tag_link_name = frappe.generate_hash(dt_tags.name + tag.strip() + doctype.name, 10),
tag_links.append((tag_link_name, doctype.name, dt_tags.name, tag.strip(), time, time, 'Administrator'))
tag_link_name = frappe.generate_hash(_user_tags.name + tag.strip() + doctype.name, 10)
tag_links.append((tag_link_name, doctype.name, _user_tags.name, tag.strip(), time, time, 'Administrator'))
frappe.db.bulk_insert("Tag", fields=["name", "creation", "modified", "modified_by"], values=set(tag_list))
frappe.db.bulk_insert("Tag Link", fields=["name", "document_type", "document_name", "tag", "creation", "modified", "modified_by"], values=set(tag_links))
frappe.db.bulk_insert("Tag", fields=["name", "creation", "modified", "modified_by"], values=set(tag_list), ignore_duplicates=True)
frappe.db.bulk_insert("Tag Link", fields=["name", "document_type", "document_name", "tag", "creation", "modified", "modified_by"], values=set(tag_links), ignore_duplicates=True)