summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/dialects/postgresql
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/dialects/postgresql')
-rw-r--r--lib/sqlalchemy/dialects/postgresql/base.py30
1 files changed, 21 insertions, 9 deletions
diff --git a/lib/sqlalchemy/dialects/postgresql/base.py b/lib/sqlalchemy/dialects/postgresql/base.py
index ec22e8633..089769975 100644
--- a/lib/sqlalchemy/dialects/postgresql/base.py
+++ b/lib/sqlalchemy/dialects/postgresql/base.py
@@ -1015,20 +1015,32 @@ class PGCompiler(compiler.SQLCompiler):
def for_update_clause(self, select):
- if select.for_update == 'read':
+ tmp = ' FOR UPDATE'
+
+ # backwards compatibility
+ if isinstance(select.for_update, bool):
+ return tmp
+ elif isinstance(select.for_update, str):
+ if select.for_update == 'nowait':
+ return tmp + ' NOWAIT'
+ elif select.for_update == 'read':
+ return ' FOR SHARE'
+ elif select.for_update == 'read_nowait':
+ return ' FOR SHARE NOWAIT'
+
+ if select.for_update.mode == 'read':
return ' FOR SHARE'
- elif select.for_update == 'read_nowait':
+ elif select.for_update.mode == 'read_nowait':
return ' FOR SHARE NOWAIT'
- tmp = ' FOR UPDATE'
- if isinstance(select.for_update_of, list):
- tmp += ' OF ' + ', '.join([of[0] for of in select.for_update_of])
- elif isinstance(select.for_update_of, tuple):
- tmp += ' OF ' + select.for_update_of[0]
+ if isinstance(select.for_update.of, list):
+ tmp += ' OF ' + ', '.join([of[0] for of in select.for_update.of])
+ elif isinstance(select.for_update.of, tuple):
+ tmp += ' OF ' + select.for_update.of[0]
- if select.for_update == 'nowait':
+ if select.for_update.mode == 'update_nowait':
return tmp + ' NOWAIT'
- elif select.for_update:
+ elif select.for_update.mode == 'update':
return tmp
else:
return super(PGCompiler, self).for_update_clause(select)