def test_update_query(): query = users.update().where(users.c.name == 'default') query = query.values(name='newname', serial=5555, t_list=['l3', 'l4'], t_enum=MyEnum.ITEM_1, t_int_enum=MyIntEnum.ITEM_2, t_datetime=datetime(2030, 1, 1), t_date=date(2030, 1, 1), t_date_2=date(2030, 1, 1), t_interval=timedelta(seconds=180), t_boolean=False) new_query, new_params = connection.compile_query(query) assert query.parameters.get('version') assert query.parameters.get('serial') == 5555 assert query.parameters.get('name') == 'newname' assert query.parameters.get('t_list') == ['l3', 'l4'] assert query.parameters.get('t_enum') == MyEnum.ITEM_1 assert query.parameters.get('t_int_enum') == MyIntEnum.ITEM_2 assert query.parameters.get('t_datetime') == datetime(2030, 1, 1) assert query.parameters.get('t_date') == date(2030, 1, 1) assert query.parameters.get('t_date_2') == date(2030, 1, 1) assert query.parameters.get('t_interval') == timedelta(seconds=180) assert query.parameters.get('t_boolean') == False assert isinstance(query.parameters.get('version'), UUID)
def test_insert_query_defaults_override(): query = users.insert() query = query.values( name='username', serial=4444, t_list=['l1', 'l2'], t_enum=MyEnum.ITEM_1, t_int_enum=MyIntEnum.ITEM_2, t_datetime=datetime(2020, 1, 1), t_date=date(2020, 1, 1), t_date_2=date(2020, 1, 1), t_interval=timedelta(seconds=120), t_boolean=False ) new_query, new_params = connection.compile_query(query) assert query.parameters.get('version') assert query.parameters.get('serial') == 4444 assert query.parameters.get('name') == 'username' assert query.parameters.get('t_list') == ['l1', 'l2'] assert query.parameters.get('t_enum') == MyEnum.ITEM_1 assert query.parameters.get('t_int_enum') == MyIntEnum.ITEM_2 assert query.parameters.get('t_datetime') == datetime(2020, 1, 1) assert query.parameters.get('t_date') == date(2020, 1, 1) assert query.parameters.get('t_date_2') == date(2020, 1, 1) assert query.parameters.get('t_interval') == timedelta(seconds=120) assert query.parameters.get('t_boolean') == False assert isinstance(query.parameters.get('version'), UUID)
def test_update_query(): query = users.update().where(users.c.name == 'default') query = query.values( name='newname', serial=5555, t_list=['l3', 'l4'], t_enum=MyEnum.ITEM_1, t_int_enum=MyIntEnum.ITEM_2, t_datetime=datetime(2030, 1, 1), t_date=date(2030, 1, 1), t_date_2=date(2030, 1, 1), t_interval=timedelta(seconds=180), t_boolean=False ) new_query, new_params = connection.compile_query(query) assert query.parameters.get('version') assert query.parameters.get('serial') == 5555 assert query.parameters.get('name') == 'newname' assert query.parameters.get('t_list') == ['l3', 'l4'] assert query.parameters.get('t_enum') == MyEnum.ITEM_1 assert query.parameters.get('t_int_enum') == MyIntEnum.ITEM_2 assert query.parameters.get('t_datetime') == datetime(2030, 1, 1) assert query.parameters.get('t_date') == date(2030, 1, 1) assert query.parameters.get('t_date_2') == date(2030, 1, 1) assert query.parameters.get('t_interval') == timedelta(seconds=180) assert query.parameters.get('t_boolean') == False assert isinstance(query.parameters.get('version'), UUID)
def test_insert_query_defaults_override(): query = users.insert() query = query.values(name='username', serial=4444, t_list=['l1', 'l2'], t_enum=MyEnum.ITEM_1, t_int_enum=MyIntEnum.ITEM_2, t_datetime=datetime(2020, 1, 1), t_date=date(2020, 1, 1), t_date_2=date(2020, 1, 1), t_interval=timedelta(seconds=120), t_boolean=False) new_query, new_params = connection.compile_query(query) assert query.parameters.get('version') assert query.parameters.get('serial') == 4444 assert query.parameters.get('name') == 'username' assert query.parameters.get('t_list') == ['l1', 'l2'] assert query.parameters.get('t_enum') == MyEnum.ITEM_1 assert query.parameters.get('t_int_enum') == MyIntEnum.ITEM_2 assert query.parameters.get('t_datetime') == datetime(2020, 1, 1) assert query.parameters.get('t_date') == date(2020, 1, 1) assert query.parameters.get('t_date_2') == date(2020, 1, 1) assert query.parameters.get('t_interval') == timedelta(seconds=120) assert query.parameters.get('t_boolean') == False assert isinstance(query.parameters.get('version'), UUID)
def test_compile_create_table_ddl(): create_statement = CreateTable(ddl_test_table) result, params = connection.compile_query(create_statement) assert result == ( '\nCREATE TABLE ddl_test_table (\n\tint_col' ' INTEGER, \n\tstr_col VARCHAR\n)\n\n' ) assert len(params) == 0
def test_compile_query(): ids = list(range(1, 4)) query = file_table.update() \ .values(id=None) \ .where(file_table.c.id.in_(ids)) q, p = connection.compile_query(query) assert q == 'UPDATE meows SET id=$1 WHERE meows.id IN ($2, $3, $4)' assert p == [None, 1, 2, 3]
async def test__replace_keys_colon(): sql = sa.text('SELECT :id, my_date::DATE FROM users') params = { 'id': 123, } sql = sql.params(**params) q, p = connection.compile_query(sql) assert q == 'SELECT $1, my_date::DATE FROM users' assert p == [123]
def test_compile_query_no_debug(caplog): """Validates that no output is printed when the debug flag is disabled.""" ids = list(range(1, 3)) query = file_table.update() \ .values(id=None) \ .where(file_table.c.id.in_(ids)) with caplog.at_level(logging.WARNING, logger='asyncpgsa.query'): results, _ = connection.compile_query(query) msgs = [record.msg for record in caplog.records] assert results not in msgs
async def test_compile_query_debug(caplog): """Validates that the query is printed to stdout when the debug flag is enabled.""" ids = list(range(1, 3)) query = file_table.update() \ .values(id=None) \ .where(file_table.c.id.in_(ids)) with caplog.atLevel(logging.DEBUG, logger='asyncpgsa.query'): results, _ = connection.compile_query(query) msgs = [record.msg for record in caplog.records()] assert results in msgs
def test_insert_query_defaults(): query = users.insert() new_query, new_params = connection.compile_query(query) assert query.parameters.get('name') == name_default assert query.parameters.get('t_list') == t_list_default assert query.parameters.get('t_enum') == t_enum_default assert query.parameters.get('t_int_enum') == t_int_enum_default assert query.parameters.get('t_datetime') == t_datetime_default assert query.parameters.get('t_date') == t_date_default assert query.parameters.get('t_date_2') == t_date_2_default() assert query.parameters.get('t_interval') == t_interval_default assert isinstance(query.parameters.get('version'), UUID) assert query.parameters.get('t_boolean') == t_boolean_default
def test_insert_query_defaults(): query = users.insert() new_query, new_params = connection.compile_query(query) serial_default = query.parameters.get('serial') assert serial_default.name == 'nextval' assert serial_default.clause_expr.element.clauses[0].value == 'serial_seq' assert query.parameters.get('name') == name_default assert query.parameters.get('t_list') == t_list_default assert query.parameters.get('t_enum') == t_enum_default assert query.parameters.get('t_int_enum') == t_int_enum_default assert query.parameters.get('t_datetime') == t_datetime_default assert query.parameters.get('t_date') == t_date_default assert query.parameters.get('t_date_2') == t_date_2_default() assert query.parameters.get('t_interval') == t_interval_default assert isinstance(query.parameters.get('version'), UUID) assert query.parameters.get('t_boolean') == t_boolean_default
async def test_compile_query(monkeypatch): def mock(*args): return 'bob' monkeypatch.setattr('asyncpgsa.connection._get_keys', mock) def mock(*args): return 'bob', 'sally' monkeypatch.setattr('asyncpgsa.connection._replace_keys', mock) ids = list(range(1, 40)) query = file_table.update() \ .values(id=None) \ .where(file_table.c.id.in_(ids)) results = connection.compile_query(query) assert ('bob', 'sally') == results
def test_compile_jsonb_with_custom_json_encoder(): jsonb_table = sa.Table( 'meowsb', sa.MetaData(), sa.Column('data', postgresql.JSONB), ) class JSONEncoder(json.JSONEncoder): def default(self, o): if isinstance(o, uuid.UUID): return str(o) else: return super().default(o) dialect = connection.get_dialect( json_serializer=partial(json.dumps, cls=JSONEncoder) ) data = { 'uuid4': uuid.uuid4(), } query = jsonb_table.insert().values(data=data) q, p = connection.compile_query(query, dialect=dialect) assert q == 'INSERT INTO meowsb (data) VALUES ($1)' assert p == ['{"uuid4": "%s"}' % data['uuid4']]
def test_compile_query_with_custom_column_type(): query = file_type_table.insert().values(type=FileTypes.PDF) q, p = connection.compile_query(query) assert q == 'INSERT INTO meows2 (type) VALUES ($1)' assert p == ['PDF']
def test_compile_text_query(): sql = sa.text('SELECT :id, my_date::DATE FROM users').params(id=123) q, p = connection.compile_query(sql) assert q == 'SELECT $1, my_date::DATE FROM users' assert p == [123]
def test__insert_query_with_scalar_default(): query = users.insert() new_query, new_params = connection.compile_query(query) assert query.parameters.get('name') == 'default'
def test__insert_query_with_callable_default(): query = users.insert().\ values(name='username') new_query, new_params = connection.compile_query(query) assert query.parameters.get('id') is not None assert query.parameters.get('version') is not None
def test__update_query_with_callable_default(): query = users.update().\ values(name='newname').\ where(users.c.name == 'default') new_query, new_params = connection.compile_query(query) assert query.parameters.get('version') is not None
def test_compile_drop_table_ddl(): drop_statement = DropTable(ddl_test_table) drop_query, params = connection.compile_query(drop_statement) assert drop_query == '\nDROP TABLE ddl_test_table' assert len(params) == 0
def query(self, query, *args, **kwargs): compiled_q, compiled_args = compile_query(query) query, args = compiled_q, compiled_args or args return MockQueryContextManager(self.connection, query, args)