﻿id,summary,reporter,owner,description,type,status,priority,component,severity,resolution,keywords,cc,release
7504,'Cannot operate on a closed cursor' eception causes db to appear as if upgrade is needed,Daniel Abel,Alec Thomas,"
Trying to configure an existing trac instance to work from under virtualenv (trac 0.12, with wsgi under apache), I ran into a  situation where, after running 'trac-admin /path/to/env upgrade' and wiki upgrade, trac, when being called by the webserver says that I have to run the upgrade.  (ie. shows an error page to this effect)  Running upgrade again on the command line says ""no upgrade necessary"", i.e. running trac from command-line and having it called from the webserver (via wsgi) gives two different results to the ""need to be upgraded?"" question.

I managed to track this down to the fact that TagModelProvider's environment_needs_upgrade return 'True' when being called from wsgi, and False when being called from the console. The problem appears to be that the cursor.execute('select count(*) from tags' ) line in there throws an exception, but not because the db is old, but because 'Cannot operate on a closed cursor'.

(I am using sqlite)

Moving the 'cursor = db.cursor()' line to below the 'if self._need_migration(db)', ie. to just above the try/except appears to solve this issue.

So, suggestions:
1) the 'except:' line in environment_needs_upgrade() shouldn't be so greedy, i.e. it shouldn't swallow all exceptions (if possible to filter out those caused by an old database)

2) the 'cursor=db.cursor()' line should be moved to just  above where it is first used.

Note that I assume the situation I ran into would be very difficult to reproduce, but the suggestions above won't have any drawbacks, and just help make the code cleaner.",defect,new,normal,TagsPlugin,normal,,,anonymous,0.12
