equal
deleted
inserted
replaced
154 def set_pool(self): |
154 def set_pool(self): |
155 """the session need a pool to execute some queries""" |
155 """the session need a pool to execute some queries""" |
156 if self._closed: |
156 if self._closed: |
157 raise Exception('try to set pool on a closed session') |
157 raise Exception('try to set pool on a closed session') |
158 if self.pool is None: |
158 if self.pool is None: |
|
159 # get pool first to avoid race-condition |
159 self._threaddata.pool = self.repo._get_pool() |
160 self._threaddata.pool = self.repo._get_pool() |
160 try: |
161 try: |
161 self._threaddata.pool.pool_set(self) |
162 self._threaddata.pool.pool_set(self) |
162 except: |
163 except: |
|
164 self._threaddata.pool = None |
163 self.repo._free_pool(self.pool) |
165 self.repo._free_pool(self.pool) |
164 self._threaddata.pool = None |
|
165 raise |
166 raise |
166 self._threads_in_transaction.add(threading.currentThread()) |
167 self._threads_in_transaction.add(threading.currentThread()) |
167 return self._threaddata.pool |
168 return self._threaddata.pool |
168 |
169 |
169 def reset_pool(self): |
170 def reset_pool(self): |
172 # pool may be none if no operation has been done since last commit |
173 # pool may be none if no operation has been done since last commit |
173 # or rollback |
174 # or rollback |
174 if self.pool is not None and self.mode == 'read': |
175 if self.pool is not None and self.mode == 'read': |
175 # even in read mode, we must release the current transaction |
176 # even in read mode, we must release the current transaction |
176 self._threads_in_transaction.remove(threading.currentThread()) |
177 self._threads_in_transaction.remove(threading.currentThread()) |
177 self.repo._free_pool(self.pool) |
|
178 self.pool.pool_reset(self) |
178 self.pool.pool_reset(self) |
179 self._threaddata.pool = None |
179 self._threaddata.pool = None |
|
180 # free pool once everything is done to avoid race-condition |
|
181 self.repo._free_pool(self.pool) |
180 |
182 |
181 def system_sql(self, sql, args=None): |
183 def system_sql(self, sql, args=None): |
182 """return a sql cursor on the system database""" |
184 """return a sql cursor on the system database""" |
183 if not sql.split(None, 1)[0].upper() == 'SELECT': |
185 if not sql.split(None, 1)[0].upper() == 'SELECT': |
184 self.mode = 'write' |
186 self.mode = 'write' |