Merge pull request #201 from michele-comitini/table_init_speedups

little speedup for table init
This commit is contained in:
mdipierro
2013-09-06 11:58:58 -07:00
+17 -13
View File
@@ -8325,14 +8325,15 @@ class Table(object):
self.add_method = MethodAdder(self) self.add_method = MethodAdder(self)
fieldnames,newfields=set(),[] fieldnames,newfields=set(),[]
if hasattr(self,'_primarykey'): _primarykey = getattr(self, '_primarykey', None)
if not isinstance(self._primarykey,list): if _primarykey is not None:
if not isinstance(_primarykey, list):
raise SyntaxError( raise SyntaxError(
"primarykey must be a list of fields from table '%s'" \ "primarykey must be a list of fields from table '%s'" \
% tablename) % tablename)
if len(self._primarykey)==1: if len(_primarykey)==1:
self._id = [f for f in fields if isinstance(f,Field) \ 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 elif not [f for f in fields if (isinstance(f,Field) and
f.type=='id') or (isinstance(f, dict) and f.type=='id') or (isinstance(f, dict) and
f.get("type", None)=="id")]: f.get("type", None)=="id")]:
@@ -8384,18 +8385,21 @@ class Table(object):
lower_fieldnames = set() lower_fieldnames = set()
reserved = dir(Table) + ['fields'] 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: for field in fields:
field_name = field.name field_name = field.name
if db and db.check_reserved: check_reserved(field_name)
db.check_reserved_keyword(field_name) fn_lower = field_name.lower()
elif field_name in reserved: if fn_lower in lower_fieldnames:
raise SyntaxError("field name %s not allowed" % field_name)
if field_name.lower() in lower_fieldnames:
raise SyntaxError("duplicate field %s in table %s" \ raise SyntaxError("duplicate field %s in table %s" \
% (field_name, tablename)) % (field_name, tablename))
else: else:
lower_fieldnames.add(field_name.lower()) lower_fieldnames.add(fn_lower)
self.fields.append(field_name) self.fields.append(field_name)
self[field_name] = field self[field_name] = field
@@ -8406,8 +8410,8 @@ class Table(object):
field.db = field._db = db field.db = field._db = db
self.ALL = SQLALL(self) self.ALL = SQLALL(self)
if hasattr(self,'_primarykey'): if _primarykey is not None:
for k in self._primarykey: for k in _primarykey:
if k not in self.fields: if k not in self.fields:
raise SyntaxError( raise SyntaxError(
"primarykey must be a list of fields from table '%s " % tablename) "primarykey must be a list of fields from table '%s " % tablename)