Mercurial > p > roundup > code
annotate roundup/backends/back_sqlite.py @ 7699:e10d0b262abd
fix: diagnose/report use of SQLite without FTS5 support
As of 2.2.0 Roundup requires FTS5 support in SQLite. FTS5 has been part
of the main SQLite distribution since October 2015.
Tonu Mikk found this when trying to run 2.3.0 under RedHat 7.
He got a traceback when trying to spin up 2.3.0. It took us a bit to
figure out that FTS5 was missing from the SQLite library used by
Python3. See: https://sourceforge.net/p/roundup/mailman/message/51783129/
This change catches the sql error and checks to see if the ENABLE_FTS5
compile option is defined. If not it raises NotImplementedError with a
more useful error message and reports the version of SQLite in use.
This will at least ease diagnosis.
Trying to support SQLite without FTS5 support raises a number of
issues including tracking the internal schema used by Roundup.
So not going to attempt that.
Details: https://sourceforge.net/p/roundup/mailman/message/51783321/
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sun, 12 Nov 2023 19:35:07 -0500 |
| parents | e138f5cf432a |
| children | e3975f679bf1 |
| rev | line source |
|---|---|
|
4076
59d02edfaa9c
Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents:
3858
diff
changeset
|
1 """Implements a backend for SQLite. |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1911
diff
changeset
|
2 |
| 1165 | 3 See https://pysqlite.sourceforge.net/ for pysqlite info |
|
2098
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
4 |
|
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
5 |
|
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
6 NOTE: we use the rdbms_common table creation methods which define datatypes |
|
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
7 for the columns, but sqlite IGNORES these specifications. |
|
4076
59d02edfaa9c
Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents:
3858
diff
changeset
|
8 """ |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1911
diff
changeset
|
9 __docformat__ = 'restructuredtext' |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1911
diff
changeset
|
10 |
| 6932 | 11 import logging |
| 12 import os | |
| 13 import shutil | |
| 14 import time | |
| 15 | |
|
1911
f5c804379c85
fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents:
1906
diff
changeset
|
16 |
|
2098
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
17 from roundup import hyperdb, date, password |
|
1911
f5c804379c85
fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents:
1906
diff
changeset
|
18 from roundup.backends import rdbms_common |
|
6814
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
19 from roundup.backends import sessions_sqlite |
|
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
20 from roundup.backends import sessions_dbm |
|
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
21 |
|
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
22 try: |
|
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
23 from roundup.backends import sessions_redis |
|
6820
feb175271f3e
redis import failure on python2 causes crash
John Rouillard <rouilj@ieee.org>
parents:
6814
diff
changeset
|
24 except ImportError: |
|
6814
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
25 sessions_redis = None |
|
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
26 |
|
5416
56c9bcdea47f
Python 3 preparation: unicode.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5319
diff
changeset
|
27 from roundup.anypy.strings import uany2s |
|
5319
62de601bdf6f
Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5318
diff
changeset
|
28 |
|
3728
b476fef16ccc
fixed support for pysqlite2 (version 2.1.0 is the minimum version supported)
Richard Jones <richard@users.sourceforge.net>
parents:
3718
diff
changeset
|
29 sqlite_version = None |
|
3654
f5201bbbc505
update for latest version of pysqlite ([SF#1487098]; patch 1534227)
Richard Jones <richard@users.sourceforge.net>
parents:
3609
diff
changeset
|
30 try: |
|
4231
23ba17d01a24
re-order sqlite imports to handle multiple installed versions (issue 2550570)
Richard Jones <richard@users.sourceforge.net>
parents:
4091
diff
changeset
|
31 import sqlite3 as sqlite |
|
23ba17d01a24
re-order sqlite imports to handle multiple installed versions (issue 2550570)
Richard Jones <richard@users.sourceforge.net>
parents:
4091
diff
changeset
|
32 sqlite_version = 3 |
|
3654
f5201bbbc505
update for latest version of pysqlite ([SF#1487098]; patch 1534227)
Richard Jones <richard@users.sourceforge.net>
parents:
3609
diff
changeset
|
33 except ImportError: |
|
3718
0d561b24ceff
support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents:
3693
diff
changeset
|
34 try: |
|
0d561b24ceff
support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents:
3693
diff
changeset
|
35 from pysqlite2 import dbapi2 as sqlite |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
36 if sqlite.version_info < (2, 1, 0): |
|
3794
f5ddd1639a15
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3752
diff
changeset
|
37 raise ValueError('pysqlite2 minimum version is 2.1.0+ ' |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
38 '- %s found' % sqlite.version) |
|
3728
b476fef16ccc
fixed support for pysqlite2 (version 2.1.0 is the minimum version supported)
Richard Jones <richard@users.sourceforge.net>
parents:
3718
diff
changeset
|
39 sqlite_version = 2 |
|
3718
0d561b24ceff
support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents:
3693
diff
changeset
|
40 except ImportError: |
|
4231
23ba17d01a24
re-order sqlite imports to handle multiple installed versions (issue 2550570)
Richard Jones <richard@users.sourceforge.net>
parents:
4091
diff
changeset
|
41 import sqlite |
|
23ba17d01a24
re-order sqlite imports to handle multiple installed versions (issue 2550570)
Richard Jones <richard@users.sourceforge.net>
parents:
4091
diff
changeset
|
42 sqlite_version = 1 |
| 1165 | 43 |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
44 |
|
2633
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2514
diff
changeset
|
45 def db_exists(config): |
|
2736
402d6d556558
postgres backend open doesn't hide corruption in schema [SF#956375]
Richard Jones <richard@users.sourceforge.net>
parents:
2721
diff
changeset
|
46 return os.path.exists(os.path.join(config.DATABASE, 'db')) |
|
2633
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2514
diff
changeset
|
47 |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
48 |
|
2633
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2514
diff
changeset
|
49 def db_nuke(config): |
|
2736
402d6d556558
postgres backend open doesn't hide corruption in schema [SF#956375]
Richard Jones <richard@users.sourceforge.net>
parents:
2721
diff
changeset
|
50 shutil.rmtree(config.DATABASE) |
|
2633
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2514
diff
changeset
|
51 |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
52 |
|
1911
f5c804379c85
fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents:
1906
diff
changeset
|
53 class Database(rdbms_common.Database): |
|
5096
e74c3611b138
- issue2550636, issue2550909: Added support for Whoosh indexer.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
54 """Sqlite DB backend implementation |
|
e74c3611b138
- issue2550636, issue2550909: Added support for Whoosh indexer.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
55 |
|
e74c3611b138
- issue2550636, issue2550909: Added support for Whoosh indexer.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
56 attributes: |
|
e74c3611b138
- issue2550636, issue2550909: Added support for Whoosh indexer.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
57 dbtype: |
|
e74c3611b138
- issue2550636, issue2550909: Added support for Whoosh indexer.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
58 holds the value for the type of db. It is used by indexer to |
|
e74c3611b138
- issue2550636, issue2550909: Added support for Whoosh indexer.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
59 identify the database type so it can import the correct indexer |
|
e74c3611b138
- issue2550636, issue2550909: Added support for Whoosh indexer.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
60 module when using native text search mode. |
|
e74c3611b138
- issue2550636, issue2550909: Added support for Whoosh indexer.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
61 """ |
|
e74c3611b138
- issue2550636, issue2550909: Added support for Whoosh indexer.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
62 |
| 1165 | 63 # char to use for positional arguments |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
64 if sqlite_version in (2, 3): |
|
3718
0d561b24ceff
support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents:
3693
diff
changeset
|
65 arg = '?' |
|
0d561b24ceff
support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents:
3693
diff
changeset
|
66 else: |
|
0d561b24ceff
support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents:
3693
diff
changeset
|
67 arg = '%s' |
|
3048
d9b4224f955c
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3008
diff
changeset
|
68 |
|
5096
e74c3611b138
- issue2550636, issue2550909: Added support for Whoosh indexer.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
69 dbtype = "sqlite" |
|
e74c3611b138
- issue2550636, issue2550909: Added support for Whoosh indexer.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
70 |
|
3048
d9b4224f955c
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3008
diff
changeset
|
71 # used by some code to switch styles of query |
|
d9b4224f955c
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3008
diff
changeset
|
72 implements_intersect = 1 |
|
d9b4224f955c
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3008
diff
changeset
|
73 |
|
5175
e1e40674a0bc
Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5143
diff
changeset
|
74 # used in generic backend to determine if db supports |
|
e1e40674a0bc
Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5143
diff
changeset
|
75 # 'DOUBLE PRECISION' for floating point numbers. Note that sqlite |
|
e1e40674a0bc
Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5143
diff
changeset
|
76 # already has double precision as its standard 'REAL' type. So this |
|
e1e40674a0bc
Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5143
diff
changeset
|
77 # is set to False here. |
|
e1e40674a0bc
Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5143
diff
changeset
|
78 |
|
e1e40674a0bc
Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5143
diff
changeset
|
79 implements_double_precision = False |
|
e1e40674a0bc
Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5143
diff
changeset
|
80 |
|
2168
7e595abb781e
better sqlite columns
Richard Jones <richard@users.sourceforge.net>
parents:
2144
diff
changeset
|
81 hyperdb_to_sql_datatypes = { |
| 6932 | 82 hyperdb.String : 'VARCHAR(255)', # noqa: E203 |
| 83 hyperdb.Date : 'VARCHAR(30)', # noqa: E203 | |
| 84 hyperdb.Link : 'INTEGER', # noqa: E203 | |
| 85 hyperdb.Interval : 'VARCHAR(255)', # noqa: E203 | |
| 86 hyperdb.Password : 'VARCHAR(255)', # noqa: E203 | |
| 87 hyperdb.Boolean : 'BOOLEAN', # noqa: E203 | |
| 88 hyperdb.Number : 'REAL', # noqa: E203 | |
| 89 hyperdb.Integer : 'INTEGER', # noqa: E203 | |
|
2168
7e595abb781e
better sqlite columns
Richard Jones <richard@users.sourceforge.net>
parents:
2144
diff
changeset
|
90 } |
|
2098
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
91 hyperdb_to_sql_value = { |
| 6932 | 92 hyperdb.String : str, # noqa: E203 |
| 93 hyperdb.Date : lambda x: x.serialise(), # noqa: E203 | |
| 94 hyperdb.Link : int, # noqa: E203 | |
| 95 hyperdb.Interval : str, # noqa: E203 | |
| 96 hyperdb.Password : str, # noqa: E203 | |
| 97 hyperdb.Boolean : int, # noqa: E203 | |
| 98 hyperdb.Integer : int, # noqa: E203 | |
| 99 hyperdb.Number : lambda x: x, # noqa: E203 | |
| 100 hyperdb.Multilink : lambda x: x, # used in journal marshalling, # noqa: E203 | |
|
2098
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
101 } |
|
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
102 sql_to_hyperdb_value = { |
| 6932 | 103 hyperdb.String : uany2s, # noqa: E203 |
| 104 hyperdb.Date : lambda x: date.Date(str(x)), # noqa: E203 | |
| 105 hyperdb.Link : str, # XXX numeric ids # noqa: E203 | |
| 106 hyperdb.Interval : date.Interval, # noqa: E203 | |
| 107 hyperdb.Password : lambda x: password.Password(encrypted=x), # noqa: E203 | |
| 108 hyperdb.Boolean : int, # noqa: E203 | |
| 109 hyperdb.Integer : int, # noqa: E203 | |
| 110 hyperdb.Number : rdbms_common._num_cvt, # noqa: E203 | |
| 111 hyperdb.Multilink : lambda x: x, # used in journal marshalling, # noqa: E203 | |
|
2098
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
112 } |
|
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
113 |
|
6933
e138f5cf432a
fix comment on use of sqlite for session db's.
John Rouillard <rouilj@ieee.org>
parents:
6932
diff
changeset
|
114 # We can use DBM, redis or SQLite for managing session info and |
|
e138f5cf432a
fix comment on use of sqlite for session db's.
John Rouillard <rouilj@ieee.org>
parents:
6932
diff
changeset
|
115 # one-time keys: |
|
e138f5cf432a
fix comment on use of sqlite for session db's.
John Rouillard <rouilj@ieee.org>
parents:
6932
diff
changeset
|
116 # For SQL database storage of this info we have to create separate |
|
e138f5cf432a
fix comment on use of sqlite for session db's.
John Rouillard <rouilj@ieee.org>
parents:
6932
diff
changeset
|
117 # databases for Otk and Session because SQLite doesn't support |
|
e138f5cf432a
fix comment on use of sqlite for session db's.
John Rouillard <rouilj@ieee.org>
parents:
6932
diff
changeset
|
118 # concurrent connections to the same database. |
|
5319
62de601bdf6f
Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5318
diff
changeset
|
119 def getSessionManager(self): |
|
62de601bdf6f
Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5318
diff
changeset
|
120 if not self.Session: |
|
6814
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
121 if self.config.SESSIONDB_BACKEND == "redis": |
|
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
122 if sessions_redis is None: |
|
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
123 self.Session = sessions_sqlite.Sessions(self) |
|
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
124 raise ValueError("[redis] session is set, but " |
|
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
125 "redis module is not found") |
|
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
126 self.Session = sessions_redis.Sessions(self) |
|
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
127 elif self.config.SESSIONDB_BACKEND == "anydbm": |
|
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
128 self.Session = sessions_dbm.Sessions(self) |
|
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
129 else: |
|
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
130 self.Session = sessions_sqlite.Sessions(self) |
|
5319
62de601bdf6f
Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5318
diff
changeset
|
131 return self.Session |
|
62de601bdf6f
Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5318
diff
changeset
|
132 |
|
62de601bdf6f
Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5318
diff
changeset
|
133 def getOTKManager(self): |
|
62de601bdf6f
Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5318
diff
changeset
|
134 if not self.Otk: |
|
6814
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
135 if self.config.SESSIONDB_BACKEND == "redis": |
|
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
136 if sessions_redis is None: |
|
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
137 self.Session = sessions_sqlite.OneTimeKeys(self) |
|
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
138 raise ValueError("[redis] session is set, but " |
|
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
139 "redis is not found") |
|
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
140 self.Otk = sessions_redis.OneTimeKeys(self) |
|
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
141 elif self.config.SESSIONDB_BACKEND == "anydbm": |
|
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
142 self.Otk = sessions_dbm.OneTimeKeys(self) |
|
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
143 else: |
|
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6804
diff
changeset
|
144 self.Otk = sessions_sqlite.OneTimeKeys(self) |
|
5319
62de601bdf6f
Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5318
diff
changeset
|
145 return self.Otk |
|
62de601bdf6f
Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5318
diff
changeset
|
146 |
|
2847
fddbbeb581bc
sqlite_busy_timeout is not supported in pysqlite 1.1 (SQLite 3.x).
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2764
diff
changeset
|
147 def sqlite_busy_handler(self, data, table, count): |
|
fddbbeb581bc
sqlite_busy_timeout is not supported in pysqlite 1.1 (SQLite 3.x).
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2764
diff
changeset
|
148 """invoked whenever SQLite tries to access a database that is locked""" |
|
4415
3e35233ea93c
new rdbms config item sqlite_timeout...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4357
diff
changeset
|
149 now = time.time() |
|
2847
fddbbeb581bc
sqlite_busy_timeout is not supported in pysqlite 1.1 (SQLite 3.x).
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2764
diff
changeset
|
150 if count == 1: |
|
4415
3e35233ea93c
new rdbms config item sqlite_timeout...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4357
diff
changeset
|
151 # Timeout for handling locked database (default 30s) |
|
3e35233ea93c
new rdbms config item sqlite_timeout...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4357
diff
changeset
|
152 self._busy_handler_endtime = now + self.config.RDBMS_SQLITE_TIMEOUT |
|
3e35233ea93c
new rdbms config item sqlite_timeout...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4357
diff
changeset
|
153 elif now > self._busy_handler_endtime: |
|
2847
fddbbeb581bc
sqlite_busy_timeout is not supported in pysqlite 1.1 (SQLite 3.x).
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2764
diff
changeset
|
154 # timeout expired - no more retries |
|
fddbbeb581bc
sqlite_busy_timeout is not supported in pysqlite 1.1 (SQLite 3.x).
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2764
diff
changeset
|
155 return 0 |
|
fddbbeb581bc
sqlite_busy_timeout is not supported in pysqlite 1.1 (SQLite 3.x).
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2764
diff
changeset
|
156 # sleep adaptively as retry count grows, |
|
fddbbeb581bc
sqlite_busy_timeout is not supported in pysqlite 1.1 (SQLite 3.x).
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2764
diff
changeset
|
157 # starting from about half a second |
|
fddbbeb581bc
sqlite_busy_timeout is not supported in pysqlite 1.1 (SQLite 3.x).
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2764
diff
changeset
|
158 time_to_sleep = 0.01 * (2 << min(5, count)) |
|
fddbbeb581bc
sqlite_busy_timeout is not supported in pysqlite 1.1 (SQLite 3.x).
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2764
diff
changeset
|
159 time.sleep(time_to_sleep) |
|
fddbbeb581bc
sqlite_busy_timeout is not supported in pysqlite 1.1 (SQLite 3.x).
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2764
diff
changeset
|
160 return 1 |
|
fddbbeb581bc
sqlite_busy_timeout is not supported in pysqlite 1.1 (SQLite 3.x).
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2764
diff
changeset
|
161 |
|
6804
25d08e15e3b4
issue2551224 - Replace dbm db for sessions/otks when using sqlite
John Rouillard <rouilj@ieee.org>
parents:
6599
diff
changeset
|
162 def sql_open_connection(self, dbname=None): |
|
4076
59d02edfaa9c
Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents:
3858
diff
changeset
|
163 """Open a standard, non-autocommitting connection. |
|
2374
31cb1014300c
Switch to using sqlite's own locking mechanisms...
Richard Jones <richard@users.sourceforge.net>
parents:
2273
diff
changeset
|
164 |
|
31cb1014300c
Switch to using sqlite's own locking mechanisms...
Richard Jones <richard@users.sourceforge.net>
parents:
2273
diff
changeset
|
165 pysqlite will automatically BEGIN TRANSACTION for us. |
|
4076
59d02edfaa9c
Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents:
3858
diff
changeset
|
166 """ |
|
2764
d3b3f1b3d59e
sqlite database creation requires existing directory.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2736
diff
changeset
|
167 # make sure the database directory exists |
|
d3b3f1b3d59e
sqlite database creation requires existing directory.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2736
diff
changeset
|
168 # database itself will be created by sqlite if needed |
|
d3b3f1b3d59e
sqlite database creation requires existing directory.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2736
diff
changeset
|
169 if not os.path.isdir(self.config.DATABASE): |
|
d3b3f1b3d59e
sqlite database creation requires existing directory.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2736
diff
changeset
|
170 os.makedirs(self.config.DATABASE) |
|
d3b3f1b3d59e
sqlite database creation requires existing directory.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2736
diff
changeset
|
171 |
|
6804
25d08e15e3b4
issue2551224 - Replace dbm db for sessions/otks when using sqlite
John Rouillard <rouilj@ieee.org>
parents:
6599
diff
changeset
|
172 if dbname: |
|
25d08e15e3b4
issue2551224 - Replace dbm db for sessions/otks when using sqlite
John Rouillard <rouilj@ieee.org>
parents:
6599
diff
changeset
|
173 db = os.path.join(self.config.DATABASE, 'db-' + dbname) |
|
25d08e15e3b4
issue2551224 - Replace dbm db for sessions/otks when using sqlite
John Rouillard <rouilj@ieee.org>
parents:
6599
diff
changeset
|
174 else: |
|
25d08e15e3b4
issue2551224 - Replace dbm db for sessions/otks when using sqlite
John Rouillard <rouilj@ieee.org>
parents:
6599
diff
changeset
|
175 db = os.path.join(self.config.DATABASE, 'db') |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
176 logging.getLogger('roundup.hyperdb').info('open database %r' % db) |
|
4415
3e35233ea93c
new rdbms config item sqlite_timeout...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4357
diff
changeset
|
177 # set timeout (30 second default is extraordinarily generous) |
|
3e35233ea93c
new rdbms config item sqlite_timeout...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4357
diff
changeset
|
178 # for handling locked database |
|
3728
b476fef16ccc
fixed support for pysqlite2 (version 2.1.0 is the minimum version supported)
Richard Jones <richard@users.sourceforge.net>
parents:
3718
diff
changeset
|
179 if sqlite_version == 1: |
|
3718
0d561b24ceff
support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents:
3693
diff
changeset
|
180 conn = sqlite.connect(db=db) |
|
0d561b24ceff
support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents:
3693
diff
changeset
|
181 conn.db.sqlite_busy_handler(self.sqlite_busy_handler) |
|
3728
b476fef16ccc
fixed support for pysqlite2 (version 2.1.0 is the minimum version supported)
Richard Jones <richard@users.sourceforge.net>
parents:
3718
diff
changeset
|
182 else: |
|
4415
3e35233ea93c
new rdbms config item sqlite_timeout...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4357
diff
changeset
|
183 conn = sqlite.connect(db, timeout=self.config.RDBMS_SQLITE_TIMEOUT) |
|
3728
b476fef16ccc
fixed support for pysqlite2 (version 2.1.0 is the minimum version supported)
Richard Jones <richard@users.sourceforge.net>
parents:
3718
diff
changeset
|
184 conn.row_factory = sqlite.Row |
|
4091
09e79cbeb827
force sqlite3 in py2.6+ to treat our stored text as UTF-8
Richard Jones <richard@users.sourceforge.net>
parents:
4076
diff
changeset
|
185 |
|
4240
289f249ba192
compatibilty fix for pysqlite2 / unicode
Richard Jones <richard@users.sourceforge.net>
parents:
4231
diff
changeset
|
186 # pysqlite2 / sqlite3 want us to store Unicode in the db but |
|
289f249ba192
compatibilty fix for pysqlite2 / unicode
Richard Jones <richard@users.sourceforge.net>
parents:
4231
diff
changeset
|
187 # that's not what's been done historically and it's definitely |
|
289f249ba192
compatibilty fix for pysqlite2 / unicode
Richard Jones <richard@users.sourceforge.net>
parents:
4231
diff
changeset
|
188 # not what the other backends do, so we'll stick with UTF-8 |
|
289f249ba192
compatibilty fix for pysqlite2 / unicode
Richard Jones <richard@users.sourceforge.net>
parents:
4231
diff
changeset
|
189 if sqlite_version in (2, 3): |
|
4091
09e79cbeb827
force sqlite3 in py2.6+ to treat our stored text as UTF-8
Richard Jones <richard@users.sourceforge.net>
parents:
4076
diff
changeset
|
190 conn.text_factory = str |
|
09e79cbeb827
force sqlite3 in py2.6+ to treat our stored text as UTF-8
Richard Jones <richard@users.sourceforge.net>
parents:
4076
diff
changeset
|
191 |
|
2082
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
2077
diff
changeset
|
192 cursor = conn.cursor() |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
2077
diff
changeset
|
193 return (conn, cursor) |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
2077
diff
changeset
|
194 |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
2077
diff
changeset
|
195 def open_connection(self): |
| 1165 | 196 # ensure files are group readable and writable |
|
3609
f2fda3e6fc8b
umask is now configurable (with the same 0002 default)
Richard Jones <richard@users.sourceforge.net>
parents:
3347
diff
changeset
|
197 os.umask(self.config.UMASK) |
|
2082
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
2077
diff
changeset
|
198 |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
2077
diff
changeset
|
199 (self.conn, self.cursor) = self.sql_open_connection() |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
2077
diff
changeset
|
200 |
| 1165 | 201 try: |
|
2073
261c2e6ceb1e
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2005
diff
changeset
|
202 self.load_dbschema() |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5175
diff
changeset
|
203 except sqlite.DatabaseError as error: |
| 1165 | 204 if str(error) != 'no such table: schema': |
| 205 raise | |
|
2075
b1704ba7be41
make mysql / postgresql work again. beginnings of otk/session store in rdbmses
Richard Jones <richard@users.sourceforge.net>
parents:
2073
diff
changeset
|
206 self.init_dbschema() |
|
2514
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2374
diff
changeset
|
207 self.sql('create table schema (schema varchar)') |
|
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2374
diff
changeset
|
208 self.sql('create table ids (name varchar, num integer)') |
|
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2374
diff
changeset
|
209 self.sql('create index ids_name_idx on ids(name)') |
|
2073
261c2e6ceb1e
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2005
diff
changeset
|
210 self.create_version_2_tables() |
|
6588
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6050
diff
changeset
|
211 self._add_fts5_table() |
|
6917
fba76e0bba98
set journal mode to wal when creating db.
John Rouillard <rouilj@ieee.org>
parents:
6916
diff
changeset
|
212 # Set journal mode to WAL. |
|
6930
a96a239db0d9
Set all sqlite db's to WAL mode on creation
John Rouillard <rouilj@ieee.org>
parents:
6917
diff
changeset
|
213 self.sql_commit() # close out rollback journal/transaction |
|
a96a239db0d9
Set all sqlite db's to WAL mode on creation
John Rouillard <rouilj@ieee.org>
parents:
6917
diff
changeset
|
214 self.sql('pragma journal_mode=wal') # set wal |
|
a96a239db0d9
Set all sqlite db's to WAL mode on creation
John Rouillard <rouilj@ieee.org>
parents:
6917
diff
changeset
|
215 self.sql_commit() # close out rollback and commit wal change |
|
2073
261c2e6ceb1e
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2005
diff
changeset
|
216 |
|
261c2e6ceb1e
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2005
diff
changeset
|
217 def create_version_2_tables(self): |
|
2514
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2374
diff
changeset
|
218 self.sql('create table otks (otk_key varchar, ' |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
219 'otk_value varchar, otk_time integer)') |
|
2514
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2374
diff
changeset
|
220 self.sql('create index otks_key_idx on otks(otk_key)') |
|
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2374
diff
changeset
|
221 self.sql('create table sessions (session_key varchar, ' |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
222 'session_time integer, session_value varchar)') |
|
2514
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2374
diff
changeset
|
223 self.sql('create index sessions_key_idx on ' |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
224 'sessions(session_key)') |
| 1165 | 225 |
|
2093
3f6024ab2c7a
That's the last of the RDBMS migration steps done! Yay!
Richard Jones <richard@users.sourceforge.net>
parents:
2082
diff
changeset
|
226 # full-text indexing store |
|
2514
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2374
diff
changeset
|
227 self.sql('CREATE TABLE __textids (_class varchar, ' |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
228 '_itemid varchar, _prop varchar, _textid' |
|
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
229 ' integer primary key) ') |
|
2514
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2374
diff
changeset
|
230 self.sql('CREATE TABLE __words (_word varchar, ' |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
231 '_textid integer)') |
|
2514
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2374
diff
changeset
|
232 self.sql('CREATE INDEX words_word_ids ON __words(_word)') |
|
3858
bb30bbfc7cdd
Indexing fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3794
diff
changeset
|
233 self.sql('CREATE INDEX words_by_id ON __words (_textid)') |
|
bb30bbfc7cdd
Indexing fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3794
diff
changeset
|
234 self.sql('CREATE UNIQUE INDEX __textids_by_props ON ' |
|
bb30bbfc7cdd
Indexing fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3794
diff
changeset
|
235 '__textids (_class, _itemid, _prop)') |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
236 sql = 'insert into ids (name, num) values (%s,%s)' % ( |
|
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
237 self.arg, self.arg) |
|
2514
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2374
diff
changeset
|
238 self.sql(sql, ('__textids', 1)) |
|
2093
3f6024ab2c7a
That's the last of the RDBMS migration steps done! Yay!
Richard Jones <richard@users.sourceforge.net>
parents:
2082
diff
changeset
|
239 |
|
2217
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
240 def add_new_columns_v2(self): |
|
2077
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
241 # update existing tables to have the new actor column |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
242 tables = self.database_schema['tables'] |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
243 for classname, spec in self.classes.items(): |
|
4357
13b3155869e0
Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents:
4240
diff
changeset
|
244 if classname in tables: |
|
2077
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
245 dbspec = tables[classname] |
|
2217
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
246 self.update_class(spec, dbspec, force=1, adding_v2=1) |
|
2137
c49495585c44
Fix for sqlite backend migration. Change Cookie -> SimpleCookie
Richard Jones <richard@users.sourceforge.net>
parents:
2098
diff
changeset
|
247 # we've updated - don't try again |
|
c49495585c44
Fix for sqlite backend migration. Change Cookie -> SimpleCookie
Richard Jones <richard@users.sourceforge.net>
parents:
2098
diff
changeset
|
248 tables[classname] = spec.schema() |
|
2077
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
249 |
|
2721
1cd01cf106e1
extend OTK and session table value cols to TEXT [SF#1031271]
Richard Jones <richard@users.sourceforge.net>
parents:
2645
diff
changeset
|
250 def fix_version_3_tables(self): |
|
1cd01cf106e1
extend OTK and session table value cols to TEXT [SF#1031271]
Richard Jones <richard@users.sourceforge.net>
parents:
2645
diff
changeset
|
251 # NOOP - no restriction on column length here |
|
1cd01cf106e1
extend OTK and session table value cols to TEXT [SF#1031271]
Richard Jones <richard@users.sourceforge.net>
parents:
2645
diff
changeset
|
252 pass |
|
1cd01cf106e1
extend OTK and session table value cols to TEXT [SF#1031271]
Richard Jones <richard@users.sourceforge.net>
parents:
2645
diff
changeset
|
253 |
|
6588
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6050
diff
changeset
|
254 def _add_fts5_table(self): |
|
7699
e10d0b262abd
fix: diagnose/report use of SQLite without FTS5 support
John Rouillard <rouilj@ieee.org>
parents:
6933
diff
changeset
|
255 try: |
|
e10d0b262abd
fix: diagnose/report use of SQLite without FTS5 support
John Rouillard <rouilj@ieee.org>
parents:
6933
diff
changeset
|
256 self.sql('CREATE virtual TABLE __fts USING fts5(_class, ' |
| 6932 | 257 '_itemid, _prop, _textblob)') |
|
7699
e10d0b262abd
fix: diagnose/report use of SQLite without FTS5 support
John Rouillard <rouilj@ieee.org>
parents:
6933
diff
changeset
|
258 except sqlite.OperationalError: |
|
e10d0b262abd
fix: diagnose/report use of SQLite without FTS5 support
John Rouillard <rouilj@ieee.org>
parents:
6933
diff
changeset
|
259 available_options = self.cursor.execute( |
|
e10d0b262abd
fix: diagnose/report use of SQLite without FTS5 support
John Rouillard <rouilj@ieee.org>
parents:
6933
diff
changeset
|
260 'pragma compile_options;').fetchall() |
|
e10d0b262abd
fix: diagnose/report use of SQLite without FTS5 support
John Rouillard <rouilj@ieee.org>
parents:
6933
diff
changeset
|
261 if 'ENABLE_FTS5' in [opt['compile_options'] for opt |
|
e10d0b262abd
fix: diagnose/report use of SQLite without FTS5 support
John Rouillard <rouilj@ieee.org>
parents:
6933
diff
changeset
|
262 in available_options]: |
|
e10d0b262abd
fix: diagnose/report use of SQLite without FTS5 support
John Rouillard <rouilj@ieee.org>
parents:
6933
diff
changeset
|
263 # sqlite supports FTS5 something else has gone wrong |
|
e10d0b262abd
fix: diagnose/report use of SQLite without FTS5 support
John Rouillard <rouilj@ieee.org>
parents:
6933
diff
changeset
|
264 raise |
|
e10d0b262abd
fix: diagnose/report use of SQLite without FTS5 support
John Rouillard <rouilj@ieee.org>
parents:
6933
diff
changeset
|
265 else: |
|
e10d0b262abd
fix: diagnose/report use of SQLite without FTS5 support
John Rouillard <rouilj@ieee.org>
parents:
6933
diff
changeset
|
266 # report a useful error message |
|
e10d0b262abd
fix: diagnose/report use of SQLite without FTS5 support
John Rouillard <rouilj@ieee.org>
parents:
6933
diff
changeset
|
267 raise NotImplementedError( |
|
e10d0b262abd
fix: diagnose/report use of SQLite without FTS5 support
John Rouillard <rouilj@ieee.org>
parents:
6933
diff
changeset
|
268 "This version of SQLite was not built with support " |
|
e10d0b262abd
fix: diagnose/report use of SQLite without FTS5 support
John Rouillard <rouilj@ieee.org>
parents:
6933
diff
changeset
|
269 "for FTS5. SQLite version: %s" % sqlite.sqlite_version) |
|
6588
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6050
diff
changeset
|
270 |
|
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6050
diff
changeset
|
271 def fix_version_6_tables(self): |
|
6599
39189dd94f2c
issue2551189 - increase size of words in full text index.
John Rouillard <rouilj@ieee.org>
parents:
6588
diff
changeset
|
272 # note sqlite has no limit on column size so v6 fixes |
|
39189dd94f2c
issue2551189 - increase size of words in full text index.
John Rouillard <rouilj@ieee.org>
parents:
6588
diff
changeset
|
273 # to __words._word length are not needed. |
|
6588
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6050
diff
changeset
|
274 # Add native full-text indexing table |
|
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6050
diff
changeset
|
275 self._add_fts5_table() |
|
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6050
diff
changeset
|
276 |
|
2217
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
277 def update_class(self, spec, old_spec, force=0, adding_v2=0): |
|
4076
59d02edfaa9c
Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents:
3858
diff
changeset
|
278 """ Determine the differences between the current spec and the |
|
2077
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
279 database version of the spec, and update where necessary. |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
280 |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
281 If 'force' is true, update the database anyway. |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
282 |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
283 SQLite doesn't have ALTER TABLE, so we have to copy and |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
284 regenerate the tables with the new schema. |
|
4076
59d02edfaa9c
Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents:
3858
diff
changeset
|
285 """ |
|
2077
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
286 new_spec = spec.schema() |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
287 new_spec[1].sort() |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
288 old_spec[1].sort() |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
289 if not force and new_spec == old_spec: |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
290 # no changes |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
291 return 0 |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
292 |
|
4421
67bef70ab9b9
- more logger fixes, sorry for the noise.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4420
diff
changeset
|
293 logging.getLogger('roundup.hyperdb').info( |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
294 'update_class %s' % spec.classname) |
|
2077
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
295 |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
296 # detect multilinks that have been removed, and drop their table |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
297 old_has = {} |
|
2137
c49495585c44
Fix for sqlite backend migration. Change Cookie -> SimpleCookie
Richard Jones <richard@users.sourceforge.net>
parents:
2098
diff
changeset
|
298 for name, prop in old_spec[1]: |
|
2077
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
299 old_has[name] = 1 |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
300 if name in spec.properties or not \ |
|
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
301 isinstance(prop, hyperdb.Multilink): |
|
2077
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
302 continue |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
303 # it's a multilink, and it's been removed - drop the old |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
304 # table. First drop indexes. |
|
3347
9020fe58c51c
more errors. backport candidate
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents:
3310
diff
changeset
|
305 self.drop_multilink_table_indexes(spec.classname, name) |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
306 sql = 'drop table %s_%s' % (spec.classname, prop) |
|
2514
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2374
diff
changeset
|
307 self.sql(sql) |
|
2077
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
308 |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
309 # now figure how we populate the new table |
|
2217
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
310 if adding_v2: |
|
2077
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
311 fetch = ['_activity', '_creation', '_creator'] |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
312 else: |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
313 fetch = ['_actor', '_activity', '_creation', '_creator'] |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
314 properties = spec.getprops() |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
315 for propname, _x in new_spec[1]: |
|
2077
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
316 prop = properties[propname] |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
317 if isinstance(prop, hyperdb.Multilink): |
|
4357
13b3155869e0
Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents:
4240
diff
changeset
|
318 if propname not in old_has: |
|
2077
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
319 # we need to create the new table |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
320 self.create_multilink_table(spec, propname) |
|
2137
c49495585c44
Fix for sqlite backend migration. Change Cookie -> SimpleCookie
Richard Jones <richard@users.sourceforge.net>
parents:
2098
diff
changeset
|
321 elif force: |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
322 tn = '%s_%s' % (spec.classname, propname) |
|
2137
c49495585c44
Fix for sqlite backend migration. Change Cookie -> SimpleCookie
Richard Jones <richard@users.sourceforge.net>
parents:
2098
diff
changeset
|
323 # grabe the current values |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
324 sql = 'select linkid, nodeid from %s' % tn |
|
2514
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2374
diff
changeset
|
325 self.sql(sql) |
|
2137
c49495585c44
Fix for sqlite backend migration. Change Cookie -> SimpleCookie
Richard Jones <richard@users.sourceforge.net>
parents:
2098
diff
changeset
|
326 rows = self.cursor.fetchall() |
|
c49495585c44
Fix for sqlite backend migration. Change Cookie -> SimpleCookie
Richard Jones <richard@users.sourceforge.net>
parents:
2098
diff
changeset
|
327 |
|
c49495585c44
Fix for sqlite backend migration. Change Cookie -> SimpleCookie
Richard Jones <richard@users.sourceforge.net>
parents:
2098
diff
changeset
|
328 # drop the old table |
|
c49495585c44
Fix for sqlite backend migration. Change Cookie -> SimpleCookie
Richard Jones <richard@users.sourceforge.net>
parents:
2098
diff
changeset
|
329 self.drop_multilink_table_indexes(spec.classname, propname) |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
330 sql = 'drop table %s' % tn |
|
2514
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2374
diff
changeset
|
331 self.sql(sql) |
|
2137
c49495585c44
Fix for sqlite backend migration. Change Cookie -> SimpleCookie
Richard Jones <richard@users.sourceforge.net>
parents:
2098
diff
changeset
|
332 |
|
c49495585c44
Fix for sqlite backend migration. Change Cookie -> SimpleCookie
Richard Jones <richard@users.sourceforge.net>
parents:
2098
diff
changeset
|
333 # re-create and populate the new table |
|
c49495585c44
Fix for sqlite backend migration. Change Cookie -> SimpleCookie
Richard Jones <richard@users.sourceforge.net>
parents:
2098
diff
changeset
|
334 self.create_multilink_table(spec, propname) |
|
4076
59d02edfaa9c
Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents:
3858
diff
changeset
|
335 sql = """insert into %s (linkid, nodeid) values |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
336 (%s, %s)""" % (tn, self.arg, self.arg) |
|
2137
c49495585c44
Fix for sqlite backend migration. Change Cookie -> SimpleCookie
Richard Jones <richard@users.sourceforge.net>
parents:
2098
diff
changeset
|
337 for linkid, nodeid in rows: |
|
2514
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2374
diff
changeset
|
338 self.sql(sql, (int(linkid), int(nodeid))) |
|
4357
13b3155869e0
Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents:
4240
diff
changeset
|
339 elif propname in old_has: |
|
2077
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
340 # we copy this col over from the old table |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
341 fetch.append('_'+propname) |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
342 |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
343 # select the data out of the old table |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
344 fetch.append('id') |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
345 fetch.append('__retired__') |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
346 fetchcols = ','.join(fetch) |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
347 cn = spec.classname |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
348 sql = 'select %s from _%s' % (fetchcols, cn) |
|
2514
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2374
diff
changeset
|
349 self.sql(sql) |
|
2077
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
350 olddata = self.cursor.fetchall() |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
351 |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
352 # TODO: update all the other index dropping code |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
353 self.drop_class_table_indexes(cn, old_spec[0]) |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
354 |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
355 # drop the old table |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
356 self.sql('drop table _%s' % cn) |
|
2077
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
357 |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
358 # create the new table |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
359 self.create_class_table(spec) |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
360 |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
361 if olddata: |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
362 inscols = ['id', '_actor', '_activity', '_creation', |
|
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
363 '_creator', '__retired__'] |
|
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
364 for propname, _x in new_spec[1]: |
|
2217
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
365 prop = properties[propname] |
|
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
366 if isinstance(prop, hyperdb.Multilink): |
|
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
367 continue |
|
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
368 elif isinstance(prop, hyperdb.Interval): |
|
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
369 inscols.append('_'+propname) |
|
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
370 inscols.append('__'+propname+'_int__') |
|
4357
13b3155869e0
Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents:
4240
diff
changeset
|
371 elif propname in old_has: |
|
2217
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
372 # we copy this col over from the old table |
|
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
373 inscols.append('_'+propname) |
|
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
374 |
|
2077
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
375 # do the insert of the old data - the new columns will have |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
376 # NULL values |
|
2217
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
377 args = ','.join([self.arg for x in inscols]) |
|
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
378 cols = ','.join(inscols) |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
379 sql = 'insert into _%s (%s) values (%s)' % (cn, cols, args) |
|
2077
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
380 for entry in olddata: |
|
2217
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
381 d = [] |
|
4774
3adff0fb0207
Fixed issue2550595: Allow migrating from roundup 0.x to 1.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4421
diff
changeset
|
382 retired_id = None |
|
2217
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
383 for name in inscols: |
|
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
384 # generate the new value for the Interval int column |
|
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
385 if name.endswith('_int__'): |
|
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
386 name = name[2:-6] |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
387 if sqlite_version in (2, 3): |
|
3718
0d561b24ceff
support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents:
3693
diff
changeset
|
388 try: |
|
0d561b24ceff
support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents:
3693
diff
changeset
|
389 v = hyperdb.Interval(entry[name]).as_seconds() |
|
0d561b24ceff
support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents:
3693
diff
changeset
|
390 except IndexError: |
|
0d561b24ceff
support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents:
3693
diff
changeset
|
391 v = None |
|
4357
13b3155869e0
Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents:
4240
diff
changeset
|
392 elif name in entry: |
|
2217
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
393 v = hyperdb.Interval(entry[name]).as_seconds() |
|
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
394 else: |
|
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
395 v = None |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
396 elif sqlite_version in (2, 3): |
|
3718
0d561b24ceff
support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents:
3693
diff
changeset
|
397 try: |
|
0d561b24ceff
support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents:
3693
diff
changeset
|
398 v = entry[name] |
|
0d561b24ceff
support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents:
3693
diff
changeset
|
399 except IndexError: |
|
0d561b24ceff
support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents:
3693
diff
changeset
|
400 v = None |
|
4357
13b3155869e0
Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents:
4240
diff
changeset
|
401 elif (sqlite_version == 1 and name in entry): |
|
2217
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
402 v = entry[name] |
|
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
403 else: |
|
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
404 v = None |
|
4774
3adff0fb0207
Fixed issue2550595: Allow migrating from roundup 0.x to 1.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4421
diff
changeset
|
405 if name == 'id': |
|
3adff0fb0207
Fixed issue2550595: Allow migrating from roundup 0.x to 1.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4421
diff
changeset
|
406 retired_id = v |
| 6932 | 407 elif (name == '__retired__' and retired_id and |
| 408 v not in ['0', 0]): | |
|
4774
3adff0fb0207
Fixed issue2550595: Allow migrating from roundup 0.x to 1.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4421
diff
changeset
|
409 v = retired_id |
|
2217
98d3bf8ffb19
store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2191
diff
changeset
|
410 d.append(v) |
|
2514
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2374
diff
changeset
|
411 self.sql(sql, tuple(d)) |
|
2077
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
412 |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
413 return 1 |
|
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2075
diff
changeset
|
414 |
|
1911
f5c804379c85
fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents:
1906
diff
changeset
|
415 def sql_close(self): |
|
4076
59d02edfaa9c
Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents:
3858
diff
changeset
|
416 """ Squash any error caused by us already having closed the |
| 1236 | 417 connection. |
|
4076
59d02edfaa9c
Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents:
3858
diff
changeset
|
418 """ |
| 1236 | 419 try: |
|
2374
31cb1014300c
Switch to using sqlite's own locking mechanisms...
Richard Jones <richard@users.sourceforge.net>
parents:
2273
diff
changeset
|
420 self.conn.close() |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5175
diff
changeset
|
421 except sqlite.ProgrammingError as value: |
|
2374
31cb1014300c
Switch to using sqlite's own locking mechanisms...
Richard Jones <richard@users.sourceforge.net>
parents:
2273
diff
changeset
|
422 if str(value) != 'close failed - Connection is closed.': |
|
31cb1014300c
Switch to using sqlite's own locking mechanisms...
Richard Jones <richard@users.sourceforge.net>
parents:
2273
diff
changeset
|
423 raise |
| 1236 | 424 |
|
1911
f5c804379c85
fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents:
1906
diff
changeset
|
425 def sql_rollback(self): |
|
4076
59d02edfaa9c
Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents:
3858
diff
changeset
|
426 """ Squash any error caused by us having closed the connection (and |
| 1236 | 427 therefore not having anything to roll back) |
|
4076
59d02edfaa9c
Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents:
3858
diff
changeset
|
428 """ |
| 1236 | 429 try: |
| 430 self.conn.rollback() | |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5175
diff
changeset
|
431 except sqlite.ProgrammingError as value: |
| 1236 | 432 if str(value) != 'rollback failed - Connection is closed.': |
| 433 raise | |
| 434 | |
| 1165 | 435 def __repr__(self): |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
436 return '<roundlite 0x%x>' % id(self) |
| 1165 | 437 |
|
5319
62de601bdf6f
Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5318
diff
changeset
|
438 def sql_commit(self): |
|
4076
59d02edfaa9c
Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents:
3858
diff
changeset
|
439 """ Actually commit to the database. |
| 1165 | 440 |
| 441 Ignore errors if there's nothing to commit. | |
|
4076
59d02edfaa9c
Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents:
3858
diff
changeset
|
442 """ |
|
6916
fad6b3a272cd
Add instrumentation to debug I/O error in CI that I don't get locally
John Rouillard <rouilj@ieee.org>
parents:
6820
diff
changeset
|
443 def list_dir(dir): |
|
fad6b3a272cd
Add instrumentation to debug I/O error in CI that I don't get locally
John Rouillard <rouilj@ieee.org>
parents:
6820
diff
changeset
|
444 import os |
|
fad6b3a272cd
Add instrumentation to debug I/O error in CI that I don't get locally
John Rouillard <rouilj@ieee.org>
parents:
6820
diff
changeset
|
445 files = os.listdir(self.dir) |
| 6932 | 446 # ['db-journal', 'files', 'db'] |
|
6916
fad6b3a272cd
Add instrumentation to debug I/O error in CI that I don't get locally
John Rouillard <rouilj@ieee.org>
parents:
6820
diff
changeset
|
447 for entry in [''] + files: |
|
fad6b3a272cd
Add instrumentation to debug I/O error in CI that I don't get locally
John Rouillard <rouilj@ieee.org>
parents:
6820
diff
changeset
|
448 path = self.dir + '/' + entry |
|
fad6b3a272cd
Add instrumentation to debug I/O error in CI that I don't get locally
John Rouillard <rouilj@ieee.org>
parents:
6820
diff
changeset
|
449 stat = os.stat(path) |
| 6932 | 450 print("file: %s, uid: %s, gid: %s, mode: %o" % ( |
| 451 path, stat.st_uid, stat.st_gid, stat.st_mode)) | |
|
6916
fad6b3a272cd
Add instrumentation to debug I/O error in CI that I don't get locally
John Rouillard <rouilj@ieee.org>
parents:
6820
diff
changeset
|
452 |
|
fad6b3a272cd
Add instrumentation to debug I/O error in CI that I don't get locally
John Rouillard <rouilj@ieee.org>
parents:
6820
diff
changeset
|
453 # Getting sqlite3.OperationalError: disk I/O error |
|
fad6b3a272cd
Add instrumentation to debug I/O error in CI that I don't get locally
John Rouillard <rouilj@ieee.org>
parents:
6820
diff
changeset
|
454 # in CI. It happens intermittently. Try to get more |
|
fad6b3a272cd
Add instrumentation to debug I/O error in CI that I don't get locally
John Rouillard <rouilj@ieee.org>
parents:
6820
diff
changeset
|
455 # info about what is happening and retry the commit. |
|
fad6b3a272cd
Add instrumentation to debug I/O error in CI that I don't get locally
John Rouillard <rouilj@ieee.org>
parents:
6820
diff
changeset
|
456 # Some possibilities: |
|
fad6b3a272cd
Add instrumentation to debug I/O error in CI that I don't get locally
John Rouillard <rouilj@ieee.org>
parents:
6820
diff
changeset
|
457 # -journal file not writable |
|
fad6b3a272cd
Add instrumentation to debug I/O error in CI that I don't get locally
John Rouillard <rouilj@ieee.org>
parents:
6820
diff
changeset
|
458 # file has disappeared |
|
fad6b3a272cd
Add instrumentation to debug I/O error in CI that I don't get locally
John Rouillard <rouilj@ieee.org>
parents:
6820
diff
changeset
|
459 # |
|
fad6b3a272cd
Add instrumentation to debug I/O error in CI that I don't get locally
John Rouillard <rouilj@ieee.org>
parents:
6820
diff
changeset
|
460 # Note after exception self.conn.in_transaction is False |
|
fad6b3a272cd
Add instrumentation to debug I/O error in CI that I don't get locally
John Rouillard <rouilj@ieee.org>
parents:
6820
diff
changeset
|
461 # but was True before failed commit(). Retry succeeds, |
|
fad6b3a272cd
Add instrumentation to debug I/O error in CI that I don't get locally
John Rouillard <rouilj@ieee.org>
parents:
6820
diff
changeset
|
462 # but I am not sure it actually does anything. |
|
fad6b3a272cd
Add instrumentation to debug I/O error in CI that I don't get locally
John Rouillard <rouilj@ieee.org>
parents:
6820
diff
changeset
|
463 # for retry in range(2): |
| 1165 | 464 try: |
| 465 self.conn.commit() | |
|
6916
fad6b3a272cd
Add instrumentation to debug I/O error in CI that I don't get locally
John Rouillard <rouilj@ieee.org>
parents:
6820
diff
changeset
|
466 except sqlite.OperationalError as error: |
|
fad6b3a272cd
Add instrumentation to debug I/O error in CI that I don't get locally
John Rouillard <rouilj@ieee.org>
parents:
6820
diff
changeset
|
467 if str(error) != 'disk I/O error': |
|
fad6b3a272cd
Add instrumentation to debug I/O error in CI that I don't get locally
John Rouillard <rouilj@ieee.org>
parents:
6820
diff
changeset
|
468 raise |
|
fad6b3a272cd
Add instrumentation to debug I/O error in CI that I don't get locally
John Rouillard <rouilj@ieee.org>
parents:
6820
diff
changeset
|
469 list_dir(self.dir) |
|
fad6b3a272cd
Add instrumentation to debug I/O error in CI that I don't get locally
John Rouillard <rouilj@ieee.org>
parents:
6820
diff
changeset
|
470 raise |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5175
diff
changeset
|
471 except sqlite.DatabaseError as error: |
| 1165 | 472 if str(error) != 'cannot commit - no transaction is active': |
| 473 raise | |
|
6916
fad6b3a272cd
Add instrumentation to debug I/O error in CI that I don't get locally
John Rouillard <rouilj@ieee.org>
parents:
6820
diff
changeset
|
474 # else: |
|
fad6b3a272cd
Add instrumentation to debug I/O error in CI that I don't get locally
John Rouillard <rouilj@ieee.org>
parents:
6820
diff
changeset
|
475 # break # out of loop if no exception |
|
2374
31cb1014300c
Switch to using sqlite's own locking mechanisms...
Richard Jones <richard@users.sourceforge.net>
parents:
2273
diff
changeset
|
476 # open a new cursor for subsequent work |
|
31cb1014300c
Switch to using sqlite's own locking mechanisms...
Richard Jones <richard@users.sourceforge.net>
parents:
2273
diff
changeset
|
477 self.cursor = self.conn.cursor() |
| 1165 | 478 |
|
1906
f255363e6d97
PostgreSQL backend lands.
Richard Jones <richard@users.sourceforge.net>
parents:
1836
diff
changeset
|
479 def sql_index_exists(self, table_name, index_name): |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
480 self.sql('pragma index_list(%s)' % table_name) |
|
1906
f255363e6d97
PostgreSQL backend lands.
Richard Jones <richard@users.sourceforge.net>
parents:
1836
diff
changeset
|
481 for entry in self.cursor.fetchall(): |
|
f255363e6d97
PostgreSQL backend lands.
Richard Jones <richard@users.sourceforge.net>
parents:
1836
diff
changeset
|
482 if entry[1] == index_name: |
|
f255363e6d97
PostgreSQL backend lands.
Richard Jones <richard@users.sourceforge.net>
parents:
1836
diff
changeset
|
483 return 1 |
|
f255363e6d97
PostgreSQL backend lands.
Richard Jones <richard@users.sourceforge.net>
parents:
1836
diff
changeset
|
484 return 0 |
|
f255363e6d97
PostgreSQL backend lands.
Richard Jones <richard@users.sourceforge.net>
parents:
1836
diff
changeset
|
485 |
|
2098
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
486 # old-skool id generation |
|
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
487 def newid(self, classname): |
|
4076
59d02edfaa9c
Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents:
3858
diff
changeset
|
488 """ Generate a new id for the given class |
|
59d02edfaa9c
Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents:
3858
diff
changeset
|
489 """ |
|
5143
9cebf686c552
issue2550727: db.newid is broken with sqlite.
John Rouillard <rouilj@ieee.org>
parents:
5096
diff
changeset
|
490 |
|
9cebf686c552
issue2550727: db.newid is broken with sqlite.
John Rouillard <rouilj@ieee.org>
parents:
5096
diff
changeset
|
491 # Prevent other processes from reading while we increment. |
|
9cebf686c552
issue2550727: db.newid is broken with sqlite.
John Rouillard <rouilj@ieee.org>
parents:
5096
diff
changeset
|
492 # Otherwise multiple processes can end up with the same |
|
9cebf686c552
issue2550727: db.newid is broken with sqlite.
John Rouillard <rouilj@ieee.org>
parents:
5096
diff
changeset
|
493 # new id and hilarity results. |
|
9cebf686c552
issue2550727: db.newid is broken with sqlite.
John Rouillard <rouilj@ieee.org>
parents:
5096
diff
changeset
|
494 # |
|
9cebf686c552
issue2550727: db.newid is broken with sqlite.
John Rouillard <rouilj@ieee.org>
parents:
5096
diff
changeset
|
495 # Defeat pysqlite's attempts to do locking by setting |
|
9cebf686c552
issue2550727: db.newid is broken with sqlite.
John Rouillard <rouilj@ieee.org>
parents:
5096
diff
changeset
|
496 # isolation_level to None. Pysqlite can commit |
|
9cebf686c552
issue2550727: db.newid is broken with sqlite.
John Rouillard <rouilj@ieee.org>
parents:
5096
diff
changeset
|
497 # on it's own even if we don't want it to end the transaction. |
|
9cebf686c552
issue2550727: db.newid is broken with sqlite.
John Rouillard <rouilj@ieee.org>
parents:
5096
diff
changeset
|
498 # If we rewrite to use another sqlite library like apsw we |
|
9cebf686c552
issue2550727: db.newid is broken with sqlite.
John Rouillard <rouilj@ieee.org>
parents:
5096
diff
changeset
|
499 # don't have to deal with this autocommit/autotransact foolishness. |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
500 self.conn.isolation_level = None |
|
5143
9cebf686c552
issue2550727: db.newid is broken with sqlite.
John Rouillard <rouilj@ieee.org>
parents:
5096
diff
changeset
|
501 # Manage the transaction locks manually. |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
502 self.sql("BEGIN IMMEDIATE") |
|
5143
9cebf686c552
issue2550727: db.newid is broken with sqlite.
John Rouillard <rouilj@ieee.org>
parents:
5096
diff
changeset
|
503 |
|
2098
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
504 # get the next ID |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
505 sql = 'select num from ids where name=%s' % self.arg |
|
2514
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2374
diff
changeset
|
506 self.sql(sql, (classname, )) |
|
2098
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
507 newid = int(self.cursor.fetchone()[0]) |
|
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
508 |
|
5143
9cebf686c552
issue2550727: db.newid is broken with sqlite.
John Rouillard <rouilj@ieee.org>
parents:
5096
diff
changeset
|
509 # leave the next larger number as the next newid |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
510 sql = 'update ids set num=num+1 where name=%s' % self.arg |
|
5143
9cebf686c552
issue2550727: db.newid is broken with sqlite.
John Rouillard <rouilj@ieee.org>
parents:
5096
diff
changeset
|
511 vals = (classname,) |
|
2514
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2374
diff
changeset
|
512 self.sql(sql, vals) |
|
2098
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
513 |
|
5143
9cebf686c552
issue2550727: db.newid is broken with sqlite.
John Rouillard <rouilj@ieee.org>
parents:
5096
diff
changeset
|
514 # reset pysqlite's auto transact stuff to default since the |
|
9cebf686c552
issue2550727: db.newid is broken with sqlite.
John Rouillard <rouilj@ieee.org>
parents:
5096
diff
changeset
|
515 # rest of the code expects it. |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
516 self.conn.isolation_level = '' |
|
5143
9cebf686c552
issue2550727: db.newid is broken with sqlite.
John Rouillard <rouilj@ieee.org>
parents:
5096
diff
changeset
|
517 # commit writing the data, clearing locks for other processes |
|
9cebf686c552
issue2550727: db.newid is broken with sqlite.
John Rouillard <rouilj@ieee.org>
parents:
5096
diff
changeset
|
518 # and create a new cursor to the database. |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
519 self.sql_commit() |
|
5143
9cebf686c552
issue2550727: db.newid is broken with sqlite.
John Rouillard <rouilj@ieee.org>
parents:
5096
diff
changeset
|
520 |
|
2098
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
521 # return as string |
|
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
522 return str(newid) |
|
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
523 |
|
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
524 def setid(self, classname, setid): |
|
4076
59d02edfaa9c
Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents:
3858
diff
changeset
|
525 """ Set the id counter: used during import of database |
|
2098
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
526 |
|
3306
ae1093684ef5
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
3163
diff
changeset
|
527 We add one to make it behave like the sequences in postgres. |
|
4076
59d02edfaa9c
Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents:
3858
diff
changeset
|
528 """ |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
529 sql = 'update ids set num=%s where name=%s' % (self.arg, self.arg) |
|
2098
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
530 vals = (int(setid)+1, classname) |
|
2514
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2374
diff
changeset
|
531 self.sql(sql, vals) |
|
2098
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
532 |
|
3306
ae1093684ef5
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
3163
diff
changeset
|
533 def clear(self): |
|
3310
3518d1ffd940
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
3306
diff
changeset
|
534 rdbms_common.Database.clear(self) |
|
3306
ae1093684ef5
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
3163
diff
changeset
|
535 # set the id counters to 0 (setid adds one) so we start at 1 |
|
ae1093684ef5
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
3163
diff
changeset
|
536 for cn in self.classes.keys(): |
|
ae1093684ef5
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
3163
diff
changeset
|
537 self.setid(cn, 0) |
|
ae1093684ef5
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
3163
diff
changeset
|
538 |
|
2098
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
539 def create_class(self, spec): |
|
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
540 rdbms_common.Database.create_class(self, spec) |
| 6932 | 541 sql = 'insert into ids (name, num) values (%s, %s)' % ( |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
542 self.arg, self.arg) |
|
2098
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
543 vals = (spec.classname, 1) |
|
2514
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2374
diff
changeset
|
544 self.sql(sql, vals) |
|
2098
18addf2a8596
Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents:
2094
diff
changeset
|
545 |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
546 if sqlite_version in (2, 3): |
|
3718
0d561b24ceff
support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents:
3693
diff
changeset
|
547 def load_journal(self, classname, cols, nodeid): |
|
4076
59d02edfaa9c
Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents:
3858
diff
changeset
|
548 """We need to turn the sqlite3.Row into a tuple so it can be |
|
59d02edfaa9c
Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents:
3858
diff
changeset
|
549 unpacked""" |
|
3718
0d561b24ceff
support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents:
3693
diff
changeset
|
550 l = rdbms_common.Database.load_journal(self, |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
551 classname, cols, nodeid) |
|
3718
0d561b24ceff
support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents:
3693
diff
changeset
|
552 cols = range(5) |
|
0d561b24ceff
support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents:
3693
diff
changeset
|
553 return [[row[col] for col in cols] for row in l] |
|
0d561b24ceff
support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents:
3693
diff
changeset
|
554 |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
555 |
|
1911
f5c804379c85
fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents:
1906
diff
changeset
|
556 class sqliteClass: |
|
5869
16e1255b16cf
Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5867
diff
changeset
|
557 def filter(self, *args, **kw): |
|
4076
59d02edfaa9c
Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents:
3858
diff
changeset
|
558 """ If there's NO matches to a fetch, sqlite returns NULL |
|
1911
f5c804379c85
fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents:
1906
diff
changeset
|
559 instead of nothing |
|
4076
59d02edfaa9c
Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents:
3858
diff
changeset
|
560 """ |
|
5869
16e1255b16cf
Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5867
diff
changeset
|
561 return [f for f in rdbms_common.Class.filter(self, *args, **kw) if f] |
| 1165 | 562 |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
563 |
|
1911
f5c804379c85
fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents:
1906
diff
changeset
|
564 class Class(sqliteClass, rdbms_common.Class): |
|
f5c804379c85
fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents:
1906
diff
changeset
|
565 pass |
|
1168
94620e088e3a
fixes to the rdbms backends
Richard Jones <richard@users.sourceforge.net>
parents:
1165
diff
changeset
|
566 |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
567 |
|
1911
f5c804379c85
fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents:
1906
diff
changeset
|
568 class IssueClass(sqliteClass, rdbms_common.IssueClass): |
|
f5c804379c85
fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents:
1906
diff
changeset
|
569 pass |
|
1168
94620e088e3a
fixes to the rdbms backends
Richard Jones <richard@users.sourceforge.net>
parents:
1165
diff
changeset
|
570 |
|
6050
19a58adf5d1f
Flake8: whitepace; don't import base64; unused loop var gets leading _
John Rouillard <rouilj@ieee.org>
parents:
5869
diff
changeset
|
571 |
|
1911
f5c804379c85
fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents:
1906
diff
changeset
|
572 class FileClass(sqliteClass, rdbms_common.FileClass): |
|
f5c804379c85
fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents:
1906
diff
changeset
|
573 pass |
|
1168
94620e088e3a
fixes to the rdbms backends
Richard Jones <richard@users.sourceforge.net>
parents:
1165
diff
changeset
|
574 |
|
2645
8250c63c3963
remove space at EOL, add vim modeline
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2633
diff
changeset
|
575 # vim: set et sts=4 sw=4 : |
