1
- fix to force the finalisation of queries in progress for transactions causes
2
errors; queries are now finalised twice, the second from basic_statement's
3
dtor, which causes a segfault. We could:
4
- keep a set of force-finalised sqlite3_stmt pointers in the database which
5
we use to check queries against before finalising them to make sure we
6
don't finalise them a second time
7
- an efficient implementation, but not very OO
8
- keep a map of active queries in the database (using the sqlite3_stmt
9
pointer as the key), so that we can obtain the query and tell it to
11
- this seems like a messy and complicated implementation
12
- would be improved by having a wrapper around the query handle
14
- turn on extended errcodes in open() and handle them in sqlite_error
16
- make basic_statement and database keep a shared pointer to the database handle
17
so the classes can be made copyable. The wrappers around the handle
18
(implemented in sqlite::detail) can clean them up after use. This will also
19
make the implementation of rows (to get round the forced non-dependency of
20
rows on querys) a little easier to swallow.
21
- A similar wrapper should be created for statement handles, making
22
basic_statements, querys and commands copyable. Could weak_ptrs to these
23
also be used in the database's list active querys?
25
- add columns() to row that returns a boost::tuple of various types so multple
26
columns can be fetched at once (look in to using BOOST_PP_ITERATE macro)
28
- use sqlite3_db_mutex() to provide extended error information during
29
sqlite_error construction. The genreeal procedure would be to lock the db
30
mutex, perform some sqlite3 command, check the error code, throw an
31
sqlite_error (whilst obtaining extended error info) and then unlock the db
33
- a macro would be simple
34
- a templated safe-calling object (passing the comman's arg types as
35
template params) may be overkill
37
- expand sqlite_error - perhaps use boost::system_error (see
38
boost/asio/error.hpp for an example of extending system_error)
40
- see if we can #include "sqlite.h" in to a namespace.
4
- rename _bind_index and _column_index to _next_*
6
- change the transaction_guard interface so you can dereference it to
7
get to its transaction and the transactions take care of not
8
rolling back or committing when they already have done (as well as
9
resetting in-progress queries).
11
- turn on extended errcodes in open() and handle them in sqlite_error
13
- query::prepare() isn't being called during construction (form
14
basic_statement's constructor)
16
- add columns() to row that returns a boost::tuple of various types
17
so multple columns can be fetched at once (look in to using
18
BOOST_PP_ITERATE macro)
20
- add a rom::column() that can take a column name. This is nexessary
21
when doing a "SELECT *" and you don't know the column indicies. To
22
implement this, the first time it is called, a column-name-to-index
23
lookup would have to be built. This should be done in the query,
24
not the row. This means that the row will have to know it's query
25
(currently is copies its _handle) to be able to call column_index()
26
on it. Is this a problem?
28
- use sqlite3_db_mutex() to provide extended error information during
29
sqlite_error construction. The general procedure would be to lock
30
the db mutex, perform some sqlite3 command, check the error code,
31
throw an sqlite_error (whilst obtaining extended error info) and
32
then unlock the db mutex. Two options:
33
- a macro would be simple
34
- a templated safe-calling object (passing the comman's arg types
35
as template params) may be overkill
40
- make basic_statement and database keep a shared pointer to the
41
database handle so the classes can be made copyable. The wrappers
42
around the handle (implemented in sqlite::detail) can clean them up
43
after use. This will also make the implementation of rows (to get
44
round the forced non-dependency of rows on querys) a little easier
46
- A similar wrapper should be created for statement handles,
47
making basic_statements, querys and commands copyable. Could
48
weak_ptrs to these also be used in the database's list active
51
- expand sqlite_error - perhaps use boost::system_error (see
52
boost/asio/error.hpp for an example of extending system_error)
54
- see if we can #include "sqlite.h" in to a namespace.
42
we better encapsulate the library
43
we can reuse "sqlite3" as a namespace
57
- we better encapsulate the library
58
- we can reuse "sqlite3" as a namespace
45
makes access to real sqlite stuff awkward to sqlite3cc users, but does
46
this matter? they can't access database._handle anyway!
47
potential incompatibility when linking to libraries that also link
50
- query::prepare() isn't being called during construction (form
51
basic_statement's constructor)
60
- makes access to real sqlite stuff awkward to sqlite3cc users,
61
but does this matter? they can't access database._handle
63
- potential incompatibility when linking to libraries that also