amalgalite 0.7.5-x86-mswin32-60 → 0.7.6-x86-mswin32-60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/ext/sqlite3.h CHANGED
@@ -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.
data/ext/test_error.c CHANGED
@@ -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