def test_insert_identity(self): Thing = self.classes.Thing s = fixture_session() t1, t2 = (Thing(foo=5), Thing(foo=10)) s.add_all([t1, t2]) with assert_engine(testing.db) as asserter: s.flush() eq_(t1.id, 1) eq_(t2.id, 2) asserter.assert_( Conditional( testing.db.dialect.implicit_returning, [ Conditional( testing.db.dialect.insert_executemany_returning, [ CompiledSQL( "INSERT INTO test (foo) VALUES (%(foo)s) " "RETURNING test.id", [{"foo": 5}, {"foo": 10}], dialect="postgresql", ), ], [ CompiledSQL( "INSERT INTO test (foo) VALUES (%(foo)s) " "RETURNING test.id", [{"foo": 5}], dialect="postgresql", ), CompiledSQL( "INSERT INTO test (foo) VALUES (%(foo)s) " "RETURNING test.id", [{"foo": 10}], dialect="postgresql", ), ], ) ], [ CompiledSQL( "INSERT INTO test (foo) VALUES (:foo)", [{"foo": 5}], ), CompiledSQL( "INSERT INTO test (foo) VALUES (:foo)", [{"foo": 10}], ), ], ) )
def test_issue_6793(self): User = self.classes.User session = fixture_session() with self.sql_execution_asserter() as asserter: session.bulk_save_objects([User(name="A"), User(name="B")]) session.add(User(name="C")) session.add(User(name="D")) session.flush() asserter.assert_( Conditional( testing.db.dialect.insert_executemany_returning, [ CompiledSQL( "INSERT INTO users (name) VALUES (:name)", [{ "name": "A" }, { "name": "B" }], ), CompiledSQL( "INSERT INTO users (name) VALUES (:name)", [{ "name": "C" }, { "name": "D" }], ), ], [ CompiledSQL( "INSERT INTO users (name) VALUES (:name)", [{ "name": "A" }, { "name": "B" }], ), CompiledSQL( "INSERT INTO users (name) VALUES (:name)", [{ "name": "C" }], ), CompiledSQL( "INSERT INTO users (name) VALUES (:name)", [{ "name": "D" }], ), ], ))
def test_bulk_save_return_defaults(self): (User, ) = self.classes("User") s = fixture_session() objects = [User(name="u1"), User(name="u2"), User(name="u3")] assert "id" not in objects[0].__dict__ with self.sql_execution_asserter() as asserter: s.bulk_save_objects(objects, return_defaults=True) asserter.assert_( Conditional( testing.db.dialect.insert_executemany_returning, [ CompiledSQL( "INSERT INTO users (name) VALUES (:name)", [{ "name": "u1" }, { "name": "u2" }, { "name": "u3" }], ), ], [ CompiledSQL( "INSERT INTO users (name) VALUES (:name)", [{ "name": "u1" }], ), CompiledSQL( "INSERT INTO users (name) VALUES (:name)", [{ "name": "u2" }], ), CompiledSQL( "INSERT INTO users (name) VALUES (:name)", [{ "name": "u3" }], ), ], )) eq_(objects[0].__dict__["id"], 1)
def test_bulk_insert_joined_inh_return_defaults(self): Person, Engineer, Manager, Boss = self.classes( "Person", "Engineer", "Manager", "Boss" ) s = Session() with self.sql_execution_asserter() as asserter: s.bulk_insert_mappings( Boss, [ dict( name="b1", status="s1", manager_name="mn1", golf_swing="g1", ), dict( name="b2", status="s2", manager_name="mn2", golf_swing="g2", ), dict( name="b3", status="s3", manager_name="mn3", golf_swing="g3", ), ], return_defaults=True, ) asserter.assert_( Conditional( testing.db.dialect.insert_executemany_returning, [ CompiledSQL( "INSERT INTO people (name) VALUES (:name)", [{"name": "b1"}, {"name": "b2"}, {"name": "b3"}], ), ], [ CompiledSQL( "INSERT INTO people (name) VALUES (:name)", [{"name": "b1"}], ), CompiledSQL( "INSERT INTO people (name) VALUES (:name)", [{"name": "b2"}], ), CompiledSQL( "INSERT INTO people (name) VALUES (:name)", [{"name": "b3"}], ), ], ), CompiledSQL( "INSERT INTO managers (person_id, status, manager_name) " "VALUES (:person_id, :status, :manager_name)", [ {"person_id": 1, "status": "s1", "manager_name": "mn1"}, {"person_id": 2, "status": "s2", "manager_name": "mn2"}, {"person_id": 3, "status": "s3", "manager_name": "mn3"}, ], ), CompiledSQL( "INSERT INTO boss (boss_id, golf_swing) VALUES " "(:boss_id, :golf_swing)", [ {"golf_swing": "g1", "boss_id": 1}, {"golf_swing": "g2", "boss_id": 2}, {"golf_swing": "g3", "boss_id": 3}, ], ), )
def test_bulk_save_joined_inh_return_defaults(self): Person, Engineer, Manager, Boss = self.classes( "Person", "Engineer", "Manager", "Boss" ) s = Session() objects = [ Manager(name="m1", status="s1", manager_name="mn1"), Engineer(name="e1", status="s2", primary_language="l1"), Engineer(name="e2", status="s3", primary_language="l2"), Boss(name="b1", status="s3", manager_name="mn2", golf_swing="g1"), ] assert "person_id" not in objects[0].__dict__ with self.sql_execution_asserter() as asserter: s.bulk_save_objects(objects, return_defaults=True) asserter.assert_( CompiledSQL( "INSERT INTO people (name, type) VALUES (:name, :type)", [{"type": "manager", "name": "m1"}], ), CompiledSQL( "INSERT INTO managers (person_id, status, manager_name) " "VALUES (:person_id, :status, :manager_name)", [{"person_id": 1, "status": "s1", "manager_name": "mn1"}], ), Conditional( testing.db.dialect.insert_executemany_returning, [ CompiledSQL( "INSERT INTO people (name, type) " "VALUES (:name, :type)", [ {"type": "engineer", "name": "e1"}, {"type": "engineer", "name": "e2"}, ], ), ], [ CompiledSQL( "INSERT INTO people (name, type) " "VALUES (:name, :type)", [{"type": "engineer", "name": "e1"}], ), CompiledSQL( "INSERT INTO people (name, type) " "VALUES (:name, :type)", [{"type": "engineer", "name": "e2"}], ), ], ), CompiledSQL( "INSERT INTO engineers (person_id, status, primary_language) " "VALUES (:person_id, :status, :primary_language)", [ {"person_id": 2, "status": "s2", "primary_language": "l1"}, {"person_id": 3, "status": "s3", "primary_language": "l2"}, ], ), CompiledSQL( "INSERT INTO people (name, type) VALUES (:name, :type)", [{"type": "boss", "name": "b1"}], ), CompiledSQL( "INSERT INTO managers (person_id, status, manager_name) " "VALUES (:person_id, :status, :manager_name)", [{"person_id": 4, "status": "s3", "manager_name": "mn2"}], ), CompiledSQL( "INSERT INTO boss (boss_id, golf_swing) VALUES " "(:boss_id, :golf_swing)", [{"boss_id": 4, "golf_swing": "g1"}], ), ) eq_(objects[0].__dict__["person_id"], 1) eq_(objects[3].__dict__["person_id"], 4) eq_(objects[3].__dict__["boss_id"], 4)
def test_insert_computed(self, eager): if eager: Thing = self.classes.Thing else: Thing = self.classes.ThingNoEager s = fixture_session() t1, t2 = (Thing(id=1, foo=5), Thing(id=2, foo=10)) s.add_all([t1, t2]) with assert_engine(testing.db) as asserter: s.flush() eq_(t1.bar, 5 + 42) eq_(t2.bar, 10 + 42) asserter.assert_( Conditional( eager and testing.db.dialect.implicit_returning, [ Conditional( testing.db.dialect.insert_executemany_returning, [ CompiledSQL( "INSERT INTO test (id, foo) " "VALUES (%(id)s, %(foo)s) " "RETURNING test.bar", [{"foo": 5, "id": 1}, {"foo": 10, "id": 2}], dialect="postgresql", ), ], [ CompiledSQL( "INSERT INTO test (id, foo) " "VALUES (%(id)s, %(foo)s) " "RETURNING test.bar", [{"foo": 5, "id": 1}], dialect="postgresql", ), CompiledSQL( "INSERT INTO test (id, foo) " "VALUES (%(id)s, %(foo)s) " "RETURNING test.bar", [{"foo": 10, "id": 2}], dialect="postgresql", ), ], ) ], [ CompiledSQL( "INSERT INTO test (id, foo) VALUES (:id, :foo)", [{"foo": 5, "id": 1}, {"foo": 10, "id": 2}], ), CompiledSQL( "SELECT test.bar AS test_bar FROM test " "WHERE test.id = :pk_1", [{"pk_1": 1}], ), CompiledSQL( "SELECT test.bar AS test_bar FROM test " "WHERE test.id = :pk_1", [{"pk_1": 2}], ), ], ) )