|
4 | 4 | from sqlalchemy.types import VARCHAR, NullType |
5 | 5 | from sqlalchemy.ext.compiler import compiles |
6 | 6 | from sqlalchemy.sql.expression import Executable, ClauseElement |
| 7 | +from sqlalchemy.sql.expression import BindParameter |
7 | 8 |
|
8 | 9 |
|
9 | 10 | class RedshiftDialect(PGDialect_psycopg2): |
@@ -84,8 +85,19 @@ def visit_unload_from_select(element, compiler, **kw): |
84 | 85 | import pdb; pdb.set_trace() |
85 | 86 | query_str = str(query).replace("'", "\'") |
86 | 87 | return "unload ('%(query)s') to '%(bucket)s' credentials 'aws_access_key_id=%(access_key)s;aws_secret_access_key=%(secret_key)s' delimiter ',' addquotes" % { |
87 | | - 'query': query_str, |
| 88 | + 'query': compiler.process(element.select, unload_select=True, literal_binds=True), |
88 | 89 | 'bucket': element.bucket, |
89 | 90 | 'access_key': element.access_key, |
90 | 91 | 'secret_key': element.secret_key, |
91 | 92 | } |
| 93 | + |
| 94 | +@compiles(BindParameter) |
| 95 | +def visit_bindparam(bindparam, compiler, **kw): |
| 96 | + #print bindparam |
| 97 | + res = compiler.visit_bindparam(bindparam, **kw) |
| 98 | + if 'unload_select' in kw: |
| 99 | + #process param and return |
| 100 | + res = res.replace("'", "\\'") |
| 101 | + return res |
| 102 | + else: |
| 103 | + return res |
0 commit comments