parent
52d89b83c3
commit
9df3630f18
File diff suppressed because it is too large
Load Diff
@ -1,277 +0,0 @@ |
|||||||
#-*- coding: utf-8 -*- |
|
||||||
# pysqlite2/dbapi.py: pysqlite DB-API module |
|
||||||
# |
|
||||||
# Copyright (C) 2007-2008 Gerhard Häring <gh@ghaering.de> |
|
||||||
# |
|
||||||
# This file is part of pysqlite. |
|
||||||
# |
|
||||||
# This software is provided 'as-is', without any express or implied |
|
||||||
# warranty. In no event will the authors be held liable for any damages |
|
||||||
# arising from the use of this software. |
|
||||||
# |
|
||||||
# Permission is granted to anyone to use this software for any purpose, |
|
||||||
# including commercial applications, and to alter it and redistribute it |
|
||||||
# freely, subject to the following restrictions: |
|
||||||
# |
|
||||||
# 1. The origin of this software must not be misrepresented; you must not |
|
||||||
# claim that you wrote the original software. If you use this software |
|
||||||
# in a product, an acknowledgment in the product documentation would be |
|
||||||
# appreciated but is not required. |
|
||||||
# 2. Altered source versions must be plainly marked as such, and must not be |
|
||||||
# misrepresented as being the original software. |
|
||||||
# 3. This notice may not be removed or altered from any source distribution. |
|
||||||
# |
|
||||||
# Note: This software has been modified for use in PyPy. |
|
||||||
|
|
||||||
import sys, os |
|
||||||
from cffi import FFI as _FFI |
|
||||||
|
|
||||||
_ffi = _FFI() |
|
||||||
|
|
||||||
_ffi.cdef(""" |
|
||||||
#define SQLITE_OK ... |
|
||||||
#define SQLITE_ERROR ... |
|
||||||
#define SQLITE_INTERNAL ... |
|
||||||
#define SQLITE_PERM ... |
|
||||||
#define SQLITE_ABORT ... |
|
||||||
#define SQLITE_BUSY ... |
|
||||||
#define SQLITE_LOCKED ... |
|
||||||
#define SQLITE_NOMEM ... |
|
||||||
#define SQLITE_READONLY ... |
|
||||||
#define SQLITE_INTERRUPT ... |
|
||||||
#define SQLITE_IOERR ... |
|
||||||
#define SQLITE_CORRUPT ... |
|
||||||
#define SQLITE_NOTFOUND ... |
|
||||||
#define SQLITE_FULL ... |
|
||||||
#define SQLITE_CANTOPEN ... |
|
||||||
#define SQLITE_PROTOCOL ... |
|
||||||
#define SQLITE_EMPTY ... |
|
||||||
#define SQLITE_SCHEMA ... |
|
||||||
#define SQLITE_TOOBIG ... |
|
||||||
#define SQLITE_CONSTRAINT ... |
|
||||||
#define SQLITE_MISMATCH ... |
|
||||||
#define SQLITE_MISUSE ... |
|
||||||
#define SQLITE_NOLFS ... |
|
||||||
#define SQLITE_AUTH ... |
|
||||||
#define SQLITE_FORMAT ... |
|
||||||
#define SQLITE_RANGE ... |
|
||||||
#define SQLITE_NOTADB ... |
|
||||||
#define SQLITE_ROW ... |
|
||||||
#define SQLITE_DONE ... |
|
||||||
#define SQLITE_INTEGER ... |
|
||||||
#define SQLITE_FLOAT ... |
|
||||||
#define SQLITE_BLOB ... |
|
||||||
#define SQLITE_NULL ... |
|
||||||
#define SQLITE_TEXT ... |
|
||||||
#define SQLITE3_TEXT ... |
|
||||||
|
|
||||||
static void *const SQLITE_TRANSIENT; |
|
||||||
#define SQLITE_UTF8 ... |
|
||||||
|
|
||||||
#define SQLITE_DENY ... |
|
||||||
#define SQLITE_IGNORE ... |
|
||||||
|
|
||||||
#define SQLITE_CREATE_INDEX ... |
|
||||||
#define SQLITE_CREATE_TABLE ... |
|
||||||
#define SQLITE_CREATE_TEMP_INDEX ... |
|
||||||
#define SQLITE_CREATE_TEMP_TABLE ... |
|
||||||
#define SQLITE_CREATE_TEMP_TRIGGER ... |
|
||||||
#define SQLITE_CREATE_TEMP_VIEW ... |
|
||||||
#define SQLITE_CREATE_TRIGGER ... |
|
||||||
#define SQLITE_CREATE_VIEW ... |
|
||||||
#define SQLITE_DELETE ... |
|
||||||
#define SQLITE_DROP_INDEX ... |
|
||||||
#define SQLITE_DROP_TABLE ... |
|
||||||
#define SQLITE_DROP_TEMP_INDEX ... |
|
||||||
#define SQLITE_DROP_TEMP_TABLE ... |
|
||||||
#define SQLITE_DROP_TEMP_TRIGGER ... |
|
||||||
#define SQLITE_DROP_TEMP_VIEW ... |
|
||||||
#define SQLITE_DROP_TRIGGER ... |
|
||||||
#define SQLITE_DROP_VIEW ... |
|
||||||
#define SQLITE_INSERT ... |
|
||||||
#define SQLITE_PRAGMA ... |
|
||||||
#define SQLITE_READ ... |
|
||||||
#define SQLITE_SELECT ... |
|
||||||
#define SQLITE_TRANSACTION ... |
|
||||||
#define SQLITE_UPDATE ... |
|
||||||
#define SQLITE_ATTACH ... |
|
||||||
#define SQLITE_DETACH ... |
|
||||||
#define SQLITE_ALTER_TABLE ... |
|
||||||
#define SQLITE_REINDEX ... |
|
||||||
#define SQLITE_ANALYZE ... |
|
||||||
#define SQLITE_CREATE_VTABLE ... |
|
||||||
#define SQLITE_DROP_VTABLE ... |
|
||||||
#define SQLITE_FUNCTION ... |
|
||||||
|
|
||||||
const char *sqlite3_libversion(void); |
|
||||||
|
|
||||||
typedef ... sqlite3; |
|
||||||
typedef ... sqlite3_stmt; |
|
||||||
typedef ... sqlite3_context; |
|
||||||
typedef ... sqlite3_value; |
|
||||||
typedef ... sqlite3_backup; |
|
||||||
typedef int64_t sqlite3_int64; |
|
||||||
typedef uint64_t sqlite3_uint64; |
|
||||||
|
|
||||||
int sqlite3_open( |
|
||||||
const char *filename, /* Database filename (UTF-8) */ |
|
||||||
sqlite3 **ppDb /* OUT: SQLite db handle */ |
|
||||||
); |
|
||||||
|
|
||||||
int sqlite3_close(sqlite3 *); |
|
||||||
|
|
||||||
int sqlite3_busy_timeout(sqlite3*, int ms); |
|
||||||
int sqlite3_prepare_v2( |
|
||||||
sqlite3 *db, /* Database handle */ |
|
||||||
const char *zSql, /* SQL statement, UTF-8 encoded */ |
|
||||||
int nByte, /* Maximum length of zSql in bytes. */ |
|
||||||
sqlite3_stmt **ppStmt, /* OUT: Statement handle */ |
|
||||||
const char **pzTail /* OUT: Pointer to unused portion of zSql */ |
|
||||||
); |
|
||||||
int sqlite3_finalize(sqlite3_stmt *pStmt); |
|
||||||
int sqlite3_data_count(sqlite3_stmt *pStmt); |
|
||||||
int sqlite3_column_count(sqlite3_stmt *pStmt); |
|
||||||
const char *sqlite3_column_name(sqlite3_stmt*, int N); |
|
||||||
int sqlite3_get_autocommit(sqlite3*); |
|
||||||
int sqlite3_reset(sqlite3_stmt *pStmt); |
|
||||||
int sqlite3_step(sqlite3_stmt*); |
|
||||||
int sqlite3_errcode(sqlite3 *db); |
|
||||||
const char *sqlite3_errmsg(sqlite3*); |
|
||||||
int sqlite3_changes(sqlite3*); |
|
||||||
|
|
||||||
int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*)); |
|
||||||
int sqlite3_bind_double(sqlite3_stmt*, int, double); |
|
||||||
int sqlite3_bind_int(sqlite3_stmt*, int, int); |
|
||||||
int sqlite3_bind_int64(sqlite3_stmt*, int, sqlite3_int64); |
|
||||||
int sqlite3_bind_null(sqlite3_stmt*, int); |
|
||||||
int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*)); |
|
||||||
int sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int, void(*)(void*)); |
|
||||||
int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*); |
|
||||||
int sqlite3_bind_zeroblob(sqlite3_stmt*, int, int n); |
|
||||||
|
|
||||||
const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); |
|
||||||
int sqlite3_column_bytes(sqlite3_stmt*, int iCol); |
|
||||||
double sqlite3_column_double(sqlite3_stmt*, int iCol); |
|
||||||
int sqlite3_column_int(sqlite3_stmt*, int iCol); |
|
||||||
sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol); |
|
||||||
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol); |
|
||||||
const void *sqlite3_column_text16(sqlite3_stmt*, int iCol); |
|
||||||
int sqlite3_column_type(sqlite3_stmt*, int iCol); |
|
||||||
const char *sqlite3_column_decltype(sqlite3_stmt*,int); |
|
||||||
|
|
||||||
void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*); |
|
||||||
int sqlite3_create_collation( |
|
||||||
sqlite3*, |
|
||||||
const char *zName, |
|
||||||
int eTextRep, |
|
||||||
void*, |
|
||||||
int(*xCompare)(void*,int,const void*,int,const void*) |
|
||||||
); |
|
||||||
int sqlite3_set_authorizer( |
|
||||||
sqlite3*, |
|
||||||
int (*xAuth)(void*,int,const char*,const char*,const char*,const char*), |
|
||||||
void *pUserData |
|
||||||
); |
|
||||||
int sqlite3_create_function( |
|
||||||
sqlite3 *db, |
|
||||||
const char *zFunctionName, |
|
||||||
int nArg, |
|
||||||
int eTextRep, |
|
||||||
void *pApp, |
|
||||||
void (*xFunc)(sqlite3_context*,int,sqlite3_value**), |
|
||||||
void (*xStep)(sqlite3_context*,int,sqlite3_value**), |
|
||||||
void (*xFinal)(sqlite3_context*) |
|
||||||
); |
|
||||||
void *sqlite3_aggregate_context(sqlite3_context*, int nBytes); |
|
||||||
|
|
||||||
sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*); |
|
||||||
int sqlite3_bind_parameter_count(sqlite3_stmt*); |
|
||||||
const char *sqlite3_bind_parameter_name(sqlite3_stmt*, int); |
|
||||||
int sqlite3_total_changes(sqlite3*); |
|
||||||
|
|
||||||
int sqlite3_prepare( |
|
||||||
sqlite3 *db, /* Database handle */ |
|
||||||
const char *zSql, /* SQL statement, UTF-8 encoded */ |
|
||||||
int nByte, /* Maximum length of zSql in bytes. */ |
|
||||||
sqlite3_stmt **ppStmt, /* OUT: Statement handle */ |
|
||||||
const char **pzTail /* OUT: Pointer to unused portion of zSql */ |
|
||||||
); |
|
||||||
|
|
||||||
void sqlite3_result_blob(sqlite3_context*, const void*, int, void(*)(void*)); |
|
||||||
void sqlite3_result_double(sqlite3_context*, double); |
|
||||||
void sqlite3_result_error(sqlite3_context*, const char*, int); |
|
||||||
void sqlite3_result_error16(sqlite3_context*, const void*, int); |
|
||||||
void sqlite3_result_error_toobig(sqlite3_context*); |
|
||||||
void sqlite3_result_error_nomem(sqlite3_context*); |
|
||||||
void sqlite3_result_error_code(sqlite3_context*, int); |
|
||||||
void sqlite3_result_int(sqlite3_context*, int); |
|
||||||
void sqlite3_result_int64(sqlite3_context*, sqlite3_int64); |
|
||||||
void sqlite3_result_null(sqlite3_context*); |
|
||||||
void sqlite3_result_text(sqlite3_context*, const char*, int, void(*)(void*)); |
|
||||||
void sqlite3_result_text16(sqlite3_context*, const void*, int, void(*)(void*)); |
|
||||||
void sqlite3_result_text16le(sqlite3_context*,const void*, int,void(*)(void*)); |
|
||||||
void sqlite3_result_text16be(sqlite3_context*,const void*, int,void(*)(void*)); |
|
||||||
void sqlite3_result_value(sqlite3_context*, sqlite3_value*); |
|
||||||
void sqlite3_result_zeroblob(sqlite3_context*, int n); |
|
||||||
|
|
||||||
const void *sqlite3_value_blob(sqlite3_value*); |
|
||||||
int sqlite3_value_bytes(sqlite3_value*); |
|
||||||
int sqlite3_value_bytes16(sqlite3_value*); |
|
||||||
double sqlite3_value_double(sqlite3_value*); |
|
||||||
int sqlite3_value_int(sqlite3_value*); |
|
||||||
sqlite3_int64 sqlite3_value_int64(sqlite3_value*); |
|
||||||
const unsigned char *sqlite3_value_text(sqlite3_value*); |
|
||||||
const void *sqlite3_value_text16(sqlite3_value*); |
|
||||||
const void *sqlite3_value_text16le(sqlite3_value*); |
|
||||||
const void *sqlite3_value_text16be(sqlite3_value*); |
|
||||||
int sqlite3_value_type(sqlite3_value*); |
|
||||||
int sqlite3_value_numeric_type(sqlite3_value*); |
|
||||||
sqlite3_backup* sqlite3_backup_init(sqlite3*, const char*, sqlite3*, const char*); |
|
||||||
int sqlite3_backup_step(sqlite3_backup*, int); |
|
||||||
int sqlite3_backup_finish(sqlite3_backup*); |
|
||||||
int sqlite3_backup_remaining(sqlite3_backup*); |
|
||||||
int sqlite3_backup_pagecount(sqlite3_backup*); |
|
||||||
int sqlite3_sleep(int); |
|
||||||
""") |
|
||||||
|
|
||||||
|
|
||||||
def _has_load_extension(): |
|
||||||
"""Only available since 3.3.6""" |
|
||||||
unverified_ffi = _FFI() |
|
||||||
unverified_ffi.cdef(""" |
|
||||||
typedef ... sqlite3; |
|
||||||
int sqlite3_enable_load_extension(sqlite3 *db, int onoff); |
|
||||||
""") |
|
||||||
libname = 'sqlite3' |
|
||||||
if sys.platform == 'win32': |
|
||||||
import os |
|
||||||
_libname = os.path.join(os.path.dirname(sys.executable), libname) |
|
||||||
if os.path.exists(_libname + '.dll'): |
|
||||||
libname = _libname |
|
||||||
unverified_lib = unverified_ffi.dlopen(libname) |
|
||||||
return hasattr(unverified_lib, 'sqlite3_enable_load_extension') |
|
||||||
|
|
||||||
if _has_load_extension(): |
|
||||||
_ffi.cdef("int sqlite3_enable_load_extension(sqlite3 *db, int onoff);") |
|
||||||
|
|
||||||
if sys.platform.startswith('freebsd'): |
|
||||||
_localbase = os.environ.get('LOCALBASE', '/usr/local') |
|
||||||
extra_args = dict( |
|
||||||
#libraries=['sqlite3'], |
|
||||||
libraries=['pthread','dl'], |
|
||||||
include_dirs=[os.path.join(_localbase, 'include')]+['.'], |
|
||||||
sources=['sqlite3.c'],define_macros=[('SQLITE_ENABLE_RTREE','1'),('SQLITE_ENABLE_JSON1','1'),('SQLITE_ENABLE_STATS3','1')], |
|
||||||
library_dirs=[os.path.join(_localbase, 'lib')] |
|
||||||
) |
|
||||||
else: |
|
||||||
extra_args = dict( |
|
||||||
libraries=['pthread','dl'], |
|
||||||
include_dirs=['.'], |
|
||||||
sources=['sqlite3.c'],define_macros=[('SQLITE_ENABLE_RTREE','1'),('SQLITE_ENABLE_JSON1','1'),('SQLITE_ENABLE_STATS3','1')] |
|
||||||
) |
|
||||||
|
|
||||||
_ffi.set_source("_sqlite3_cffi", "#include <sqlite3.h>", **extra_args) |
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__": |
|
||||||
_ffi.compile() |
|
||||||
Loading…
Reference in new issue