server/sources/native.py
changeset 9375 8e88576787c3
parent 9336 722635e530a0
child 9402 2c48c091b6a2
child 9492 c7fc56eecd1a
equal deleted inserted replaced
9374:1236d9058ad3 9375:8e88576787c3
   755                 except Exception as ex:
   755                 except Exception as ex:
   756                     pass
   756                     pass
   757             if ex.__class__.__name__ == 'IntegrityError':
   757             if ex.__class__.__name__ == 'IntegrityError':
   758                 # need string comparison because of various backends
   758                 # need string comparison because of various backends
   759                 for arg in ex.args:
   759                 for arg in ex.args:
   760                     if 'SQL Server' in arg:
   760                     # postgres, sqlserver
   761                         mo = re.search("'unique_cw_[^ ]+'", arg)
   761                     mo = re.search("unique_[a-z0-9]{32}", arg)
   762                     else: # postgres
       
   763                         mo = re.search('"unique_cw_[^ ]+"', arg)
       
   764                     if mo is not None:
   762                     if mo is not None:
   765                         index_name = mo.group(0)[1:-1] # eat the surrounding " pair
   763                         raise UniqueTogetherError(session, cstrname=mo.group(0))
   766                         elements = index_name.split('_cw_')[1:]
       
   767                         etype = elements[0]
       
   768                         rtypes = elements[1:]
       
   769                         raise UniqueTogetherError(etype, rtypes)
       
   770                     # sqlite
   764                     # sqlite
   771                     mo = re.search('columns (.*) are not unique', arg)
   765                     mo = re.search('columns (.*) are not unique', arg)
   772                     if mo is not None: # sqlite in use
   766                     if mo is not None: # sqlite in use
   773                         # we left chop the 'cw_' prefix of attribute names
   767                         # we left chop the 'cw_' prefix of attribute names
   774                         rtypes = [c.strip()[3:]
   768                         rtypes = [c.strip()[3:]
   775                                   for c in mo.group(1).split(',')]
   769                                   for c in mo.group(1).split(',')]
   776                         etype = '???'
   770                         raise UniqueTogetherError(session, rtypes=rtypes)
   777                         raise UniqueTogetherError(etype, rtypes)
       
   778             raise
   771             raise
   779         return cursor
   772         return cursor
   780 
   773 
   781     def doexecmany(self, session, query, args):
   774     def doexecmany(self, session, query, args):
   782         """Execute a query.
   775         """Execute a query.