517 add_inline_relation_column(session, rdefdef.subject, rtype) |
517 add_inline_relation_column(session, rdefdef.subject, rtype) |
518 eschema = schema[rdefdef.subject] |
518 eschema = schema[rdefdef.subject] |
519 insert_rdef_on_subclasses(session, eschema, rschema, rdefdef, |
519 insert_rdef_on_subclasses(session, eschema, rschema, rdefdef, |
520 {'composite': entity.composite}) |
520 {'composite': entity.composite}) |
521 else: |
521 else: |
|
522 if rschema.symmetric: |
|
523 # for symmetric relations, rdefs will store relation definitions |
|
524 # in both ways (i.e. (subj -> obj) and (obj -> subj)) |
|
525 relation_already_defined = len(rschema.rdefs) > 2 |
|
526 else: |
|
527 relation_already_defined = len(rschema.rdefs) > 1 |
522 # need to create the relation if no relation definition in the |
528 # need to create the relation if no relation definition in the |
523 # schema and if it has not been added during other event of the same |
529 # schema and if it has not been added during other event of the same |
524 # transaction |
530 # transaction |
525 if not (len(rschema.rdefs) > 1 or |
531 if not (relation_already_defined or |
526 rtype in session.transaction_data.get('createdtables', ())): |
532 rtype in session.transaction_data.get('createdtables', ())): |
527 rschema = schema.rschema(rtype) |
533 rschema = schema.rschema(rtype) |
528 # create the necessary table |
534 # create the necessary table |
529 for sql in y2sql.rschema2sql(rschema).split(';'): |
535 for sql in y2sql.rschema2sql(rschema).split(';'): |
530 if sql.strip(): |
536 if sql.strip(): |