mirror of
https://github.com/DBD-SQLite/DBD-SQLite
synced 2025-06-07 14:19:10 -04:00
found a way to get a proper handle; add test
This commit is contained in:
parent
d6a129143e
commit
c3209f468c
2 changed files with 53 additions and 22 deletions
52
dbdimp.c
52
dbdimp.c
|
@ -176,10 +176,17 @@ _sqlite_exec(pTHX_ SV *h, sqlite3 *db, const char *sql)
|
|||
}
|
||||
|
||||
static void
|
||||
_sqlite_log_callback(void *imp_dbh, int error_code, const char *message)
|
||||
_sqlite_log_callback(void *unused, int error_code, const char *message)
|
||||
{
|
||||
dTHX;
|
||||
sqlite_trace(NULL, imp_dbh, 3, form("sqlite3_log %d, %s", error_code, message));
|
||||
|
||||
SV* drh = get_sv("DBD::SQLite::drh", 0);
|
||||
|
||||
if (drh && SvOK(drh)) {
|
||||
D_imp_drh(drh);
|
||||
|
||||
sqlite_trace(NULL, imp_drh, 3, form("sqlite3_log %d, %s", error_code, message));
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -429,6 +436,27 @@ sqlite_init(dbistate_t *dbistate)
|
|||
{
|
||||
dTHX;
|
||||
DBISTATE_INIT; /* Initialize the DBI macros */
|
||||
|
||||
#if SQLITE_VERSION_NUMBER >= 3006023
|
||||
/*
|
||||
* "The sqlite3_config() interface may only be
|
||||
* invoked prior to library initialization using
|
||||
* sqlite3_initialize() or after shutdown by
|
||||
* sqlite3_shutdown()."
|
||||
* -- https://sqlite.org/c3ref/config.html
|
||||
*/
|
||||
sqlite3_config(SQLITE_CONFIG_LOG, _sqlite_log_callback, NULL);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* "For maximum portability, it is recommended that
|
||||
* applications always invoke sqlite3_initialize()
|
||||
* directly prior to using any other SQLite interface.
|
||||
* Future releases of SQLite may require this."
|
||||
* -- https://sqlite.org/c3ref/initialize.html
|
||||
*/
|
||||
sqlite3_initialize();
|
||||
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -449,26 +477,6 @@ sqlite_db_login6(SV *dbh, imp_dbh_t *imp_dbh, char *dbname, char *user, char *pa
|
|||
int flag = 0;
|
||||
int unicode = 0;
|
||||
|
||||
#if SQLITE_VERSION_NUMBER >= 3006023
|
||||
/*
|
||||
* "The sqlite3_config() interface may only be
|
||||
* invoked prior to library initialization using
|
||||
* sqlite3_initialize() or after shutdown by
|
||||
* sqlite3_shutdown()."
|
||||
* -- https://sqlite.org/c3ref/config.html
|
||||
*/
|
||||
sqlite3_config(SQLITE_CONFIG_LOG, _sqlite_log_callback, imp_dbh);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* "For maximum portability, it is recommended that
|
||||
* applications always invoke sqlite3_initialize()
|
||||
* directly prior to using any other SQLite interface.
|
||||
* Future releases of SQLite may require this."
|
||||
* -- https://sqlite.org/c3ref/initialize.html
|
||||
*/
|
||||
sqlite3_initialize();
|
||||
|
||||
sqlite_trace(dbh, imp_dbh, 3, form("login '%s' (version %s)", dbname, sqlite3_version));
|
||||
|
||||
if (SvROK(attr)) {
|
||||
|
|
23
t/68_sqlite3_log.t
Normal file
23
t/68_sqlite3_log.t
Normal file
|
@ -0,0 +1,23 @@
|
|||
use strict;
|
||||
use warnings;
|
||||
use lib "t/lib";
|
||||
use SQLiteTest qw/connect_ok requires_sqlite/;
|
||||
use Test::More;
|
||||
use if -d ".git", "Test::FailWarnings";
|
||||
|
||||
BEGIN { requires_sqlite('3.6.23') }
|
||||
|
||||
open my $trace_fh, '>', \my $trace_string;
|
||||
|
||||
DBI->trace(3, $trace_fh);
|
||||
|
||||
my $dbh = connect_ok(PrintError => 0, RaiseError => 1);
|
||||
|
||||
eval {
|
||||
$dbh->selectrow_array(q{ SELECT FROM FROM });
|
||||
};
|
||||
|
||||
like $trace_string, qr/sqlite3_log/,
|
||||
'sqlite3_log messages forwarded to DBI tracing mechanism';
|
||||
|
||||
done_testing;
|
Loading…
Add table
Reference in a new issue