server/sources/native.py
branchstable
changeset 2066 2c4bf4ee88a2
parent 2064 a5cd3a92314a
child 2072 8008e8812d76
equal deleted inserted replaced
2065:f9f4bc048ec5 2066:2c4bf4ee88a2
   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