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:
parent
9793ed8e5b
commit
bf57a1d79a
3 changed files with 15 additions and 10 deletions
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue