server/sources/native.py
branchstable
changeset 2064 a5cd3a92314a
parent 2056 57d287a2132a
child 2066 2c4bf4ee88a2
equal deleted inserted replaced
2063:fe4278b50388 2064:a5cd3a92314a
   152         self.dbhelper.fti_need_distinct_query = self.indexer.need_distinct
   152         self.dbhelper.fti_need_distinct_query = self.indexer.need_distinct
   153         # sql queries cache
   153         # sql queries cache
   154         self._cache = Cache(repo.config['rql-cache-size'])
   154         self._cache = Cache(repo.config['rql-cache-size'])
   155         self._temp_table_data = {}
   155         self._temp_table_data = {}
   156         self._eid_creation_lock = Lock()
   156         self._eid_creation_lock = Lock()
       
   157         if self.dbdriver == 'sqlite':
       
   158             from cubicweb.server.sources.extlite import ConnectionWrapper
       
   159             self.get_connection = lambda: ConnectionWrapper(self)
       
   160             self.check_connection = lambda cnx: cnx
       
   161             def pool_reset(cnx):
       
   162                 if cnx._cnx is not None:
       
   163                     cnx._cnx.close()
       
   164                     cnx._cnx = None
       
   165             self.pool_reset = pool_reset
       
   166 
       
   167     @property
       
   168     def _sqlcnx(self):
       
   169         # XXX: sqlite connections can only be used in the same thread, so
       
   170         #      create a new one each time necessary. If it appears to be time
       
   171         #      consuming, find another way
       
   172         return SQLAdapterMixIn.get_connection(self)
   157 
   173 
   158     def reset_caches(self):
   174     def reset_caches(self):
   159         """method called during test to reset potential source caches"""
   175         """method called during test to reset potential source caches"""
   160         self._cache = Cache(self.repo.config['rql-cache-size'])
   176         self._cache = Cache(self.repo.config['rql-cache-size'])
   161 
   177 
   169         cursor = session.pool[self.uri]
   185         cursor = session.pool[self.uri]
   170         self.doexec(cursor, sql, args)
   186         self.doexec(cursor, sql, args)
   171         return self.process_result(cursor)
   187         return self.process_result(cursor)
   172 
   188 
   173     def init_creating(self):
   189     def init_creating(self):
       
   190         pool = self.repo._get_pool()
       
   191         pool.pool_set()
   174         # check full text index availibility
   192         # check full text index availibility
   175         pool = self.repo._get_pool()
       
   176         if not self.indexer.has_fti_table(pool['system']):
   193         if not self.indexer.has_fti_table(pool['system']):
   177             self.error('no text index table')
   194             self.error('no text index table')
   178             self.indexer = None
   195             self.indexer = None
       
   196         pool.pool_reset()
   179         self.repo._free_pool(pool)
   197         self.repo._free_pool(pool)
   180 
   198 
   181     def init(self):
   199     def init(self):
   182         self.init_creating()
   200         self.init_creating()
   183         pool = self.repo._get_pool()
   201         pool = self.repo._get_pool()
       
   202         pool.pool_set()
   184         # XXX cubicweb < 2.42 compat
   203         # XXX cubicweb < 2.42 compat
   185         if 'deleted_entities' in self.dbhelper.list_tables(pool['system']):
   204         if 'deleted_entities' in self.dbhelper.list_tables(pool['system']):
   186             self.has_deleted_entitites_table = True
   205             self.has_deleted_entitites_table = True
   187         else:
   206         else:
   188             self.has_deleted_entitites_table = False
   207             self.has_deleted_entitites_table = False
       
   208         pool.pool_reset()
   189         self.repo._free_pool(pool)
   209         self.repo._free_pool(pool)
   190 
   210 
   191     # ISource interface #######################################################
   211     # ISource interface #######################################################
   192 
   212 
   193     def compile_rql(self, rql):
   213     def compile_rql(self, rql):