def query(self, q): q = wrap(q) output = self if is_aggs(q): output = list_aggs(output.data, q) else: # SETOP try: if q.filter != None or q.esfilter != None: Log.error("use 'where' clause") except AttributeError: pass if q.where is not TRUE and not q.where is TRUE: output = output.filter(q.where) if q.sort: output = output.sort(q.sort) if q.select: output = output.select(q.select) #TODO: ADD EXTRA COLUMN DESCRIPTIONS TO RESULTING SCHEMA for param in q.window: output.window(param) if q.format: if q.format == "list": return Data(data=output.data) elif q.format == "table": head = list(set(k for r in output.data for k in r.keys())) data = [(r[h] for h in head) for r in output.data] return Data(header=head, data=data) else: Log.error("unknown format {{format}}", format=q.format) else: return output
def run(query, container=Null): """ THIS FUNCTION IS SIMPLY SWITCHING BASED ON THE query["from"] CONTAINER, BUT IT IS ALSO PROCESSING A list CONTAINER; SEPARATE TO A ListContainer """ if container == None: container = wrap(query)['from'] query_op = QueryOp.wrap(query, container=container, namespace=container.schema) else: query_op = QueryOp.wrap(query, container, container.namespace) if container == None: from jx_python.containers.list_usingPythonList import DUAL return DUAL.query(query_op) elif isinstance(container, Container): return container.query(query_op) elif isinstance(container, (list, set) + generator_types): container = wrap(list(container)) elif isinstance(container, Cube): if is_aggs(query_op): return cube_aggs(container, query_op) elif isinstance(container, QueryOp): container = run(container) else: Log.error("Do not know how to handle {{type}}", type=container.__class__.__name__) if is_aggs(query_op): container = list_aggs(container, query_op) else: # SETOP if query_op.where is not TRUE: container = filter(container, query_op.where) if query_op.sort: container = sort(container, query_op.sort, already_normalized=True) if query_op.select: container = select(container, query_op.select) if query_op.window: if isinstance(container, Cube): container = list(container.values()) for param in query_op.window: window(container, param) # AT THIS POINT frum IS IN LIST FORMAT, NOW PACKAGE RESULT if query_op.format == "cube": container = convert.list2cube(container) elif query_op.format == "table": container = convert.list2table(container) container.meta.format = "table" else: container = wrap({"meta": {"format": "list"}, "data": container}) return container
def run(query, container=Null): """ THIS FUNCTION IS SIMPLY SWITCHING BASED ON THE query["from"] CONTAINER, BUT IT IS ALSO PROCESSING A list CONTAINER; SEPARATE TO A ListContainer """ if container == None: container = wrap(query)['from'] query_op = QueryOp.wrap(query, container=container, namespace=container.schema) else: query_op = QueryOp.wrap(query, container, container.namespace) if container == None: from jx_python.containers.list_usingPythonList import DUAL return DUAL.query(query_op) elif isinstance(container, Container): return container.query(query_op) elif isinstance(container, (list, set) + generator_types): container = wrap(list(container)) elif isinstance(container, Cube): if is_aggs(query_op): return cube_aggs(container, query_op) elif isinstance(container, QueryOp): container = run(container) else: Log.error("Do not know how to handle {{type}}", type=container.__class__.__name__) if is_aggs(query_op): container = list_aggs(container, query_op) else: # SETOP if query_op.where is not TRUE: container = filter(container, query_op.where) if query_op.sort: container = sort(container, query_op.sort, already_normalized=True) if query_op.select: container = select(container, query_op.select) if query_op.window: if isinstance(container, Cube): container = list(container.values()) for param in query_op.window: window(container, param) # AT THIS POINT frum IS IN LIST FORMAT, NOW PACKAGE RESULT if query_op.format == "cube": container = convert.list2cube(container) elif query_op.format == "table": container = convert.list2table(container) container.meta.format = "table" else: container = wrap({ "meta": {"format": "list"}, "data": container }) return container
def query(self, q): q = wrap(q) output = self if is_aggs(q): output = list_aggs(output.data, q) else: try: if q.filter != None or q.esfilter != None: Log.error("use 'where' clause") except AttributeError: pass if q.where is not TRUE and not q.where is TRUE: output = output.filter(q.where) if q.sort: output = output.sort(q.sort) if q.select: output = output.select(q.select) # TODO: ADD EXTRA COLUMN DESCRIPTIONS TO RESULTING SCHEMA for param in q.window: output.window(param) if q.format: if q.format == "list": return Data(data=output.data, meta={"format": "list"}) elif q.format == "table": head = [c.name for c in output.schema.columns] data = [ [r if h == "." else r[h] for h in head] for r in output.data ] return Data(header=head, data=data, meta={"format": "table"}) elif q.format == "cube": head = [c.name for c in output.schema.columns] rows = [ [r[h] for h in head] for r in output.data ] data = {h: c for h, c in zip(head, zip(*rows))} return Data( data=data, meta={"format": "cube"}, edges=[{ "name": "rownum", "domain": {"type": "rownum", "min": 0, "max": len(rows), "interval": 1} }] ) else: Log.error("unknown format {{format}}", format=q.format) else: return output
def query(self, q): q = wrap(q) output = self if is_aggs(q): output = list_aggs(output.data, q) else: # SETOP try: if q.filter != None or q.esfilter != None: Log.error("use 'where' clause") except AttributeError: pass if q.where is not TRUE and not q.where is TRUE: output = output.filter(q.where) if q.sort: output = output.sort(q.sort) if q.select: output = output.select(q.select) #TODO: ADD EXTRA COLUMN DESCRIPTIONS TO RESULTING SCHEMA for param in q.window: output.window(param) if q.format: if q.format == "list": return Data(data=output.data, meta={"format": "list"}) elif q.format == "table": head = [c.name for c in output.schema.columns] data = [ [r if h == "." else r[h] for h in head] for r in output.data ] return Data(header=head, data=data, meta={"format": "table"}) elif q.format == "cube": head = [c.name for c in output.schema.columns] rows = [ [r[h] for h in head] for r in output.data ] data = {h: c for h, c in zip(head, zip(*rows))} return Data( data=data, meta={"format": "cube"}, edges=[{ "name": "rownum", "domain": {"type": "rownum", "min": 0, "max": len(rows), "interval": 1} }] ) else: Log.error("unknown format {{format}}", format=q.format) else: return output
def query(self, q): q = wrap(q) frum = self if is_aggs(q): frum = list_aggs(frum.data, q) else: # SETOP try: if q.filter != None or q.esfilter != None: Log.error("use 'where' clause") except AttributeError, e: pass if q.where is not TRUE_FILTER and not isinstance(q.where, TrueOp): frum = frum.filter(q.where) if q.sort: frum = frum.sort(q.sort) if q.select: frum = frum.select(q.select)
def run(query, frum=Null): """ THIS FUNCTION IS SIMPLY SWITCHING BASED ON THE query["from"] CONTAINER, BUT IT IS ALSO PROCESSING A list CONTAINER; SEPARATE TO A ListContainer """ if frum == None: query_op = QueryOp.wrap(query) frum = query_op.frum else: query_op = QueryOp.wrap(query, frum.schema) if frum == None: from jx_python.containers.list_usingPythonList import DUAL return DUAL.query(query_op) elif isinstance(frum, Container): return frum.query(query_op) elif isinstance(frum, (list, set) + generator_types): frum = wrap(list(frum)) elif isinstance(frum, Cube): if is_aggs(query_op): return cube_aggs(frum, query_op) elif isinstance(frum, QueryOp): frum = run(frum) else: Log.error("Do not know how to handle {{type}}", type=frum.__class__.__name__) if is_aggs(query_op): frum = list_aggs(frum, query_op) else: # SETOP # try: # if query.filter != None or query.esfilter != None: # Log.error("use 'where' clause") # except AttributeError: # pass if query_op.where is not TRUE: frum = filter(frum, query_op.where) if query_op.sort: frum = sort(frum, query_op.sort, already_normalized=True) if query_op.select: frum = select(frum, query_op.select) if query_op.window: if isinstance(frum, Cube): frum = list(frum.values()) for param in query_op.window: window(frum, param) # AT THIS POINT frum IS IN LIST FORMAT, NOW PACKAGE RESULT if query_op.format == "cube": frum = convert.list2cube(frum) elif query_op.format == "table": frum = convert.list2table(frum) frum.meta.format = "table" else: frum = wrap({"meta": {"format": "list"}, "data": frum}) return frum