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): |