server/sources/native.py
changeset 2625 d6012db7b93e
parent 2620 de68f84b8f54
child 2627 d710278e0c1c
--- a/server/sources/native.py	Sat Aug 01 01:24:42 2009 +0200
+++ b/server/sources/native.py	Sat Aug 01 16:13:40 2009 +0200
@@ -28,7 +28,7 @@
 from cubicweb.server.sqlutils import (SQL_PREFIX, SQLAdapterMixIn,
                                       sql_source_backup, sql_source_restore)
 from cubicweb.server.rqlannotation import set_qdata
-from cubicweb.server.sources import AbstractSource
+from cubicweb.server.sources import AbstractSource, dbg_st_search, dbg_results
 from cubicweb.server.sources.rql2sql import SQLGenerator
 
 
@@ -59,6 +59,7 @@
     def fetchone(self):
         return self.cu.fetchone()
 
+
 def make_schema(selected, solution, table, typemap):
     """return a sql schema to store RQL query result"""
     sql = []
@@ -75,6 +76,7 @@
             sql.append('%s %s' % (name, typemap['Int']))
     return ','.join(sql), varmap
 
+
 def _modified_sql(table, etypes):
     # XXX protect against sql injection
     if len(etypes) > 1:
@@ -304,14 +306,7 @@
         necessary to fetch the results (but not the results themselves)
         may be cached using this key.
         """
-        if server.DEBUG & server.DBG_RQL:
-            print 'RQL FOR NATIVE SOURCE %s: %s' % (self.uri, union.as_string())
-            if varmap:
-                print 'using varmap', varmap
-            if server.DEBUG & server.DBG_MORE:
-                print 'args', args
-                print 'cache key', cachekey
-                print 'solutions', ','.join(str(s.solutions) for s in union.children)
+        assert dbg_st_search(self.uri, union, varmap, args, cachekey)
         # remember number of actually selected term (sql generation may append some)
         if cachekey is None:
             self.no_cache += 1
@@ -336,10 +331,9 @@
             self.info("request failed '%s' ... retry with a new cursor", sql)
             session.pool.reconnect(self)
             cursor = self.doexec(session, sql, args)
-        res = self.process_result(cursor)
-        if server.DEBUG & (server.DBG_SQL | server.DBG_RQL):
-            print '------>', res
-        return res
+        results = self.process_result(cursor)
+        assert dbg_results(results)
+        return results
 
     def flying_insert(self, table, session, union, args=None, varmap=None):
         """similar as .syntax_tree_search, but inserts data in the
@@ -347,23 +341,18 @@
         source whose the given cursor come from). If not possible,
         inserts all data by calling .executemany().
         """
-        if self.uri == 'system':
-            if server.DEBUG & server.DBG_RQL:
-                print 'FLYING RQL FOR SOURCE %s: %s', self.uri, union.as_string()
-                if varmap:
-                    print 'USING VARMAP', varmap
-                if server.DEBUG & server.DBG_MORE:
-                    print 'SOLUTIONS', ','.join(str(s.solutions) for s in union.children)
-            # generate sql queries if we are able to do so
-            sql, query_args = self._rql_sqlgen.generate(union, args, varmap)
-            query = 'INSERT INTO %s %s' % (table, sql.encode(self.encoding))
-            self.doexec(session, query, self.merge_args(args, query_args))
-        else:
-            super(NativeSQLSource, self).flying_insert(table, session, union,
-                                                       args, varmap)
+        assert dbg_st_search(
+            uri, union, varmap, args,
+            prefix='ON THE FLY temp data insertion into %s from' % table)
+        # generate sql queries if we are able to do so
+        sql, query_args = self._rql_sqlgen.generate(union, args, varmap)
+        query = 'INSERT INTO %s %s' % (table, sql.encode(self.encoding))
+        self.doexec(session, query, self.merge_args(args, query_args))
 
     def _manual_insert(self, results, table, session):
         """insert given result into a temporary table on the system source"""
+        if server.DEBUG & server.DBG_RQL:
+            print '  manual insertion of', res, 'into', table
         if not results:
             return
         query_args = ['%%(%s)s' % i for i in xrange(len(results[0]))]
@@ -436,7 +425,10 @@
         """
         cursor = session.pool[self.uri]
         if server.DEBUG & server.DBG_SQL:
-            print 'exec', query, args
+            cnx = session.pool.connection(self.uri)
+            # getattr to get the actual connection if cnx is a ConnectionWrapper
+            # instance
+            print 'exec', query, args, getattr(cnx, '_cnx', cnx)
         try:
             # str(query) to avoid error if it's an unicode string
             cursor.execute(str(query), args)