patch to apply to trunk. Please test it extensively with all the possible
combinations.
On Wednesday, November 7, 2012 2:23:35 PM UTC+1, Niphlod wrote:
>
> at that point you miss formatting fields and references. In addition,
> db.executesql() doesn't return an iterator either. You should code your own
> exporter using db._adapter.execute() and a yielding fetchone()s.
>
> On Wednesday, November 7, 2012 2:01:45 PM UTC+1, Johann Spies wrote:
>>
>> On 7 November 2012 14:05, Niphlod <[email protected]> wrote:
>>
>>> if your set doesn't fit into memory, saving it to a temp file won't get
>>> you out of troubles. One of DAL problems is that a Rows object does not
>>> return an iterator from the cursor, it's fetched all into memory first.
>>>
>>>
>> In that case I would be inclined to use bypass DAL and db.executesql and
>> use the backend to export to a file. That should be more efficient.
>>
>> Regards
>> Johann
>> --
>> Because experiencing your loyal love is better than life itself,
>> my lips will praise you. (Psalm 63:3)
>>
>>
--
@@ -1934,25 +1934,23 @@ class SQLFORM(FORM):
orderby = db[tablename][fieldname]
if sign == '~':
orderby = ~orderby
-
- table_fields = [f for f in fields if f._tablename in tablenames]
- if (export_type in ('csv_with_hidden_cols', 'tsv_with_hidden_cols')
- and export_type in exportManager):
+ expcolumns = columns
+ if export_type.endswith('with_hidden_cols'):
+ expcolumns = [f for f in fields if f._tablename in tablenames]
+ if export_type in exportManager:
if request.vars.keywords:
try:
dbset = dbset(SQLFORM.build_query(
fields, request.vars.get('keywords', '')))
- rows = dbset.select(cacheable=True)
+ rows = dbset.select(cacheable=True, *expcolumns)
except Exception, e:
response.flash = T('Internal Error')
rows = []
else:
- rows = dbset.select(cacheable=True)
- else:
- rows = dbset.select(left=left, orderby=orderby,
- cacheable=True, *columns)
+ rows = dbset.select(left=left, orderby=orderby,
+ cacheable=True, *expcolumns)
- if export_type in exportManager:
+ #begin building up exported file
value = exportManager[export_type]
clazz = value[0] if hasattr(value, '__getitem__') else value
oExp = clazz(rows)