﻿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
