334 # generate sql queries if we are able to do so |
334 # generate sql queries if we are able to do so |
335 sql, query_args = self._rql_sqlgen.generate(union, args, varmap) |
335 sql, query_args = self._rql_sqlgen.generate(union, args, varmap) |
336 query = 'INSERT INTO %s %s' % (table, sql.encode(self.encoding)) |
336 query = 'INSERT INTO %s %s' % (table, sql.encode(self.encoding)) |
337 self.doexec(session.pool[self.uri], query, |
337 self.doexec(session.pool[self.uri], query, |
338 self.merge_args(args, query_args)) |
338 self.merge_args(args, query_args)) |
339 # XXX commented until it's proved to be necessary |
|
340 # # XXX probably inefficient |
|
341 # tempdata = self._temp_table_data.setdefault(table, set()) |
|
342 # cursor = session.pool[self.uri] |
|
343 # cursor.execute('select * from %s' % table) |
|
344 # for row in cursor.fetchall(): |
|
345 # print 'data', row |
|
346 # tempdata.add(tuple(row)) |
|
347 else: |
339 else: |
348 super(NativeSQLSource, self).flying_insert(table, session, union, |
340 super(NativeSQLSource, self).flying_insert(table, session, union, |
349 args, varmap) |
341 args, varmap) |
350 |
342 |
351 def _manual_insert(self, results, table, session): |
343 def _manual_insert(self, results, table, session): |
352 """insert given result into a temporary table on the system source""" |
344 """insert given result into a temporary table on the system source""" |
353 #print 'manual insert', table, results |
|
354 if not results: |
345 if not results: |
355 return |
346 return |
356 #cursor.execute('select * from %s'%table) |
|
357 #assert len(cursor.fetchall())== 0 |
|
358 encoding = self.encoding |
|
359 # added chr to be sqlite compatible |
|
360 query_args = ['%%(%s)s' % i for i in xrange(len(results[0]))] |
347 query_args = ['%%(%s)s' % i for i in xrange(len(results[0]))] |
361 query = 'INSERT INTO %s VALUES(%s)' % (table, ','.join(query_args)) |
348 query = 'INSERT INTO %s VALUES(%s)' % (table, ','.join(query_args)) |
362 kwargs_list = [] |
349 kwargs_list = [] |
363 # tempdata = self._temp_table_data.setdefault(table, set()) |
|
364 for row in results: |
350 for row in results: |
365 kwargs = {} |
351 kwargs = {} |
366 row = tuple(row) |
352 row = tuple(row) |
367 # XXX commented until it's proved to be necessary |
|
368 # if row in tempdata: |
|
369 # continue |
|
370 # tempdata.add(row) |
|
371 for index, cell in enumerate(row): |
353 for index, cell in enumerate(row): |
372 if type(cell) is unicode: |
354 if isinstance(cell, Binary): |
373 cell = cell.encode(encoding) |
|
374 elif isinstance(cell, Binary): |
|
375 cell = self.binary(cell.getvalue()) |
355 cell = self.binary(cell.getvalue()) |
376 kwargs[str(index)] = cell |
356 kwargs[str(index)] = cell |
377 kwargs_list.append(kwargs) |
357 kwargs_list.append(kwargs) |
378 self.doexecmany(session.pool[self.uri], query, kwargs_list) |
358 self.doexecmany(session.pool[self.uri], query, kwargs_list) |
379 |
359 |