trytond-patches/support_postgresql10_6789.p...

40 lines
1.7 KiB
Diff

diff -r 57512456d26d trytond/ir/sequence.py
--- a/trytond/trytond/ir/sequence.py Thu Mar 01 22:53:06 2018 +0100
+++ b/trytond/trytond/ir/sequence.py Tue Apr 10 15:02:58 2018 +0200
@@ -163,10 +163,31 @@
cursor = Transaction().cursor
sql_name = self._sql_sequence_name
if sql_sequence and not self._strict:
- cursor.execute('SELECT '
- 'CASE WHEN NOT is_called THEN last_value '
- 'ELSE last_value + increment_by '
- 'END FROM "%s"' % sql_name)
+ cursor.execute('SELECT version()')
+ cursor.execute('SHOW server_version_num')
+ version, = cursor.fetchone()
+ major, rest = divmod(int(version), 10000)
+ minor, patch = divmod(rest, 100)
+ version = (major, minor)
+ if version >= (10, 0):
+ param = Flavor.get().param
+ cursor.execute(
+ 'SELECT increment_by '
+ 'FROM pg_sequences '
+ 'WHERE sequencename=%s '
+ % param, (sql_name,))
+ increment, = cursor.fetchone()
+ cursor.execute(
+ 'SELECT CASE WHEN NOT is_called THEN last_value '
+ 'ELSE last_value + %s '
+ 'END '
+ 'FROM "%s"' % (param, sql_name),
+ (increment,))
+ else:
+ cursor.execute('SELECT '
+ 'CASE WHEN NOT is_called THEN last_value '
+ 'ELSE last_value + increment_by '
+ 'END FROM "%s"' % sql_name)
return cursor.fetchone()[0]
else:
return self.number_next_internal