Changeset 61


Ignore:
Timestamp:
May 25, 2009, 4:10:44 PM (11 years ago)
Author:
marchulsman
Message:

Implementing merge op

Location:
container
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • container/itypes_py.py

    r55 r61  
    237237        if(isinstance(right,IType)): #left not a type, right type
    238238           nr = left.copy()
    239            nr.source = 1
    240239           for i,ltype in enumerate(nr.type):
    241                nr.fieldnr[i] = i
    242240               nr.type[i] = binop_type(ltype,right,operator)
    243241        else: #both not a type
     
    249247                    nr.type = binop_type(left.type[0],right.type[0],operator)
    250248                    print nr.source.shape
    251                     nr.source = ((1,2),)
    252                     nr.fieldnr = ((0,0),)
    253249                else:
    254250                    nr = right.copy()
    255                     nr.source = [(1,2)] * len(nr)
    256251                    for i,rtype in enumerate(nr.type):
    257                         nr.fieldnr[i] = (0,i)
    258252                        nr.type[i] = binop_type(left.type[0],rtype,operator)
    259253                   
     
    261255                if(len(right)==1):
    262256                    nr = left.copy()
    263                     nr.source = [(1,2)] * len(nr)
    264257                    for i,ltype in enumerate(nr.type):
    265                         nr.fieldnr[i] = (i,0)
    266258                        nr.type[i] = binop_type(ltype,right.type[0],operator)
    267259                else:
     
    270262                    else: #both are larger than 1
    271263                        nr = left.copy()
    272                         nr.source = [(1,2)] * len(nr)
    273264                        nr.name = "result"
    274265                        for i,ltype in enumerate(nr.type):
    275                             nr.fieldnr[i] = (i,i)
    276266                            nr.type[i] = binop_type(ltype,right.type[i],operator)
    277267
  • container/opcon.py

    r57 r61  
    8484            pos = pos + source.ncol
    8585       
    86         #find previous nodes, deactivate them
    87         #use id as node description
    88 
    8986        #create param array for new path node, linking to
    9087        #earlier node ids
     
    196193    def __init__(self,left,right):
    197194        #FIXME: check if fields are equal
     195
    198196        if(sleft._invar.register(self,right._invar)):
    199             self.deriveMultipleProps((sleft,sright),(None,None),(0,0),left.ncol,True)
    200             self._fields = left._fields.copy()
    201             self._fields.lastid = self._fields.id
    202             self._fields.id = [itypes_py.idgen() for i in range(left.ncol)]
    203             self._invar.update['_fields'] = self._fields
     197            self._fields = left._activefields.copy()
     198            self._actidx = numpy.arange(len(self._fields),dtype=object).view(xnumpy.XArray)
     199           
     200            lprop = left._getProp(capcon.PathProp)
     201            rprop = right._getProp(capcon.PathProp)
     202           
     203
     204
     205            self._table_attr = itypes_py.createTableAttr(\
     206                              (itypes_py.TA_REDUCE,0,len(self._fields),0),\
     207                              (itypes_py.TA_REDUCE,0,len(self._fields),1))
     208
     209           
     210           
     211
     212            self._pathNodeProps((left,right))
     213            self._invar.save()
    204214        MultiOpCon.__init__(self,left,right)
    205215
     
    209219        if(left._invar.register(self,right._invar)):
    210220            self._fields = numpy.vstack((left._fields,right._fields))
    211             self._invar.update['_fields'] = self._fields
    212             self.deriveMultipleProps((left,right),(None,None),(0,left.ncol),left.ncol+right.ncol,True)
     221            self._fields.colnames = left._fields.colnames
     222            self._actidx =  numpy.hstack((left._actidx, (right._actidx + len(left._fields))))
     223           
     224            self._table_attr = itypes_py.createTableAttr(\
     225                              (itypes_py.TA_FLEX,0,len(left._fields),0),\
     226                              (itypes_py.TA_FLEX,len(left._fields),len(self._fields),1))
     227            self._pathNodeProps((left,right))
     228            self._invar.save(self)
    213229        MultiOpCon.__init__(self,left,right)
    214230
     
    219235            self._fields = numpy.vstack((left._fields,right._fields))
    220236            self._fields.colnames = left._fields.colnames
    221             self._fields.source = [(1,2)] * len(self._fields)
    222             self._fields.fieldnr = numpy.hstack((numpy.arange(len(left._fields)),numpy.arange(len(right._fields))))
    223237            self._actidx =  numpy.hstack((left._actidx, (right._actidx + len(left._fields))))
    224238            self._table_attr = itypes_py.createTableAttr(\
    225                               (itypes_py.TA_FLEX | itypes_py.TA_LEASTONE,0,left.ncol,0),\
    226                               (itypes_py.TA_FLEX | itypes_py.TA_LEASTONE,left.ncol,len(self._fields),1))
     239                              (itypes_py.TA_FLEX | itypes_py.TA_LEASTONE,0,len(left._fields),0),\
     240                              (itypes_py.TA_FLEX | itypes_py.TA_LEASTONE,len(left._fields),len(self._fields),1))
    227241           
    228242            if(operator == "LEFT JOIN"):
     
    345359        if(source._invar.register(self,ivkey)):
    346360            self._fields = source._fields.copy()
    347             self._fields.source = [(1,2)] * len(self._fields)
    348             self._fields.fieldnr = [(fnr,0) for fnr in range(len(self._fields))]
    349361            self._table_attr = self.tbattr
    350362            self._actidx = source._actidx
     
    367379           #create new fields array
    368380           self._fields = source._fields.copy()
    369            self._fields.fieldnr = range(len(self._fields))
    370            self._fields.source = 1
    371381
    372382           #apply col_constraint to currently active fields
     
    422432   
    423433class PlusPrefixOpCon(UnaryOpCon):
     434    tbattr = itypes_py.createTableAttr((itypes_py.TA_FLEX,0,-1,0))
    424435    def __init__(self, source):
    425         self.source = source
    426         if(source._invar.register(self)):
    427             self.deriveMultipleProps((source,),(None,),(0,),source.ncol,True,False)
    428             self._fields = source._fields.copy()
    429             self._fields.lastid = self._fields.id
    430             self._fields.id = [itypes_py.idgen() for i in range(source.ncol)]
    431             self._invar.update['_fields'] = self._fields
     436       self._fields = source._fields
     437       self._actidx = source._actidx
     438       self._props = source._props
     439       self.source = source
     440       self._table_attr = self.tbattr
     441       source._invar.register(self)
     442           
    432443
    433444class AnyCon(UnaryOpCon):
  • container/qg_execute.py

    r57 r61  
    7272        return QueryResult(data,lr.nrow,ncol)
    7373
     74    def visitMergeCon(self,node):
     75        (lr,rr) = self.visitsources(node)
     76        assert(lr.nrow == rr.nrow), "Merge of fields with unequal number of fields is invalid"
     77        return QueryResult(data=numpy.hstack((lr.data,rr.data)),ncol=lr.ncol+rr.ncol,nrow=lr.nrow)
     78   
    7479    def visitPySrcCon(self,node):
    7580        (res,) = self.visitsources(node)
Note: See TracChangeset for help on using the changeset viewer.