table.field.referent

This commit is contained in:
mdipierro
2013-07-31 11:25:15 -05:00
parent 26c8fcd5b3
commit ab9a35b541
2 changed files with 14 additions and 7 deletions
+1 -1
View File
@@ -1 +1 @@
Version 2.6.0-development+timestamp.2013.07.30.09.11.35
Version 2.6.0-development+timestamp.2013.07.31.11.24.32
+13 -6
View File
@@ -8371,19 +8371,20 @@ class Table(object):
self._referenced_by = []
for field in self:
fieldname = field.name
field_type = field.type
field_type = field.type
if isinstance(field_type,str) and field_type[:10] == 'reference ':
ref = field_type[10:].strip()
if not ref.split():
if not ref.strip():
raise SyntaxError('Table: reference to nothing: %s' %ref)
refs = ref.split('.')
rtablename = refs[0]
if '.' in ref:
rtablename, rfieldname = ref.split('.',1)
else:
rtablename, rfieldname = ref, None
if not rtablename in db:
pr[rtablename] = pr.get(rtablename,[]) + [field]
continue
rtable = db[rtablename]
if len(refs)==2:
rfieldname = refs[1]
if rfieldname:
if not hasattr(rtable,'_primarykey'):
raise SyntaxError(
'keyed tables can only reference other keyed tables (for now)')
@@ -8391,7 +8392,13 @@ class Table(object):
raise SyntaxError(
"invalid field '%s' for referenced table '%s' in table '%s'" \
% (rfieldname, rtablename, self._tablename))
rfield = rtable[rfieldname]
else:
rfield = rtable._id
rtable._referenced_by.append(field)
field.referent = rfield
else:
field.referent = None
for referee in pr.get(self._tablename,[]):
self._referenced_by.append(referee)