little speedup for table init
This commit is contained in:
36
gluon/dal.py
36
gluon/dal.py
@@ -8302,14 +8302,15 @@ class Table(object):
|
||||
self.add_method = MethodAdder(self)
|
||||
|
||||
fieldnames,newfields=set(),[]
|
||||
if hasattr(self,'_primarykey'):
|
||||
if not isinstance(self._primarykey,list):
|
||||
_primarykey = getattr(self, '_primarykey', None)
|
||||
if _primarykey is not None:
|
||||
if not isinstance(_primarykey, list):
|
||||
raise SyntaxError(
|
||||
"primarykey must be a list of fields from table '%s'" \
|
||||
% tablename)
|
||||
if len(self._primarykey)==1:
|
||||
if len(_primarykey)==1:
|
||||
self._id = [f for f in fields if isinstance(f,Field) \
|
||||
and f.name==self._primarykey[0]][0]
|
||||
and f.name==_primarykey[0]][0]
|
||||
elif not [f for f in fields if (isinstance(f,Field) and
|
||||
f.type=='id') or (isinstance(f, dict) and
|
||||
f.get("type", None)=="id")]:
|
||||
@@ -8361,18 +8362,21 @@ class Table(object):
|
||||
|
||||
lower_fieldnames = set()
|
||||
reserved = dir(Table) + ['fields']
|
||||
if (db and db.check_reserved):
|
||||
check_reserved = db.check_reserved_keyword
|
||||
else:
|
||||
def check_reserved(field_name):
|
||||
if field_name in reserved:
|
||||
raise SyntaxError("field name %s not allowed" % field_name)
|
||||
for field in fields:
|
||||
field_name = field.name
|
||||
if db and db.check_reserved:
|
||||
db.check_reserved_keyword(field_name)
|
||||
elif field_name in reserved:
|
||||
raise SyntaxError("field name %s not allowed" % field_name)
|
||||
|
||||
if field_name.lower() in lower_fieldnames:
|
||||
check_reserved(field_name)
|
||||
fn_lower = field_name.lower()
|
||||
if fn_lower in lower_fieldnames:
|
||||
raise SyntaxError("duplicate field %s in table %s" \
|
||||
% (field_name, tablename))
|
||||
else:
|
||||
lower_fieldnames.add(field_name.lower())
|
||||
lower_fieldnames.add(fn_lower)
|
||||
|
||||
self.fields.append(field_name)
|
||||
self[field_name] = field
|
||||
@@ -8383,8 +8387,8 @@ class Table(object):
|
||||
field.db = field._db = db
|
||||
self.ALL = SQLALL(self)
|
||||
|
||||
if hasattr(self,'_primarykey'):
|
||||
for k in self._primarykey:
|
||||
if _primarykey is not None:
|
||||
for k in _primarykey:
|
||||
if k not in self.fields:
|
||||
raise SyntaxError(
|
||||
"primarykey must be a list of fields from table '%s " % tablename)
|
||||
@@ -8455,10 +8459,10 @@ class Table(object):
|
||||
field_type = field.type
|
||||
if isinstance(field_type,str) and field_type[:10] == 'reference ':
|
||||
ref = field_type[10:].strip()
|
||||
if not ref.strip():
|
||||
raise SyntaxError('Table: reference to nothing: %s' %ref)
|
||||
if not ref:
|
||||
SyntaxError('Table: reference to nothing: %s' %ref)
|
||||
if '.' in ref:
|
||||
rtablename, rfieldname = ref.split('.',1)
|
||||
rtablename, throw_it,rfieldname = ref.partition('.')
|
||||
else:
|
||||
rtablename, rfieldname = ref, None
|
||||
if not rtablename in db:
|
||||
|
||||
Reference in New Issue
Block a user