R6�W* � @ s d d l Z d d l Z d d l Z d d l Z d d l m Z d d l m Z d d l Te j Z y d d l m Z Wn e k r� d d l Z Yn Xe j e j e � e j e j e � e j e j e � Gd d � d e � Z e d k rd Z d Z n e j � Z e j � Z d S) � N)�ImproperlyConfigured)�sqlite3)�*)�dbapi2c sj e Z d Z d d d d � f d d � Z d d � Z d d � Z e d d � � Z e d d � � Z � S)�BerkeleyDatabaseNc st t t | � j | | d | | �| r8 | j j d � | rT | j j d | f � | rp | j j d | f � d S)N�pragmas�multiversion�on� page_size� cache_size)r r )�superr �__init__�_pragmas�append)�self�databaser r r r �args�kwargs)� __class__� �/berkeleydb.pyr s zBerkeleyDatabase.__init__c K se t s9 d t } t r# | d 7} n | d 7} t | � � t j | | � } d | _ | j | � | S)NzkYour Python SQLite driver (%s) does not appear to have been compiled against the BerkeleyDB SQLite library.zb However, the libsqlite on your system is the BerkeleyDB implementation. Try recompiling pysqlite.z` Additionally, the libsqlite on your system does not appear to be the BerkeleyDB implementation.)�PYSQLITE_BERKELEYDB� berkeleydb�LIBSQLITE_BERKELEYDBr �connectZisolation_levelZ_add_conn_hooks)r r r �message�connr r r �_connect$ s zBerkeleyDatabase._connectc C s� | j r� | j � } xp | j D]e \ } } | d k rm y | j d | | f � Wq� t j k ri Yq� Xq | j d | | f � q W| j � d S)Nr zPRAGMA %s = %s;)r �cursor�executer ZOperationalError�close)r r r Zpragma�valuer r r �_set_pragmas8 s zBerkeleyDatabase._set_pragmasc C s� y d d l m } Wn t k r4 d d l } Yn X| j d � } z | j d � j � } Wd | j � Xx! | D] \ } | d k rr d Sqr Wd S)Nr )r z:memory:zPRAGMA compile_options;�BERKELEY_DBTF)� pysqlite2r �ImportErrorr r r Zfetchallr )�clsr r �resultsZoptionr r r �check_pysqliteJ s zBerkeleyDatabase.check_pysqlitec C sx t j j d � r d } n t j d k r3 d } n d } y t j | � } Wn t k rd d SYn X| j d � d k S) N�winzlibsqlite3.dll�darwinzlibsqlite3.dylibz libsqlite3.soFr# � )�sys�platform� startswith�ctypesZCDLL�OSErrorZsqlite3_compileoption_used)r&