DBD-SQLite

 view release on metacpan or  search on metacpan

dbdimp.h  view on Meta::CPAN


#ifndef _DBDIMP_H
#define _DBDIMP_H   1

#include "SQLiteXS.h"
#include "sqlite3.h"

#define MY_CXT_KEY "DBD::SQLite::_guts" XS_VERSION

typedef enum {
    DBD_SQLITE_STRING_MODE_PV,
    DBD_SQLITE_STRING_MODE_BYTES,

    /* Leave space here so that we can use DBD_SQLITE_STRING_MODE_UNICODE_ANY
       as a means of checking for any unicode mode. */

    DBD_SQLITE_STRING_MODE_UNICODE_NAIVE = 4,
    DBD_SQLITE_STRING_MODE_UNICODE_FALLBACK,
    DBD_SQLITE_STRING_MODE_UNICODE_STRICT,

    _DBD_SQLITE_STRING_MODE_COUNT,
} dbd_sqlite_string_mode_t;

#define DBD_SQLITE_STRING_MODE_UNICODE_ANY DBD_SQLITE_STRING_MODE_UNICODE_NAIVE

typedef struct {
    dbd_sqlite_string_mode_t last_dbh_string_mode;
} my_cxt_t;

#define PERL_UNICODE_DOES_NOT_WORK_WELL           \
    (PERL_REVISION <= 5) && ((PERL_VERSION < 8)   \
 || (PERL_VERSION == 8 && PERL_SUBVERSION < 5))

/* 30 second timeout by default */
#define SQL_TIMEOUT 30000

#ifndef sqlite3_int64
#define sqlite3_int64 sqlite_int64
#endif

#define DBD_SQLITE_UTF8_DECODE_NAIVE(sv) SvUTF8_on(sv)

#define DBD_SQLITE_UTF8_DECODE_CHECKED(sv, onfail) ( \
    is_utf8_string((U8*) SvPVX(sv), SvCUR(sv)) \
        ? SvUTF8_on(sv) \
        : onfail("Received invalid UTF-8 from SQLite; cannot decode!") \
)

#define DBD_SQLITE_UTF8_DECODE_WITH_FALLBACK(sv) ( \
    DBD_SQLITE_UTF8_DECODE_CHECKED(sv, warn) \
)

#define DBD_SQLITE_UTF8_DECODE_STRICT(sv) ( \
    DBD_SQLITE_UTF8_DECODE_CHECKED(sv, croak) \
)

#define DBD_SQLITE_PREP_SV_FOR_SQLITE(sv, string_mode) STMT_START {     \
    if (string_mode & DBD_SQLITE_STRING_MODE_UNICODE_ANY) {             \
        sv_utf8_upgrade(sv);                                            \
    }                                                                   \
    else if (string_mode == DBD_SQLITE_STRING_MODE_BYTES) {    \
        sv_utf8_downgrade(sv, 0);                                       \
    }                                                                   \
} STMT_END

#define DBD_SQLITE_UTF8_DECODE_IF_NEEDED(sv, string_mode) ( \
    string_mode == DBD_SQLITE_STRING_MODE_UNICODE_NAIVE         \
        ? DBD_SQLITE_UTF8_DECODE_NAIVE(sv)                      \
    : string_mode == DBD_SQLITE_STRING_MODE_UNICODE_FALLBACK \
        ? DBD_SQLITE_UTF8_DECODE_WITH_FALLBACK(sv) \
    : string_mode == DBD_SQLITE_STRING_MODE_UNICODE_STRICT \
        ? DBD_SQLITE_UTF8_DECODE_STRICT(sv) \
    : 0 \
)



( run in 1.630 second using v1.01-cache-2.11-cpan-140bd7fdf52 )