/sqlite3cc

To get this branch, use:
bzr branch http://bzr.ed.am/sqlite3cc

« back to all changes in this revision

Viewing changes to TODO

  • Committer: edam
  • Date: 2010-07-27 15:12:55 UTC
  • Revision ID: edam@waxworlds.org-20100727151255-goaqgdz4kj13q7gz
- update TODO
- added some missing includes for <string>
- changed usage of database::exec() to not require return code!
- prevented transaction_guard destructor from throwing an exception

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
 
2
 
IMMEDIATE ISSUES
3
 
 
4
 
 - rename _bind_index and _column_index to _next_*
5
 
 
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).
10
 
 
11
 
 - turn on extended errcodes in open() and handle them in sqlite_error
12
 
 
13
 
 - query::prepare() isn't being called during construction (form
14
 
   basic_statement's constructor)
15
 
 
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)
19
 
 
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?
27
 
 
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
36
 
 
37
 
 
38
 
LONGER TERM IDEAS
39
 
 
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
45
 
   to swallow.
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
49
 
      querys?
50
 
 
51
 
 - expand sqlite_error - perhaps use boost::system_error (see
52
 
   boost/asio/error.hpp for an example of extending system_error)
53
 
 
54
 
 - see if we can #include "sqlite.h" in to a namespace.
55
 
 
 
1
- add columns() to row that returns a boost::tuple of various types so multple columns can be fetched at once
 
2
        - look in to using BOOST_PP_ITERATE macro
 
3
- make basic_statement and database keep a shared pointer to the database handle so the classes can be made copyable. Also:
 
4
    - the wrappers around the handle can clean them up after use
 
5
    - the actual wrappers wround the handles can be made in sqlite::detail
 
6
    - this will also make the implementation od rows (to get round the forced non-dependency of rows on querys) a little easier to swallow.
 
7
- move _null_t, _exec_t and _set_index_t to sqlite::detail. Only the named instantiations of these structs need be in the sqlite namespace.
 
8
- add immediate_transaction
 
9
- committing a transaction during a query (i.e., when sqlite3_step() has returned SQLITE_ROW) causes an error. To counter this:
 
10
        - calling query.reset() before the commit fixes the issue
 
11
    - need to check it's not fixed in latest sqlite
 
12
    - will need to keep a list of querys that need resetting in the database  :o(
 
13
- turn on extended errcodes in open() and handle them in sqlite_error
 
14
- use sqlite3_db_mutex() to provide extended error information during sqlite_error construction - see sqlite::query::step() for example
 
15
- expand sqlite_error - perhaps use boost::system_error (see boost/asio/error.hpp for an example of extending system_error)
 
16
- see if we can #include "sqlite.h" in to a namespace.
56
17
        Pros:
57
 
         - we better encapsulate the library
58
 
         - we can reuse "sqlite3" as a namespace
 
18
                we better encapsulate the library
 
19
                we can reuse "sqlite3" as a namespace
59
20
        Cons:
60
 
         - makes access to real sqlite stuff awkward to sqlite3cc users,
61
 
       but does this matter? they can't access database._handle
62
 
       anyway!
63
 
     - potential incompatibility when linking to libraries that also
64
 
       link against sqlite
 
21
                makes access to real sqlite stuff awkward to sqlite3cc users, but does this matter? they can't access database._handle anyway!
 
22
                potential incompatibility when linking to libraries that also link against sqlite
 
23
- fix step() inconsistency - query::step() returns a row, whereas basic_statement::step() and command::step() return an int return code
 
24
- query::prepare() isn't being called during construction (form
 
25
        basic_statement's constructor)