some more optimizations in parse rows
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 2.00.1 (2012-08-28 11:42:17) rc4
|
Version 2.00.1 (2012-08-28 14:03:54) rc4
|
||||||
|
|||||||
+21
-24
@@ -1034,6 +1034,7 @@ class BaseAdapter(ConnectionPool):
|
|||||||
return ['DROP TABLE %s;' % table]
|
return ['DROP TABLE %s;' % table]
|
||||||
|
|
||||||
def drop(self, table, mode=''):
|
def drop(self, table, mode=''):
|
||||||
|
db = table._db
|
||||||
if table._dbt:
|
if table._dbt:
|
||||||
logfile = self.file_open(table._loggername, 'a')
|
logfile = self.file_open(table._loggername, 'a')
|
||||||
queries = self._drop(table, mode)
|
queries = self._drop(table, mode)
|
||||||
@@ -1041,10 +1042,10 @@ class BaseAdapter(ConnectionPool):
|
|||||||
if table._dbt:
|
if table._dbt:
|
||||||
logfile.write(query + '\n')
|
logfile.write(query + '\n')
|
||||||
self.execute(query)
|
self.execute(query)
|
||||||
table._db.commit()
|
db.commit()
|
||||||
del table._db[table._tablename]
|
del db[table._tablename]
|
||||||
del table._db.tables[table._db.tables.index(table._tablename)]
|
del db.tables[db.tables.index(table._tablename)]
|
||||||
table._db._update_referenced_by(table._tablename)
|
db._remove_references_to(table)
|
||||||
if table._dbt:
|
if table._dbt:
|
||||||
self.file_delete(table._dbt)
|
self.file_delete(table._dbt)
|
||||||
logfile.write('success!\n')
|
logfile.write('success!\n')
|
||||||
@@ -1299,11 +1300,10 @@ class BaseAdapter(ConnectionPool):
|
|||||||
counter = None
|
counter = None
|
||||||
### special code to handle CASCADE in SQLite & SpatiaLite
|
### special code to handle CASCADE in SQLite & SpatiaLite
|
||||||
if self.dbengine in ('sqlite', 'spatialite') and counter:
|
if self.dbengine in ('sqlite', 'spatialite') and counter:
|
||||||
for tablename,fieldname in table._referenced_by:
|
for field in table._referenced_by:
|
||||||
f = db[tablename][fieldname]
|
if field.type=='reference '+table._tablename \
|
||||||
if f.type=='reference '+table._tablename \
|
and field.ondelete=='CASCADE':
|
||||||
and f.ondelete=='CASCADE':
|
db(field.belongs(deleted)).delete()
|
||||||
db(db[tablename][fieldname].belongs(deleted)).delete()
|
|
||||||
### end special code to handle CASCADE in SQLite & SpatiaLite
|
### end special code to handle CASCADE in SQLite & SpatiaLite
|
||||||
return counter
|
return counter
|
||||||
|
|
||||||
@@ -1837,15 +1837,12 @@ class BaseAdapter(ConnectionPool):
|
|||||||
id = value
|
id = value
|
||||||
colset.update_record = RecordUpdater(colset,table,id)
|
colset.update_record = RecordUpdater(colset,table,id)
|
||||||
colset.delete_record = RecordDeleter(table,id)
|
colset.delete_record = RecordDeleter(table,id)
|
||||||
for (referee_table, referee_name) \
|
for rfield in table._referenced_by:
|
||||||
in table._referenced_by:
|
|
||||||
s = db[referee_table][referee_name]
|
|
||||||
referee_link = db._referee_name and \
|
referee_link = db._referee_name and \
|
||||||
db._referee_name % dict(
|
db._referee_name % dict(
|
||||||
table=referee_table,field=referee_name)
|
table=rfield.tablename,field=rfield.name)
|
||||||
if referee_link and \
|
if referee_link and not referee_link in colset:
|
||||||
not referee_link in colset:
|
colset[referee_link] = Set(db,rfield == id)
|
||||||
colset[referee_link] = Set(db, s == id)
|
|
||||||
else:
|
else:
|
||||||
if not '_extra' in new_row:
|
if not '_extra' in new_row:
|
||||||
new_row['_extra'] = Row()
|
new_row['_extra'] = Row()
|
||||||
@@ -6819,8 +6816,8 @@ def index():
|
|||||||
patterns.append(tag)
|
patterns.append(tag)
|
||||||
patterns.append(tag+'/:field')
|
patterns.append(tag+'/:field')
|
||||||
if depth>0:
|
if depth>0:
|
||||||
for rtable,rfield in db[table]._referenced_by:
|
for f in db[table]._referenced_by:
|
||||||
tag+='/%s[%s.%s]' % (rtable,rtable,rfield)
|
tag+='/%s[%s.%s]' % (rtable,f.tablename,f.name)
|
||||||
patterns.append(tag)
|
patterns.append(tag)
|
||||||
patterns += auto_table(rtable,base=tag,depth=depth-1)
|
patterns += auto_table(rtable,base=tag,depth=depth-1)
|
||||||
return patterns
|
return patterns
|
||||||
@@ -7152,10 +7149,10 @@ def index():
|
|||||||
data, fields=extracted_fields, colnames=colnames)
|
data, fields=extracted_fields, colnames=colnames)
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def _update_referenced_by(self, other):
|
def _remove_references_to(self, thistable):
|
||||||
for tablename in self.tables:
|
for table in self:
|
||||||
by = self[tablename]._referenced_by
|
table._referenced_by = [field for field in table._referenced_by
|
||||||
by[:] = [item for item in by if not item[0] == other]
|
if not field.table==thistable]
|
||||||
|
|
||||||
def export_to_csv_file(self, ofile, *args, **kwargs):
|
def export_to_csv_file(self, ofile, *args, **kwargs):
|
||||||
step = int(kwargs.get('max_fetch_rows,',500))
|
step = int(kwargs.get('max_fetch_rows,',500))
|
||||||
@@ -7457,9 +7454,9 @@ class Table(object):
|
|||||||
raise SyntaxError,\
|
raise SyntaxError,\
|
||||||
"invalid field '%s' for referenced table '%s' in table '%s'" \
|
"invalid field '%s' for referenced table '%s' in table '%s'" \
|
||||||
% (rfieldname, rtablename, self._tablename)
|
% (rfieldname, rtablename, self._tablename)
|
||||||
rtable._referenced_by.append((self._tablename, field.name))
|
rtable._referenced_by.append(field)
|
||||||
for referee in pr.get(self._tablename,[]):
|
for referee in pr.get(self._tablename,[]):
|
||||||
self._referenced_by.append((referee._tablename,referee.name))
|
self._referenced_by.append(referee)
|
||||||
|
|
||||||
def _filter_fields(self, record, id=False):
|
def _filter_fields(self, record, id=False):
|
||||||
return dict([(k, v) for (k, v) in record.iteritems() if k
|
return dict([(k, v) for (k, v) in record.iteritems() if k
|
||||||
|
|||||||
Reference in New Issue
Block a user