table.field.referent
This commit is contained in:
@@ -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
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user