server/mssteps.py
changeset 5768 1e73a466aa69
parent 5426 0d4853a6e5ee
child 5811 e77cea9721e7
equal deleted inserted replaced
5766:c397819f2482 5768:1e73a466aa69
   138 
   138 
   139         #self.inputmap = inputmap
   139         #self.inputmap = inputmap
   140 
   140 
   141     def mytest_repr(self):
   141     def mytest_repr(self):
   142         """return a representation of this step suitable for test"""
   142         """return a representation of this step suitable for test"""
   143         sel = self.select.selection
       
   144         restr = self.select.where
       
   145         self.select.selection = self.selection
       
   146         self.select.where = None
       
   147         rql = self.select.as_string(kwargs=self.plan.args)
       
   148         self.select.selection = sel
       
   149         self.select.where = restr
       
   150         try:
   143         try:
   151             # rely on a monkey patch (cf unittest_querier)
   144             # rely on a monkey patch (cf unittest_querier)
   152             table = self.plan.tablesinorder[self.table]
   145             table = self.plan.tablesinorder[self.table]
   153             outputtable = self.outputtable and self.plan.tablesinorder[self.outputtable]
   146             outputtable = self.outputtable and self.plan.tablesinorder[self.outputtable]
   154         except AttributeError:
   147         except AttributeError:
   155             # not monkey patched
   148             # not monkey patched
   156             table = self.table
   149             table = self.table
   157             outputtable = self.outputtable
   150             outputtable = self.outputtable
   158         return (self.__class__.__name__, rql, self.limit, self.offset, table,
   151         sql = self.get_sql().replace(self.table, table)
   159                 outputtable)
   152         return (self.__class__.__name__, sql, outputtable)
   160 
   153 
   161     def execute(self):
   154     def execute(self):
   162         """execute this step"""
   155         """execute this step"""
   163         self.execute_children()
   156         self.execute_children()
       
   157         sql = self.get_sql()
       
   158         if self.outputtable:
       
   159             self.plan.create_temp_table(self.outputtable)
       
   160             sql = 'INSERT INTO %s %s' % (self.outputtable, sql)
       
   161         return self.plan.sqlexec(sql, self.plan.args)
       
   162 
       
   163     def get_sql(self):
   164         self.inputmap = inputmap = self.children[-1].outputmap
   164         self.inputmap = inputmap = self.children[-1].outputmap
   165         # get the select clause
   165         # get the select clause
   166         clause = []
   166         clause = []
   167         for i, term in enumerate(self.selection):
   167         for i, term in enumerate(self.selection):
   168             try:
   168             try:
   221             sql.append('ORDER BY %s' % ', '.join(clause))
   221             sql.append('ORDER BY %s' % ', '.join(clause))
   222         if self.limit:
   222         if self.limit:
   223             sql.append('LIMIT %s' % self.limit)
   223             sql.append('LIMIT %s' % self.limit)
   224         if self.offset:
   224         if self.offset:
   225             sql.append('OFFSET %s' % self.offset)
   225             sql.append('OFFSET %s' % self.offset)
   226         #print 'DATA', plan.sqlexec('SELECT * FROM %s' % self.table, None)
   226         return ' '.join(sql)
   227         sql = ' '.join(sql)
       
   228         if self.outputtable:
       
   229             self.plan.create_temp_table(self.outputtable)
       
   230             sql = 'INSERT INTO %s %s' % (self.outputtable, sql)
       
   231         return self.plan.sqlexec(sql, self.plan.args)
       
   232 
   227 
   233     def visit_function(self, function):
   228     def visit_function(self, function):
   234         """generate SQL name for a function"""
   229         """generate SQL name for a function"""
   235         return '%s(%s)' % (function.name,
   230         try:
   236                            ','.join(c.accept(self) for c in function.children))
   231             return self.children[0].outputmap[str(function)]
       
   232         except KeyError:
       
   233             return '%s(%s)' % (function.name,
       
   234                                ','.join(c.accept(self) for c in function.children))
   237 
   235 
   238     def visit_variableref(self, variableref):
   236     def visit_variableref(self, variableref):
   239         """get the sql name for a variable reference"""
   237         """get the sql name for a variable reference"""
   240         try:
   238         try:
   241             return self.inputmap[variableref.name]
   239             return self.inputmap[variableref.name]