server/sources/native.py
changeset 9546 a0cf2993b6d3
parent 9543 39f981482e34
child 9574 2d4c4842bd04
equal deleted inserted replaced
9545:e8ec1b23862f 9546:a0cf2993b6d3
   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):