Ver a proveniência

Escape value for using in mysql regexp

version-14
Nabin Hait há 7 anos
ascendente
cometimento
63fbff77ae
1 ficheiros alterados com 4 adições e 8 eliminações
  1. +4
    -8
      frappe/model/naming.py

+ 4
- 8
frappe/model/naming.py Ver ficheiro

@@ -200,17 +200,13 @@ def _set_amended_name(doc):
def append_number_if_name_exists(doctype, value, fieldname='name', separator='-'): def append_number_if_name_exists(doctype, value, fieldname='name', separator='-'):
exists = frappe.db.exists(doctype, exists = frappe.db.exists(doctype,
value if fieldname == 'name' else {fieldname: value}) value if fieldname == 'name' else {fieldname: value})

regex = '^{value}{separator}[[:digit:]]+'.format(value=re.escape(value), separator=separator)
if exists: if exists:
# should be escaped 2 times since
# python string will parse the first escape
escaped_value = re.escape(re.escape(value))

last = frappe.db.sql("""select {fieldname} from `tab{doctype}` last = frappe.db.sql("""select {fieldname} from `tab{doctype}`
where {fieldname} regexp '^{value}{separator}[[:digit:]]+'
where {fieldname} regexp %s
order by length({fieldname}) desc, order by length({fieldname}) desc,
{fieldname} desc limit 1""".format(doctype=doctype,
value=escaped_value, fieldname=fieldname, separator=separator))
{fieldname} desc limit 1""".format(doctype=doctype, fieldname=fieldname), regex)


if last: if last:
count = str(cint(last[0][0].rsplit(separator, 1)[1]) + 1) count = str(cint(last[0][0].rsplit(separator, 1)[1]) + 1)


Carregando…
Cancelar
Guardar