some speadup in dal parse 1.5x
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 2.00.0 (2012-08-26 10:41:21) dev
|
Version 2.00.0 (2012-08-26 11:50:44) dev
|
||||||
|
|||||||
+47
-26
@@ -1783,36 +1783,37 @@ class BaseAdapter(ConnectionPool):
|
|||||||
db = self.db
|
db = self.db
|
||||||
virtualtables = []
|
virtualtables = []
|
||||||
new_rows = []
|
new_rows = []
|
||||||
|
tmps = []
|
||||||
|
for colname in colnames:
|
||||||
|
if not regex_table_field.match(colname):
|
||||||
|
tmps.append(None)
|
||||||
|
else:
|
||||||
|
(tablename, fieldname) = colname.split('.')
|
||||||
|
table = db[tablename]
|
||||||
|
field = table[fieldname]
|
||||||
|
tmps.append((tablename,fieldname,table,field))
|
||||||
for (i,row) in enumerate(rows):
|
for (i,row) in enumerate(rows):
|
||||||
new_row = Row()
|
new_row = Row()
|
||||||
for j,colname in enumerate(colnames):
|
for (j,colname) in enumerate(colnames):
|
||||||
value = row[j]
|
value = row[j]
|
||||||
if not regex_table_field.match(colnames[j]):
|
tmp = tmps[j]
|
||||||
if not '_extra' in new_row:
|
if tmp:
|
||||||
new_row['_extra'] = Row()
|
(tablename,fieldname,table,field) = tmp
|
||||||
new_row['_extra'][colnames[j]] = \
|
if tablename in new_row:
|
||||||
self.parse_value(value, fields[j].type,blob_decode)
|
colset = new_row[tablename]
|
||||||
new_column_name = \
|
else:
|
||||||
regex_select_as_parser.search(colnames[j])
|
|
||||||
if not new_column_name is None:
|
|
||||||
column_name = new_column_name.groups(0)
|
|
||||||
setattr(new_row,column_name[0],value)
|
|
||||||
else:
|
|
||||||
(tablename, fieldname) = colname.split('.')
|
|
||||||
table = db[tablename]
|
|
||||||
field = table[fieldname]
|
|
||||||
if not tablename in new_row:
|
|
||||||
colset = new_row[tablename] = Row()
|
colset = new_row[tablename] = Row()
|
||||||
if tablename not in virtualtables:
|
if tablename not in virtualtables:
|
||||||
virtualtables.append(tablename)
|
virtualtables.append(tablename)
|
||||||
else:
|
value = self.parse_value(value,field.type,
|
||||||
colset = new_row[tablename]
|
blob_decode)
|
||||||
value = self.parse_value(value,field.type,blob_decode)
|
if field.filter_out:
|
||||||
if field.filter_out: value = field.filter_out(value)
|
value = field.filter_out(value)
|
||||||
colset[fieldname] = value
|
colset[fieldname] = value
|
||||||
|
|
||||||
if field.type == 'id':
|
if field.type == 'id':
|
||||||
# temporary hack to deal with GoogleDatastoreAdapter
|
# temporary hack to deal with
|
||||||
|
# GoogleDatastoreAdapter
|
||||||
# references
|
# references
|
||||||
if isinstance(self, GoogleDatastoreAdapter):
|
if isinstance(self, GoogleDatastoreAdapter):
|
||||||
id = value.key().id_or_name()
|
id = value.key().id_or_name()
|
||||||
@@ -1826,12 +1827,26 @@ class BaseAdapter(ConnectionPool):
|
|||||||
colset.delete_record = (
|
colset.delete_record = (
|
||||||
lambda t = table, i = id:
|
lambda t = table, i = id:
|
||||||
t._db(t._id==i).delete())
|
t._db(t._id==i).delete())
|
||||||
for (referee_table, referee_name) in table._referenced_by:
|
for (referee_table, referee_name) \
|
||||||
|
in table._referenced_by:
|
||||||
s = db[referee_table][referee_name]
|
s = db[referee_table][referee_name]
|
||||||
referee_link = db._referee_name and \
|
referee_link = db._referee_name and \
|
||||||
db._referee_name % dict(table=referee_table,field=referee_name)
|
db._referee_name % dict(
|
||||||
if referee_link and not referee_link in colset:
|
table=referee_table,field=referee_name)
|
||||||
|
if referee_link and \
|
||||||
|
not referee_link in colset:
|
||||||
colset[referee_link] = Set(db, s == id)
|
colset[referee_link] = Set(db, s == id)
|
||||||
|
else:
|
||||||
|
if not '_extra' in new_row:
|
||||||
|
new_row['_extra'] = Row()
|
||||||
|
new_row['_extra'][colname] = \
|
||||||
|
self.parse_value(value,
|
||||||
|
fields[j].type,blob_decode)
|
||||||
|
new_column_name = \
|
||||||
|
regex_select_as_parser.search(colname)
|
||||||
|
if not new_column_name is None:
|
||||||
|
column_name = new_column_name.groups(0)
|
||||||
|
setattr(new_row,column_name[0],value)
|
||||||
new_rows.append(new_row)
|
new_rows.append(new_row)
|
||||||
rowsobj = Rows(db, new_rows, colnames, rawrows=rows)
|
rowsobj = Rows(db, new_rows, colnames, rawrows=rows)
|
||||||
|
|
||||||
@@ -3136,7 +3151,7 @@ class FireBirdAdapter(BaseAdapter):
|
|||||||
def __init__(self,db,uri,pool_size=0,folder=None,db_codec ='UTF-8',
|
def __init__(self,db,uri,pool_size=0,folder=None,db_codec ='UTF-8',
|
||||||
credential_decoder=IDENTITY, driver_args={},
|
credential_decoder=IDENTITY, driver_args={},
|
||||||
adapter_args={}):
|
adapter_args={}):
|
||||||
if adapter_args.has_key('driver_name'):
|
if 'driver_name' in adapter_args:
|
||||||
if adapter_args['driver_name'] == 'kinterbasdb':
|
if adapter_args['driver_name'] == 'kinterbasdb':
|
||||||
self.driver = kinterbasdb
|
self.driver = kinterbasdb
|
||||||
elif adapter_args['driver_name'] == 'firebirdsql':
|
elif adapter_args['driver_name'] == 'firebirdsql':
|
||||||
@@ -3202,7 +3217,7 @@ class FireBirdEmbeddedAdapter(FireBirdAdapter):
|
|||||||
credential_decoder=IDENTITY, driver_args={},
|
credential_decoder=IDENTITY, driver_args={},
|
||||||
adapter_args={}):
|
adapter_args={}):
|
||||||
|
|
||||||
if adapter_args.has_key('driver_name'):
|
if 'driver_name' in adapter_args:
|
||||||
if adapter_args['driver_name'] == 'kinterbasdb':
|
if adapter_args['driver_name'] == 'kinterbasdb':
|
||||||
self.driver = kinterbasdb
|
self.driver = kinterbasdb
|
||||||
elif adapter_args['driver_name'] == 'firebirdsql':
|
elif adapter_args['driver_name'] == 'firebirdsql':
|
||||||
@@ -6314,6 +6329,9 @@ class Row(object):
|
|||||||
def __contains__(self,key):
|
def __contains__(self,key):
|
||||||
return key in self.__dict__
|
return key in self.__dict__
|
||||||
|
|
||||||
|
def update(self, *args, **kwargs):
|
||||||
|
self.__dict__.update(*args, **kwargs)
|
||||||
|
|
||||||
def keys(self):
|
def keys(self):
|
||||||
return self.__dict__.keys()
|
return self.__dict__.keys()
|
||||||
|
|
||||||
@@ -6998,6 +7016,9 @@ def index():
|
|||||||
def __contains__(self, tablename):
|
def __contains__(self, tablename):
|
||||||
return tablename in self.tables
|
return tablename in self.tables
|
||||||
|
|
||||||
|
def get(self,key,default):
|
||||||
|
return self.__dict__.get(key,default)
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
for tablename in self.tables:
|
for tablename in self.tables:
|
||||||
yield self[tablename]
|
yield self[tablename]
|
||||||
|
|||||||
Reference in New Issue
Block a user