fix: crash if data field uses unreferenced record
This commit is contained in:
25
ABCDDB.py
25
ABCDDB.py
@@ -267,6 +267,10 @@ class Record:
|
|||||||
FROM ZABCDRECORD
|
FROM ZABCDRECORD
|
||||||
WHERE Z_ENT = ?;''', [z_ent])}
|
WHERE Z_ENT = ?;''', [z_ent])}
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def initEmpty(id: int) -> 'Record':
|
||||||
|
return Record([id] + [None] * 16 + [0])
|
||||||
|
|
||||||
def __init__(self, row: List[Any]) -> None:
|
def __init__(self, row: List[Any]) -> None:
|
||||||
self.id = row[0] # type: int
|
self.id = row[0] # type: int
|
||||||
self.firstname = x520(row[1]) or '' # type: str
|
self.firstname = x520(row[1]) or '' # type: str
|
||||||
@@ -394,27 +398,34 @@ class ABCDDB:
|
|||||||
|
|
||||||
records = Record.queryAll(cur)
|
records = Record.queryAll(cur)
|
||||||
|
|
||||||
|
def _getOrMake(attr: Queryable) -> Record:
|
||||||
|
rec = records.get(attr.parent)
|
||||||
|
if not rec:
|
||||||
|
rec = Record.initEmpty(attr.parent)
|
||||||
|
records[attr.parent] = rec
|
||||||
|
return rec
|
||||||
|
|
||||||
# query once, then distribute
|
# query once, then distribute
|
||||||
for email in Email.queryAll(cur):
|
for email in Email.queryAll(cur):
|
||||||
records[email.parent].email.append(email)
|
_getOrMake(email).email.append(email)
|
||||||
|
|
||||||
for phone in Phone.queryAll(cur):
|
for phone in Phone.queryAll(cur):
|
||||||
records[phone.parent].phone.append(phone)
|
_getOrMake(phone).phone.append(phone)
|
||||||
|
|
||||||
for address in Address.queryAll(cur):
|
for address in Address.queryAll(cur):
|
||||||
records[address.parent].address.append(address)
|
_getOrMake(address).address.append(address)
|
||||||
|
|
||||||
for social in SocialProfile.queryAll(cur):
|
for social in SocialProfile.queryAll(cur):
|
||||||
records[social.parent].socialprofile.append(social)
|
_getOrMake(social).socialprofile.append(social)
|
||||||
|
|
||||||
for note in Note.queryAll(cur):
|
for note in Note.queryAll(cur):
|
||||||
records[note.parent].note = note.text
|
_getOrMake(note).note = note.text
|
||||||
|
|
||||||
for url in URL.queryAll(cur):
|
for url in URL.queryAll(cur):
|
||||||
records[url.parent].urls.append(url)
|
_getOrMake(url).urls.append(url)
|
||||||
|
|
||||||
for service in Service.queryAll(cur):
|
for service in Service.queryAll(cur):
|
||||||
records[service.parent].service.append(service)
|
_getOrMake(service).service.append(service)
|
||||||
|
|
||||||
db.close()
|
db.close()
|
||||||
return records.values()
|
return records.values()
|
||||||
|
|||||||
Reference in New Issue
Block a user