40 lines
1.7 KiB
Diff
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
|