little speedup for table init
This commit is contained in:
+20
-16
@@ -8302,14 +8302,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")]:
|
||||||
@@ -8361,18 +8362,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
|
||||||
@@ -8383,8 +8387,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)
|
||||||
@@ -8455,10 +8459,10 @@ class Table(object):
|
|||||||
field_type = field.type
|
field_type = field.type
|
||||||
if isinstance(field_type,str) and field_type[:10] == 'reference ':
|
if isinstance(field_type,str) and field_type[:10] == 'reference ':
|
||||||
ref = field_type[10:].strip()
|
ref = field_type[10:].strip()
|
||||||
if not ref.strip():
|
if not ref:
|
||||||
raise SyntaxError('Table: reference to nothing: %s' %ref)
|
SyntaxError('Table: reference to nothing: %s' %ref)
|
||||||
if '.' in ref:
|
if '.' in ref:
|
||||||
rtablename, rfieldname = ref.split('.',1)
|
rtablename, throw_it,rfieldname = ref.partition('.')
|
||||||
else:
|
else:
|
||||||
rtablename, rfieldname = ref, None
|
rtablename, rfieldname = ref, None
|
||||||
if not rtablename in db:
|
if not rtablename in db:
|
||||||
|
|||||||
Reference in New Issue
Block a user