[Buildbot-commits] [Buildbot] #1810: older versions of sqlite don't handle DDL changes between connections
Buildbot
nobody at buildbot.net
Tue Feb 15 04:09:34 UTC 2011
#1810: older versions of sqlite don't handle DDL changes between connections
---------------------+--------------------
Reporter: dustin | Owner:
Type: defect | Status: new
Priority: major | Milestone: 0.8.4
Version: master | Resolution:
Keywords: database |
---------------------+--------------------
Description changed by dustin:
Old description:
> The following fails on sqlite-3.4.2
> {{{
> import os
> import sqlite3
>
> if os.path.exists("/tmp/my.db"):
> os.unlink("/tmp/my.db")
>
> def combined():
> conn1 = sqlite3.connect("/tmp/my.db")
> curs1 = conn1.cursor()
> print "1: pragma" ## B
> curs1.execute("PRAGMA table_info('foo')")
>
> conn2 = sqlite3.connect("/tmp/my.db")
> curs2 = conn2.cursor()
> print "2: create"
> curs2.execute("CREATE TABLE foo ( a integer )")
> conn2.commit()
> conn2.close() ## C
>
> print "1: select"
> # curs1.execute("SELECT * from sqlite_master") ## A
> curs1.execute("SELECT * from foo")
>
> combined()
> }}}
> as follows:
> {{{
> 1: pragma
> 2: create
> 1: select
> Traceback (most recent call last):
> File "simp.py", line 23, in <module>
> combined()
> File "simp.py", line 21, in combined
> curs1.execute("SELECT * from foo")
> sqlite3.OperationalError: no such table: foo
> }}}
>
> Uncommenting the sqlite_master select (A) will eliminate the
> !OperationalError.
> Commenting out the pragma (B) will eliminate the !OperationalError.
> Adding {{{conn2.close()}}} after the commit (C) does not help
> (!OperationalError stil occurs)
>
> I haven't managed to find an upstream bug for this yet, bug I'll link it
> here when I do. For the moment, I'm going to add a nasty, ugly, no-good
> workaround based on B.
New description:
The following fails on sqlite-3.4.2
{{{
import os
import sqlite3
print "sqlite.py:", sqlite3.version
print "sqlite itself:", sqlite3.sqlite_version
if os.path.exists("/tmp/my.db"):
os.unlink("/tmp/my.db")
def combined():
conn1 = sqlite3.connect("/tmp/my.db")
curs1 = conn1.cursor()
print "1: pragma" ## B
curs1.execute("PRAGMA table_info('foo')")
conn2 = sqlite3.connect("/tmp/my.db")
curs2 = conn2.cursor()
print "2: create"
curs2.execute("CREATE TABLE foo ( a integer )")
conn2.commit()
conn2.close() ## C
print "1: select"
# curs1.execute("SELECT * from sqlite_master") ## A
curs1.execute("SELECT * from foo")
combined()
}}}
as follows:
{{{
1: pragma
2: create
1: select
Traceback (most recent call last):
File "simp.py", line 23, in <module>
combined()
File "simp.py", line 21, in combined
curs1.execute("SELECT * from foo")
sqlite3.OperationalError: no such table: foo
}}}
Uncommenting the sqlite_master select (A) will eliminate the
!OperationalError.
Commenting out the pragma (B) will eliminate the !OperationalError.
Adding {{{conn2.close()}}} after the commit (C) does not help
(!OperationalError stil occurs)
I haven't managed to find an upstream bug for this yet, bug I'll link it
here when I do. For the moment, I'm going to add a nasty, ugly, no-good
workaround based on B.
--
--
Ticket URL: <http://trac.buildbot.net/ticket/1810#comment:2>
Buildbot <http://buildbot.net/>
Buildbot: build/test automation
More information about the Commits
mailing list