amalgalite 0.7.5 → 0.7.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -30,7 +30,7 @@
30
30
  ** the version number) and changes its name to "sqlite3.h" as
31
31
  ** part of the build process.
32
32
  **
33
- ** @(#) $Id: sqlite.h.in,v 1.421 2008/12/30 06:24:58 danielk1977 Exp $
33
+ ** @(#) $Id: sqlite.h.in,v 1.432 2009/02/12 17:07:35 drh Exp $
34
34
  */
35
35
  #ifndef _SQLITE3_H_
36
36
  #define _SQLITE3_H_
@@ -107,8 +107,8 @@ extern "C" {
107
107
  ** with the value (X*1000000 + Y*1000 + Z) where X, Y, and Z
108
108
  ** are the major version, minor version, and release number.
109
109
  */
110
- #define SQLITE_VERSION "3.6.10"
111
- #define SQLITE_VERSION_NUMBER 3006010
110
+ #define SQLITE_VERSION "3.6.11"
111
+ #define SQLITE_VERSION_NUMBER 3006011
112
112
 
113
113
  /*
114
114
  ** CAPI3REF: Run-Time Library Version Numbers {H10020} <S60100>
@@ -2789,8 +2789,10 @@ typedef struct sqlite3_stmt sqlite3_stmt;
2789
2789
  ** new limit for that construct. The function returns the old limit.
2790
2790
  **
2791
2791
  ** If the new limit is a negative number, the limit is unchanged.
2792
- ** For the limit category of SQLITE_LIMIT_XYZ there is a hard upper
2793
- ** bound set by a compile-time C preprocessor macro named SQLITE_MAX_XYZ.
2792
+ ** For the limit category of SQLITE_LIMIT_XYZ there is a
2793
+ ** [limits | hard upper bound]
2794
+ ** set by a compile-time C preprocessor macro named
2795
+ ** [limits | SQLITE_MAX_XYZ].
2794
2796
  ** (The "_LIMIT_" in the name is changed to "_MAX_".)
2795
2797
  ** Attempts to increase a limit above its hard upper bound are
2796
2798
  ** silently truncated to the hard upper limit.
@@ -2798,7 +2800,7 @@ typedef struct sqlite3_stmt sqlite3_stmt;
2798
2800
  ** Run time limits are intended for use in applications that manage
2799
2801
  ** both their own internal database and also databases that are controlled
2800
2802
  ** by untrusted external sources. An example application might be a
2801
- ** webbrowser that has its own databases for storing history and
2803
+ ** web browser that has its own databases for storing history and
2802
2804
  ** separate databases controlled by JavaScript applications downloaded
2803
2805
  ** off the Internet. The internal databases can be given the
2804
2806
  ** large, default limits. Databases managed by external sources can
@@ -2830,9 +2832,10 @@ int sqlite3_limit(sqlite3*, int id, int newVal);
2830
2832
  ** CAPI3REF: Run-Time Limit Categories {H12790} <H12760>
2831
2833
  ** KEYWORDS: {limit category} {limit categories}
2832
2834
  **
2833
- ** These constants define various aspects of a [database connection]
2834
- ** that can be limited in size by calls to [sqlite3_limit()].
2835
- ** The meanings of the various limits are as follows:
2835
+ ** These constants define various performance limits
2836
+ ** that can be lowered at run-time using [sqlite3_limit()].
2837
+ ** The synopsis of the meanings of the various limits is shown below.
2838
+ ** Additional information is available at [limits | Limits in SQLite].
2836
2839
  **
2837
2840
  ** <dl>
2838
2841
  ** <dt>SQLITE_LIMIT_LENGTH</dt>
@@ -2843,7 +2846,7 @@ int sqlite3_limit(sqlite3*, int id, int newVal);
2843
2846
  **
2844
2847
  ** <dt>SQLITE_LIMIT_COLUMN</dt>
2845
2848
  ** <dd>The maximum number of columns in a table definition or in the
2846
- ** result set of a SELECT or the maximum number of columns in an index
2849
+ ** result set of a [SELECT] or the maximum number of columns in an index
2847
2850
  ** or in an ORDER BY or GROUP BY clause.</dd>
2848
2851
  **
2849
2852
  ** <dt>SQLITE_LIMIT_EXPR_DEPTH</dt>
@@ -2860,11 +2863,11 @@ int sqlite3_limit(sqlite3*, int id, int newVal);
2860
2863
  ** <dd>The maximum number of arguments on a function.</dd>
2861
2864
  **
2862
2865
  ** <dt>SQLITE_LIMIT_ATTACHED</dt>
2863
- ** <dd>The maximum number of attached databases.</dd>
2866
+ ** <dd>The maximum number of [ATTACH | attached databases].</dd>
2864
2867
  **
2865
2868
  ** <dt>SQLITE_LIMIT_LIKE_PATTERN_LENGTH</dt>
2866
- ** <dd>The maximum length of the pattern argument to the LIKE or
2867
- ** GLOB operators.</dd>
2869
+ ** <dd>The maximum length of the pattern argument to the [LIKE] or
2870
+ ** [GLOB] operators.</dd>
2868
2871
  **
2869
2872
  ** <dt>SQLITE_LIMIT_VARIABLE_NUMBER</dt>
2870
2873
  ** <dd>The maximum number of variables in an SQL statement that can
@@ -3099,7 +3102,7 @@ typedef struct sqlite3_context sqlite3_context;
3099
3102
  ** KEYWORDS: {SQL parameter} {SQL parameters} {parameter binding}
3100
3103
  **
3101
3104
  ** In the SQL strings input to [sqlite3_prepare_v2()] and its variants,
3102
- ** literals may be replaced by a parameter in one of these forms:
3105
+ ** literals may be replaced by a [parameter] in one of these forms:
3103
3106
  **
3104
3107
  ** <ul>
3105
3108
  ** <li> ?
@@ -4977,8 +4980,8 @@ int sqlite3_get_autocommit(sqlite3*);
4977
4980
  ** CAPI3REF: Find The Database Handle Of A Prepared Statement {H13120} <S60600>
4978
4981
  **
4979
4982
  ** The sqlite3_db_handle interface returns the [database connection] handle
4980
- ** to which a [prepared statement] belongs. The database handle returned by
4981
- ** sqlite3_db_handle is the same database handle that was the first argument
4983
+ ** to which a [prepared statement] belongs. The [database connection]
4984
+ ** returned by sqlite3_db_handle is the same [database connection] that was the first argument
4982
4985
  ** to the [sqlite3_prepare_v2()] call (or its variants) that was used to
4983
4986
  ** create the statement in the first place.
4984
4987
  **
@@ -5183,7 +5186,7 @@ void *sqlite3_update_hook(
5183
5186
  ** to the same database. Sharing is enabled if the argument is true
5184
5187
  ** and disabled if the argument is false.
5185
5188
  **
5186
- ** Cache sharing is enabled and disabled for an entire process. {END}
5189
+ ** Cache sharing is enabled and disabled for an entire process.
5187
5190
  ** This is a change as of SQLite version 3.5.0. In prior versions of SQLite,
5188
5191
  ** sharing was enabled or disabled for each thread separately.
5189
5192
  **
@@ -5203,6 +5206,8 @@ void *sqlite3_update_hook(
5203
5206
  ** future releases of SQLite. Applications that care about shared
5204
5207
  ** cache setting should set it explicitly.
5205
5208
  **
5209
+ ** See Also: [SQLite Shared-Cache Mode]
5210
+ **
5206
5211
  ** INVARIANTS:
5207
5212
  **
5208
5213
  ** {H10331} A successful invocation of [sqlite3_enable_shared_cache(B)]
@@ -6372,6 +6377,7 @@ int sqlite3_test_control(int op, ...);
6372
6377
  #define SQLITE_TESTCTRL_BITVEC_TEST 8
6373
6378
  #define SQLITE_TESTCTRL_FAULT_INSTALL 9
6374
6379
  #define SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS 10
6380
+ #define SQLITE_TESTCTRL_PENDING_BYTE 11
6375
6381
 
6376
6382
  /*
6377
6383
  ** CAPI3REF: SQLite Runtime Status {H17200} <S60200>
@@ -6661,17 +6667,17 @@ typedef struct sqlite3_pcache sqlite3_pcache;
6661
6667
  ** in which case SQLite will attempt to unpin one or more
6662
6668
  ** pages before re-requesting the same page, or it can
6663
6669
  ** allocate a new page and return a pointer to it. If a new
6664
- ** page is allocated, then it must be completely zeroed before
6665
- ** it is returned.
6670
+ ** page is allocated, then the first sizeof(void*) bytes of
6671
+ ** it (at least) must be zeroed before it is returned.
6666
6672
  ** <tr><td>2<td>If createFlag is set to 2, then SQLite is not holding any
6667
6673
  ** pinned pages associated with the specific cache passed
6668
6674
  ** as the first argument to xFetch() that can be unpinned. The
6669
6675
  ** cache implementation should attempt to allocate a new
6670
- ** cache entry and return a pointer to it. Again, the new
6671
- ** page should be zeroed before it is returned. If the xFetch()
6672
- ** method returns NULL when createFlag==2, SQLite assumes that
6673
- ** a memory allocation failed and returns SQLITE_NOMEM to the
6674
- ** user.
6676
+ ** cache entry and return a pointer to it. Again, the first
6677
+ ** sizeof(void*) bytes of the page should be zeroed before
6678
+ ** it is returned. If the xFetch() method returns NULL when
6679
+ ** createFlag==2, SQLite assumes that a memory allocation
6680
+ ** failed and returns SQLITE_NOMEM to the user.
6675
6681
  ** </table>
6676
6682
  **
6677
6683
  ** xUnpin() is called by SQLite with a pointer to a currently pinned page
@@ -6722,6 +6728,202 @@ struct sqlite3_pcache_methods {
6722
6728
  void (*xDestroy)(sqlite3_pcache*);
6723
6729
  };
6724
6730
 
6731
+ /*
6732
+ ** CAPI3REF: Online Backup Object
6733
+ ** EXPERIMENTAL
6734
+ **
6735
+ ** The sqlite3_backup object records state information about an ongoing
6736
+ ** online backup operation. The sqlite3_backup object is created by
6737
+ ** a call to [sqlite3_backup_init()] and is destroyed by a call to
6738
+ ** [sqlite3_backup_finish()].
6739
+ **
6740
+ ** See Also: [Using the SQLite Online Backup API]
6741
+ */
6742
+ typedef struct sqlite3_backup sqlite3_backup;
6743
+
6744
+ /*
6745
+ ** CAPI3REF: Online Backup API.
6746
+ ** EXPERIMENTAL
6747
+ **
6748
+ ** This API is used to overwrite the contents of one database with that
6749
+ ** of another. It is useful either for creating backups of databases or
6750
+ ** for copying in-memory databases to or from persistent files.
6751
+ **
6752
+ ** See Also: [Using the SQLite Online Backup API]
6753
+ **
6754
+ ** Exclusive access is required to the destination database for the
6755
+ ** duration of the operation. However the source database is only
6756
+ ** read-locked while it is actually being read, it is not locked
6757
+ ** continuously for the entire operation. Thus, the backup may be
6758
+ ** performed on a live database without preventing other users from
6759
+ ** writing to the database for an extended period of time.
6760
+ **
6761
+ ** To perform a backup operation:
6762
+ ** <ol>
6763
+ ** <li><b>sqlite3_backup_init()</b> is called once to initialize the
6764
+ ** backup,
6765
+ ** <li><b>sqlite3_backup_step()</b> is called one or more times to transfer
6766
+ ** the data between the two databases, and finally
6767
+ ** <li><b>sqlite3_backup_finish()</b> is called to release all resources
6768
+ ** associated with the backup operation.
6769
+ ** </ol>
6770
+ ** There should be exactly one call to sqlite3_backup_finish() for each
6771
+ ** successful call to sqlite3_backup_init().
6772
+ **
6773
+ ** <b>sqlite3_backup_init()</b>
6774
+ **
6775
+ ** The first two arguments passed to [sqlite3_backup_init()] are the database
6776
+ ** handle associated with the destination database and the database name
6777
+ ** used to attach the destination database to the handle. The database name
6778
+ ** is "main" for the main database, "temp" for the temporary database, or
6779
+ ** the name specified as part of the [ATTACH] statement if the destination is
6780
+ ** an attached database. The third and fourth arguments passed to
6781
+ ** sqlite3_backup_init() identify the [database connection]
6782
+ ** and database name used
6783
+ ** to access the source database. The values passed for the source and
6784
+ ** destination [database connection] parameters must not be the same.
6785
+ **
6786
+ ** If an error occurs within sqlite3_backup_init(), then NULL is returned
6787
+ ** and an error code and error message written into the [database connection]
6788
+ ** passed as the first argument. They may be retrieved using the
6789
+ ** [sqlite3_errcode()], [sqlite3_errmsg()], and [sqlite3_errmsg16()] functions.
6790
+ ** Otherwise, if successful, a pointer to an [sqlite3_backup] object is
6791
+ ** returned. This pointer may be used with the sqlite3_backup_step() and
6792
+ ** sqlite3_backup_finish() functions to perform the specified backup
6793
+ ** operation.
6794
+ **
6795
+ ** <b>sqlite3_backup_step()</b>
6796
+ **
6797
+ ** Function [sqlite3_backup_step()] is used to copy up to nPage pages between
6798
+ ** the source and destination databases, where nPage is the value of the
6799
+ ** second parameter passed to sqlite3_backup_step(). If nPage is a negative
6800
+ ** value, all remaining source pages are copied. If the required pages are
6801
+ ** succesfully copied, but there are still more pages to copy before the
6802
+ ** backup is complete, it returns [SQLITE_OK]. If no error occured and there
6803
+ ** are no more pages to copy, then [SQLITE_DONE] is returned. If an error
6804
+ ** occurs, then an SQLite error code is returned. As well as [SQLITE_OK] and
6805
+ ** [SQLITE_DONE], a call to sqlite3_backup_step() may return [SQLITE_READONLY],
6806
+ ** [SQLITE_NOMEM], [SQLITE_BUSY], [SQLITE_LOCKED], or an
6807
+ ** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX] extended error code.
6808
+ **
6809
+ ** As well as the case where the destination database file was opened for
6810
+ ** read-only access, sqlite3_backup_step() may return [SQLITE_READONLY] if
6811
+ ** the destination is an in-memory database with a different page size
6812
+ ** from the source database.
6813
+ **
6814
+ ** If sqlite3_backup_step() cannot obtain a required file-system lock, then
6815
+ ** the [sqlite3_busy_handler | busy-handler function]
6816
+ ** is invoked (if one is specified). If the
6817
+ ** busy-handler returns non-zero before the lock is available, then
6818
+ ** [SQLITE_BUSY] is returned to the caller. In this case the call to
6819
+ ** sqlite3_backup_step() can be retried later. If the source
6820
+ ** [database connection]
6821
+ ** is being used to write to the source database when sqlite3_backup_step()
6822
+ ** is called, then [SQLITE_LOCKED] is returned immediately. Again, in this
6823
+ ** case the call to sqlite3_backup_step() can be retried later on. If
6824
+ ** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX], [SQLITE_NOMEM], or
6825
+ ** [SQLITE_READONLY] is returned, then
6826
+ ** there is no point in retrying the call to sqlite3_backup_step(). These
6827
+ ** errors are considered fatal. At this point the application must accept
6828
+ ** that the backup operation has failed and pass the backup operation handle
6829
+ ** to the sqlite3_backup_finish() to release associated resources.
6830
+ **
6831
+ ** Following the first call to sqlite3_backup_step(), an exclusive lock is
6832
+ ** obtained on the destination file. It is not released until either
6833
+ ** sqlite3_backup_finish() is called or the backup operation is complete
6834
+ ** and sqlite3_backup_step() returns [SQLITE_DONE]. Additionally, each time
6835
+ ** a call to sqlite3_backup_step() is made a [shared lock] is obtained on
6836
+ ** the source database file. This lock is released before the
6837
+ ** sqlite3_backup_step() call returns. Because the source database is not
6838
+ ** locked between calls to sqlite3_backup_step(), it may be modified mid-way
6839
+ ** through the backup procedure. If the source database is modified by an
6840
+ ** external process or via a database connection other than the one being
6841
+ ** used by the backup operation, then the backup will be transparently
6842
+ ** restarted by the next call to sqlite3_backup_step(). If the source
6843
+ ** database is modified by the using the same database connection as is used
6844
+ ** by the backup operation, then the backup database is transparently
6845
+ ** updated at the same time.
6846
+ **
6847
+ ** <b>sqlite3_backup_finish()</b>
6848
+ **
6849
+ ** Once sqlite3_backup_step() has returned [SQLITE_DONE], or when the
6850
+ ** application wishes to abandon the backup operation, the [sqlite3_backup]
6851
+ ** object should be passed to sqlite3_backup_finish(). This releases all
6852
+ ** resources associated with the backup operation. If sqlite3_backup_step()
6853
+ ** has not yet returned [SQLITE_DONE], then any active write-transaction on the
6854
+ ** destination database is rolled back. The [sqlite3_backup] object is invalid
6855
+ ** and may not be used following a call to sqlite3_backup_finish().
6856
+ **
6857
+ ** The value returned by sqlite3_backup_finish is [SQLITE_OK] if no error
6858
+ ** occurred, regardless or whether or not sqlite3_backup_step() was called
6859
+ ** a sufficient number of times to complete the backup operation. Or, if
6860
+ ** an out-of-memory condition or IO error occured during a call to
6861
+ ** sqlite3_backup_step() then [SQLITE_NOMEM] or an
6862
+ ** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX] error code
6863
+ ** is returned. In this case the error code and an error message are
6864
+ ** written to the destination [database connection].
6865
+ **
6866
+ ** A return of [SQLITE_BUSY] or [SQLITE_LOCKED] from sqlite3_backup_step() is
6867
+ ** not a permanent error and does not affect the return value of
6868
+ ** sqlite3_backup_finish().
6869
+ **
6870
+ ** <b>sqlite3_backup_remaining(), sqlite3_backup_pagecount()</b>
6871
+ **
6872
+ ** Each call to sqlite3_backup_step() sets two values stored internally
6873
+ ** by an [sqlite3_backup] object. The number of pages still to be backed
6874
+ ** up, which may be queried by sqlite3_backup_remaining(), and the total
6875
+ ** number of pages in the source database file, which may be queried by
6876
+ ** sqlite3_backup_pagecount().
6877
+ **
6878
+ ** The values returned by these functions are only updated by
6879
+ ** sqlite3_backup_step(). If the source database is modified during a backup
6880
+ ** operation, then the values are not updated to account for any extra
6881
+ ** pages that need to be updated or the size of the source database file
6882
+ ** changing.
6883
+ **
6884
+ ** <b>Concurrent Usage of Database Handles</b>
6885
+ **
6886
+ ** The source [database connection] may be used by the application for other
6887
+ ** purposes while a backup operation is underway or being initialized.
6888
+ ** If SQLite is compiled and configured to support threadsafe database
6889
+ ** connections, then the source database connection may be used concurrently
6890
+ ** from within other threads.
6891
+ **
6892
+ ** However, the application must guarantee that the destination database
6893
+ ** connection handle is not passed to any other API (by any thread) after
6894
+ ** sqlite3_backup_init() is called and before the corresponding call to
6895
+ ** sqlite3_backup_finish(). Unfortunately SQLite does not currently check
6896
+ ** for this, if the application does use the destination [database connection]
6897
+ ** for some other purpose during a backup operation, things may appear to
6898
+ ** work correctly but in fact be subtly malfunctioning. Use of the
6899
+ ** destination database connection while a backup is in progress might
6900
+ ** also cause a mutex deadlock.
6901
+ **
6902
+ ** Furthermore, if running in [shared cache mode], the application must
6903
+ ** guarantee that the shared cache used by the destination database
6904
+ ** is not accessed while the backup is running. In practice this means
6905
+ ** that the application must guarantee that the file-system file being
6906
+ ** backed up to is not accessed by any connection within the process,
6907
+ ** not just the specific connection that was passed to sqlite3_backup_init().
6908
+ **
6909
+ ** The [sqlite3_backup] object itself is partially threadsafe. Multiple
6910
+ ** threads may safely make multiple concurrent calls to sqlite3_backup_step().
6911
+ ** However, the sqlite3_backup_remaining() and sqlite3_backup_pagecount()
6912
+ ** APIs are not strictly speaking threadsafe. If they are invoked at the
6913
+ ** same time as another thread is invoking sqlite3_backup_step() it is
6914
+ ** possible that they return invalid values.
6915
+ */
6916
+ sqlite3_backup *sqlite3_backup_init(
6917
+ sqlite3 *pDest, /* Destination database handle */
6918
+ const char *zDestName, /* Destination database name */
6919
+ sqlite3 *pSource, /* Source database handle */
6920
+ const char *zSourceName /* Source database name */
6921
+ );
6922
+ int sqlite3_backup_step(sqlite3_backup *p, int nPage);
6923
+ int sqlite3_backup_finish(sqlite3_backup *p);
6924
+ int sqlite3_backup_remaining(sqlite3_backup *p);
6925
+ int sqlite3_backup_pagecount(sqlite3_backup *p);
6926
+
6725
6927
  /*
6726
6928
  ** Undo the hack that converts floating point types to integer for
6727
6929
  ** builds on processors without floating point support.
@@ -6,21 +6,20 @@
6
6
  * ./test_error
7
7
  */
8
8
 
9
- int callback( void *unused, int argc, char **argv, char **col_name )
9
+ int test_progress_callback( void* data )
10
10
  {
11
- return 0;
11
+ fprintf(stderr, "Progress handler callback\n");
12
+ return 1;
12
13
  }
13
14
 
14
- void test_error( sqlite3_context* context, int argc, sqlite3_value **argv)
15
- {
16
- char* msg = (char*)sqlite3_value_text( argv[0] );
17
- int code = sqlite3_value_int( argv[1] );
18
-
19
- fprintf( stderr, "Writting error msg '%s' and error_code %d to context\n", msg, code );
20
15
 
21
- sqlite3_result_error( context, msg, -1 );
22
- sqlite3_result_error_code( context, code);
23
- return;
16
+ void abort_if_error( sqlite3* db, char* msg, int rc )
17
+ {
18
+ if ( SQLITE_OK != rc ) {
19
+ fprintf( stderr, "%s: [%d] -> %s\n", msg, sqlite3_errcode( db ), sqlite3_errmsg( db ) );
20
+ sqlite3_close( db );
21
+ exit( 1 );
22
+ }
24
23
  }
25
24
 
26
25
  int main( int argc, char **argv )
@@ -34,31 +33,15 @@ int main( int argc, char **argv )
34
33
  printf("SQLite Version: %s\n", sqlite3_libversion() );
35
34
 
36
35
  rc = sqlite3_open_v2( ":memory:", &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL );
37
- if ( SQLITE_OK != rc ) {
38
- fprintf(stderr, "Failure opening database: %s\n", sqlite3_errmsg( db ) );
39
- sqlite3_close( db );
40
- exit( 1 );
41
- }
36
+ abort_if_error( db, "Failure opening database", rc );
42
37
 
43
- rc = sqlite3_create_function( db, "test_error", 2, SQLITE_UTF8, NULL, test_error, NULL, NULL );
44
- if ( SQLITE_OK != rc ) {
45
- fprintf( stderr, "Failure creating function: %s\n", sqlite3_errmsg( db ) );
46
- sqlite3_close( db );
47
- exit( 1 );
48
- }
49
-
50
- rc = sqlite3_prepare_v2( db, "SELECT test_error('This is an error', 42)", -1, &stmt, &tail );
51
- if ( SQLITE_OK != rc ) {
52
- fprintf( stderr, "Failure preparing statement: %s\n", sqlite3_errmsg( db ) );
53
- sqlite3_close( db );
54
- exit( 1 );
55
- }
38
+ rc = sqlite3_exec( db, "CREATE TABLE t1( c1, c2 );", NULL, NULL, NULL );
39
+ abort_if_error( db, "Failure creating table t1", rc );
56
40
 
57
- rc = sqlite3_create_function( db, "test_error", 2, SQLITE_UTF8, NULL, NULL, NULL, NULL );
58
- printf( "remove rc = %d\n", rc );
59
- rc = sqlite3_create_function( db, "test_blah", -1, SQLITE_UTF8, NULL, NULL, NULL, NULL );
60
- printf( "remove rc 2 = %d\n", rc );
41
+ sqlite3_progress_handler( db, 5, test_progress_callback, (void*) NULL );
61
42
 
43
+ rc = sqlite3_prepare_v2( db, "SELECT * FROM t1", -1, &stmt, &tail );
44
+ abort_if_error( db, "Failure preparing statement", rc );
62
45
 
63
46
  rc = sqlite3_step( stmt );
64
47
  if ( SQLITE_ROW != rc ) {
@@ -67,10 +50,12 @@ int main( int argc, char **argv )
67
50
  printf( "Before finalizing error message is : %s\n", sqlite3_errmsg( db ));
68
51
  }
69
52
 
70
- rc = sqlite3_reset( stmt );
71
- printf( "Return value from sqlite3_finalize : %d\n", rc );
72
- printf( "After finalizing errcode is : %d\n", sqlite3_errcode( db ));
73
- printf( "After finalizing error message is : %s\n", sqlite3_errmsg( db ));
53
+ rc = sqlite3_finalize( stmt );
54
+ if ( SQLITE_OK != rc ) {
55
+ printf( "Return value from sqlite3_finalize : %d\n", rc );
56
+ printf( "After finalizing errcode is : %d\n", sqlite3_errcode( db ));
57
+ printf( "After finalizing error message is : %s\n", sqlite3_errmsg( db ));
58
+ }
74
59
  sqlite3_close( db );
75
60
  return 0;
76
61
 
@@ -165,6 +165,7 @@ module Amalgalite
165
165
  def close
166
166
  if open? then
167
167
  @api.close
168
+ @open = false
168
169
  end
169
170
  end
170
171
 
@@ -551,9 +552,10 @@ module Amalgalite
551
552
 
552
553
  if block_given? then
553
554
  begin
555
+ previous_exception = $!
554
556
  return ( yield self )
555
557
  ensure
556
- if $! then
558
+ if $! and ($! != previous_exception) then
557
559
  rollback
558
560
  raise $!
559
561
  else