Mercurial > p > roundup > code
diff roundup/backends/rdbms_common.py @ 5086:2b551b6b0830
issue2550549 Postgres error on message templating
Exception gets thrown and not captured if nodeid is too large on
postgres. Added a check in rdbms_common layer that max nodeid is <
2^31 -1. This is also the limit for INTEGER on MySql. SqlLite can
support up to 2^63-1, but I chose the smallest common denominator.
Large nodeid should now returns no such id rather than a stack trace.
Patch idea from: martin.v.loewis. (John Rouillard)
This fixes the reason for patches:
https://hg.python.org/tracker/roundup/rev/1548763e8273
and
https://hg.python.org/tracker/roundup/rev/eb3be57f1ef2
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sat, 18 Jun 2016 22:48:21 -0400 |
| parents | e424987d294a |
| children | e74c3611b138 |
line wrap: on
line diff
--- a/roundup/backends/rdbms_common.py Sat Jun 18 00:39:01 2016 -0400 +++ b/roundup/backends/rdbms_common.py Sat Jun 18 22:48:21 2016 -0400 @@ -1228,6 +1228,15 @@ def hasnode(self, classname, nodeid): """ Determine if the database has a given node. """ + # nodeid (aka link) is sql type INTEGER. max positive value + # for INTEGER is 2^31-1 for Postgres and MySQL. The max + # positive value for SqLite is 2^63 -1, so arguably this check + # needs to adapt for the type of the RDBMS. For right now, + # choose lowest common denominator. + if int(nodeid) >= 2**31: + # value out of range return false + return 0 + # If this node is in the cache, then we do not need to go to # the database. (We don't consider this an LRU hit, though.) if (classname, nodeid) in self.cache:
