from garcon.contrib import redshift_util as util def test_escape_single_quotes(): """Test escape_single_quotes escapes quotes properly.""" # legacy style double_escaped_sql = """ SELECT GETDATE() AS ingestion_time, raw_temp.file_name, \\'\\' AS owned_views_watch_page;""" # new style unescaped_sql = """ SELECT GETDATE() AS ingestion_time, raw_temp.file_name, '' AS owned_views_watch_page;""" # raw string (exactly as we always need our query in the end) properly_escaped_sql = r""" SELECT GETDATE() AS ingestion_time, raw_temp.file_name, \'\' AS owned_views_watch_page;""" # Double escaped SQL is escaped indeed assert str(double_escaped_sql) == str(properly_escaped_sql) # Raw presentation of double escaped SQL not changed assert util._escape_single_quotes( double_escaped_sql) == properly_escaped_sql # Unescaped SQL wasn't escaped at first assert str(unescaped_sql) != str(properly_escaped_sql) # Raw presentation of unescaped SQL is now escaped assert util._escape_single_quotes( unescaped_sql) == properly_escaped_sql def test_unload_sql(): """Test UNLOAD sql formatter. """ sql = util.unload_sql( query='tquery', s3_prefix='tprefix', aws_access_key='nokey', aws_access_secret='nosecret', options='GZIP ESCAPE', ) assert sql.startswith("UNLOAD ('tquery') TO 'tprefix'") assert 'CREDENTIALS' in sql assert sql.endswith('GZIP ESCAPE') def test_describe_table_sql(): """Test DESCRIBE sql formatter. """ sql = util.describe_table_sql(schema='tschema', table='ttable') assert sql.startswith('SELECT') assert 'tschema' in sql assert 'ttable' in sql