예제 #1
0
 def _map(row):
     for fnc in args:
         if callable(fnc):
             try:
                 row = fnc(Row(row))
             except Exception:
                 continue
     return Row(row)
예제 #2
0
 def _map(row):
     if callable(fnc):
         try:
             row[alias] = fnc(Row(row))
         except Exception:
             row[alias] = row.get(alias, None)
     else:
         row[alias] = fnc
     return Row(row)
예제 #3
0
 def appendjoin_right_full(self, alias='join', data=[], where=lambda v1, v2: v1 == v2, item={}):
     app = False
     for row in data:
         row[alias] = row.get(alias, [])
         if where(row, item) is True:
             row[alias].append(item)
             self.items.append(Row(row))
         else:
             self.items.append(Row({alias: [item]}))
     if app is False:
         self.items.append(Row({alias: [item]}))
예제 #4
0
 def appendjoin_inner_left_full(self, alias='join', data=[], where=lambda v1, v2: v1 == v2, row={}):
     app = False
     row[alias] = row.get(alias, [])
     for item in data:
         if where(row, item) is True:
             row[alias].append(item)
             self.items.append(Row(row))
         elif type in ['left', 'full']:
             self.items.append(Row(row))
     if app is False and type != 'inner':
         self.items.append(Row(row))
예제 #5
0
 def join_right_full(self, alias='join', data=[], where=lambda v1, v2: v1 == v2, item={}):
     app = False
     for row in data:
         row[alias] = row.get(alias, {})
         if where(row, item) is True:
             tmp = copy.deepcopy(row)
             tmp[alias] = item
             self.items.append(Row(tmp))
         else:
             self.items.append(Row({alias: item}))
     if app is False:
         self.items.append(Row({alias: item}))
예제 #6
0
    def sort(self, **sort):
        order = []
        asc = set()
        desc = set()

        for k in sort.keys():
            if sort[k] in ['0', '-1', 'desc', 'DESC']:
                if len(asc) > 0:
                    order.append([tuple(asc), False])
                    asc = set()
                desc.add(k)
            else:
                if len(desc) > 0:
                    order.append([tuple(desc), True])
                    desc = set()
                asc.add(k)

        if len(asc) > 0:
            order.append([tuple(asc), False])
        if len(desc) > 0:
            order.append([tuple(desc), True])

        for sort in order:
            self.__DATA__ = sorted(self.__DATA__, key=Row.values_getter(*sort[0]), reverse=sort[1])

        return self
예제 #7
0
 def select(self, *args):
     self.__DATA__ = list(map(lambda row: Row(row).select(*args), self.__DATA__))
     self.__SELECT__ = []
     return self