| | 35 | conn = metadata.bind.connect() |
| | 36 | conn.execute("CREATE TABLE a (" |
| | 37 | "id INTEGER PRIMARY KEY AUTOINCREMENT," |
| | 38 | "name VARCHAR(32))") |
| | 39 | conn.close() |
| | 40 | |
| | 41 | class A(Entity): |
| | 42 | pass |
| | 43 | |
| | 44 | setup_all() |
| | 45 | |
| | 46 | a1 = A(name="a1") |
| | 47 | a2 = A(name="a2") |
| | 48 | |
| | 49 | session.commit() |
| | 50 | session.expunge_all() |
| | 51 | |
| | 52 | a1 = A.get_by(name="a1") |
| | 53 | a2 = A.get_by(name="a2") |
| | 54 | assert a1.name == 'a1' |
| | 55 | assert a2.name == 'a2' |
| | 56 | |
| | 57 | def test_fk_auto_join_sa(self): |
| | 58 | # SQLAlchemy produces the join in this case |
| | 59 | person_table = Table('person', metadata, |
| | 60 | Column('id', Integer, primary_key=True), |
| | 61 | Column('name', String(32))) |
| | 62 | |
| | 63 | animal_table = Table('animal', metadata, |
| | 64 | Column('id', Integer, primary_key=True), |
| | 65 | Column('name', String(30)), |
| | 66 | Column('owner_id', Integer, ForeignKey('person.id'))) |
| | 67 | |
| | 68 | metadata.create_all() |
| | 69 | metadata.clear() |
| | 70 | |
| | 71 | class Person(Entity): |
| | 72 | pets = OneToMany('Animal') |
| | 73 | |
| | 74 | class Animal(Entity): |
| | 75 | owner = ManyToOne('Person') |
| | 76 | |
| | 77 | setup_all() |
| | 78 | |
| | 79 | snowball = Animal(name="Snowball") |
| | 80 | snowball2 = Animal(name="Snowball II") |
| | 81 | slh = Animal(name="Santa's Little Helper") |
| | 82 | homer = Person(name="Homer", pets=[slh, snowball]) |
| | 83 | lisa = Person(name="Lisa", pets=[snowball2]) |
| | 84 | |
| | 85 | session.commit() |
| | 86 | session.expunge_all() |
| | 87 | |
| | 88 | homer = Person.get_by(name="Homer") |
| | 89 | lisa = Person.get_by(name="Lisa") |
| | 90 | slh = Animal.get_by(name="Santa's Little Helper") |
| | 91 | |
| | 92 | assert len(homer.pets) == 2 |
| | 93 | assert homer == slh.owner |
| | 94 | assert lisa.pets[0].name == "Snowball II" |
| | 95 | |
| | 96 | def test_fk_auto_join_colname(self): |
| | 214 | |
| | 215 | # currently fails. See elixir/relationships.py:_get_join_clauses |
| | 216 | # def test_m2m_extra_fk(self): |
| | 217 | # person_table = Table('person', metadata, |
| | 218 | # Column('id', Integer, primary_key=True), |
| | 219 | # Column('name', String(32), unique=True)) |
| | 220 | # |
| | 221 | # category_table = Table('category', metadata, |
| | 222 | # Column('name', String(30), primary_key=True)) |
| | 223 | # |
| | 224 | # person_category_table = Table('person_category', metadata, |
| | 225 | # Column('person_id', Integer, ForeignKey('person.id')), |
| | 226 | # Column('category_name', String(30), ForeignKey('category.name')), |
| | 227 | # Column('person_name', String(32), ForeignKey('person.name'))) |
| | 228 | # |
| | 229 | # metadata.create_all() |
| | 230 | # metadata.clear() |
| | 231 | # |
| | 232 | # class Person(Entity): |
| | 233 | # categories = ManyToMany('Category', |
| | 234 | # tablename='person_category', |
| | 235 | # local_colname='person_id') |
| | 236 | # |
| | 237 | # class Category(Entity): |
| | 238 | # persons = ManyToMany('Person', |
| | 239 | # tablename='person_category') |
| | 240 | # |
| | 241 | # setup_all() |
| | 242 | # |
| | 243 | # stupid = Category(name="Stupid") |
| | 244 | # simpson = Category(name="Simpson") |
| | 245 | # old = Category(name="Old") |
| | 246 | # |
| | 247 | # grampa = Person(name="Abe", categories=[simpson, old]) |
| | 248 | # homer = Person(name="Homer", categories=[simpson, stupid]) |
| | 249 | # bart = Person(name="Bart") |
| | 250 | # lisa = Person(name="Lisa") |
| | 251 | # |
| | 252 | # simpson.persons.extend([bart, lisa]) |
| | 253 | # |
| | 254 | # session.commit() |
| | 255 | # session.expunge_all() |
| | 256 | # |
| | 257 | # c = Category.get_by(name="Simpson") |
| | 258 | # grampa = Person.get_by(name="Abe") |
| | 259 | # |
| | 260 | # assert len(c.persons) == 4 |
| | 261 | # assert c in grampa.categories |