658 for arg in ex.args: |
658 for arg in ex.args: |
659 # postgres, sqlserver |
659 # postgres, sqlserver |
660 mo = re.search("unique_[a-z0-9]{32}", arg) |
660 mo = re.search("unique_[a-z0-9]{32}", arg) |
661 if mo is not None: |
661 if mo is not None: |
662 raise UniqueTogetherError(session, cstrname=mo.group(0)) |
662 raise UniqueTogetherError(session, cstrname=mo.group(0)) |
663 # sqlite |
663 # old sqlite |
664 mo = re.search('columns (.*) are not unique', arg) |
664 mo = re.search('columns (.*) are not unique', arg) |
665 if mo is not None: # sqlite in use |
665 if mo is not None: # sqlite in use |
666 # we left chop the 'cw_' prefix of attribute names |
666 # we left chop the 'cw_' prefix of attribute names |
667 rtypes = [c.strip()[3:] |
667 rtypes = [c.strip()[3:] |
668 for c in mo.group(1).split(',')] |
668 for c in mo.group(1).split(',')] |
|
669 raise UniqueTogetherError(session, rtypes=rtypes) |
|
670 # sqlite after http://www.sqlite.org/cgi/src/info/c80e229dd9c1230a |
|
671 if arg.startswith('UNIQUE constraint failed:'): |
|
672 # message looks like: "UNIQUE constraint failed: foo.cw_bar, foo.cw_baz" |
|
673 # so drop the prefix, split on comma, drop the tablenames, and drop "cw_" |
|
674 columns = arg.split(':', 1)[1].split(',') |
|
675 rtypes = [c.split('.', 1)[1].strip()[3:] for c in columns] |
669 raise UniqueTogetherError(session, rtypes=rtypes) |
676 raise UniqueTogetherError(session, rtypes=rtypes) |
670 raise |
677 raise |
671 return cursor |
678 return cursor |
672 |
679 |
673 def doexecmany(self, session, query, args): |
680 def doexecmany(self, session, query, args): |