Example #1
0
    def query(self, *args, **kw):
        if len(args) == 1:  # full query string
            queryString = args[0]
        elif len(args) == 2:  # BBB: fields, sObjectType
            queryString = 'select %s from %s' % (args[0], args[1])
            if 'conditionalExpression' in kw:  # BBB: fields, sObjectType, conditionExpression as kwarg
                queryString += ' where %s' % (kw['conditionalExpression'])
        elif len(args) == 3:  # BBB: fields, sObjectType, conditionExpression as positional arg
            whereClause = args[2] and (' where %s' % args[2]) or ''
            queryString = 'select %s from %s%s' % (args[0], args[1], whereClause)
        else:
            raise RuntimeError("Wrong number of arguments to query method.")

        res = BaseClient.query(self, queryString)
        # calculate the union of the sets of record types from each record
        types = reduce(lambda a, b: a|b, [getRecordTypes(r) for r in res[_tPartnerNS.records:]], set())
        if not self.cacheTypeDescriptions:
            self.flushTypeDescriptionsCache()
        new_types = types - set(self.typeDescs.keys())
        if new_types:
            self.typeDescs.update(self.queryTypesDescriptions(new_types))
        data = QueryRecordSet(
            records=[self._extractRecord(r) for r in res[_tPartnerNS.records:]],
            done=_bool(res[_tPartnerNS.done]),
            size=int(str(res[_tPartnerNS.size])),
            queryLocator=str(res[_tPartnerNS.queryLocator]))
        return data
    def query(self, *args, **kw):
        if len(args) == 1:  # full query string
            queryString = args[0]
        elif len(args) == 2:  # BBB: fields, sObjectType
            queryString = 'select %s from %s' % (args[0], args[1])
            if 'conditionalExpression' in kw:  # BBB: fields, sObjectType, conditionExpression as kwarg
                queryString += ' where %s' % (kw['conditionalExpression'])
        elif len(
                args
        ) == 3:  # BBB: fields, sObjectType, conditionExpression as positional arg
            whereClause = args[2] and (' where %s' % args[2]) or ''
            queryString = 'select %s from %s%s' % (args[0], args[1],
                                                   whereClause)
        else:
            raise RuntimeError("Wrong number of arguments to query method.")

        res = BaseClient.query(self, queryString)
        # calculate the union of the sets of record types from each record
        types = reduce(lambda a, b: a | b,
                       [getRecordTypes(r) for r in res[_tPartnerNS.records:]],
                       set())
        if not self.cacheTypeDescriptions:
            self.flushTypeDescriptionsCache()
        new_types = types - set(self.typeDescs.keys())
        if new_types:
            self.typeDescs.update(self.queryTypesDescriptions(new_types))
        data = QueryRecordSet(records=[
            self._extractRecord(r) for r in res[_tPartnerNS.records:]
        ],
                              done=_bool(res[_tPartnerNS.done]),
                              size=int(str(res[_tPartnerNS.size])),
                              queryLocator=str(res[_tPartnerNS.queryLocator]))
        return data
Example #3
0
 def query(self, queryString):
     res = BaseClient.query(self, queryString)
     locator = QueryLocator( str(res[_tPartnerNS.queryLocator]) )
     
     data = dict(queryLocator = locator,
         done = _bool(res[_tPartnerNS.done]),
         records = [self.extractRecord( r )
                    for r in res[_tPartnerNS.records:]],
         size = int(str(res[_tPartnerNS.size]))
         )
     return data
Example #4
0
 def query_old(self, fields, sObjectType, conditionExpression=''):
     #type_data = self.describeSObjects(sObjectType)[0]
     queryString = 'select %s from %s' % (fields, sObjectType)
     if conditionExpression: queryString = '%s where %s' % (queryString, conditionExpression)
     fields = [f.strip() for f in fields.split(',')]
     res = BaseClient.query(self, queryString)
     locator = QueryLocator( str(res[_tPartnerNS.queryLocator]), )
     data = dict(queryLocator = locator,
         done = _bool(res[_tPartnerNS.done]),
         records = [self.extractRecord( r )
                    for r in res[_tPartnerNS.records:]],
         size = int(str(res[_tPartnerNS.size]))
         )
     return data