def to_ruby(self, schema): term = FirstOp("first", self.term).partial_eval() value = term.to_ruby(schema) if isinstance(value.frum, CoalesceOp): return CoalesceOp( "coalesce", [StringOp("string", t).partial_eval() for t in value.frum.terms]).to_ruby(schema) if value.type == BOOLEAN: return Ruby(miss=self.term.missing().partial_eval(), type=STRING, expr=value.expr + ' ? "T" : "F"', frum=self) elif value.type == INTEGER: return Ruby(miss=self.term.missing().partial_eval(), type=STRING, expr="String.valueOf(" + value.expr + ")", frum=self) elif value.type == NUMBER: return Ruby(miss=self.term.missing().partial_eval(), type=STRING, expr=expand_template(TO_STRING, {"expr": value.expr}), frum=self) elif value.type == STRING: return value else: return Ruby(miss=self.term.missing().partial_eval(), type=STRING, expr=expand_template(TO_STRING, {"expr": value.expr}), frum=self)
def to_ruby(self, schema): if self.var == ".": return "_source" else: if self.var == "_id": return Ruby( type=STRING, expr= 'doc["_uid"].value.substring(doc["_uid"].value.indexOf(\'#\')+1)', frum=self) columns = schema.values(self.var) acc = [] for c in columns: varname = c.es_column frum = Variable(c.es_column) q = quote(varname) acc.append( Ruby(miss=frum.missing(), type=c.type, expr="doc[" + q + "].values", frum=frum, many=True)) if len(acc) == 0: return NULL.to_ruby(schema) elif len(acc) == 1: return acc[0] else: return CoalesceOp("coalesce", acc).to_ruby(schema)
def to_ruby(self, schema): term = self.term.to_ruby(schema) if isinstance(term.frum, CoalesceOp): return CoalesceOp("coalesce", [t.frum for t in term.frum.terms]).to_ruby(schema) if term.many: return Ruby(miss=term.miss, type=term.type, expr="(" + term.expr + ")[0]", frum=term.frum).to_ruby(schema) else: return term
def to_painless(self, schema): term = self.term.to_painless(schema) if isinstance(term.frum, CoalesceOp): return CoalesceOp("coalesce", [FirstOp("first", t.partial_eval().to_painless(schema)) for t in term.frum.terms]).to_painless(schema) if term.many: return Painless( miss=term.miss, type=term.type, expr="(" + term.expr + ")[0]", frum=term.frum ).to_painless(schema) else: return term
def to_ruby(self, schema): term = FirstOp("first", self.term).partial_eval() value = term.to_ruby(schema) if isinstance(value.frum, CoalesceOp): return CoalesceOp("coalesce", [NumberOp("number", t).partial_eval().to_ruby(schema) for t in value.frum.terms]).to_ruby(schema) if value.type == BOOLEAN: return Ruby( miss=term.missing().partial_eval(), type=NUMBER, expr=value.expr + " ? 1 : 0", frum=self ) elif value.type == INTEGER: return Ruby( miss=term.missing().partial_eval(), type=NUMBER, expr=value.expr, frum=self ) elif value.type == NUMBER: return Ruby( miss=term.missing().partial_eval(), type=NUMBER, expr=value.expr, frum=self ) elif value.type == STRING: return Ruby( miss=term.missing().partial_eval(), type=NUMBER, expr="Double.parseDouble(" + value.expr + ")", frum=self ) elif value.type == OBJECT: return Ruby( miss=term.missing().partial_eval(), type=NUMBER, expr="((" + value.expr + ") instanceof String) ? Double.parseDouble(" + value.expr + ") : (" + value.expr + ")", frum=self )
def to_es_script(self, schema, many=True): if self.var == ".": return "_source" else: if self.var == "_id": return EsScript( type=STRING, expr= 'doc["_uid"].value.substring(doc["_uid"].value.indexOf(\'#\')+1)', frum=self) columns = schema.values(self.var) acc = [] for c in columns: varname = c.es_column frum = Variable(c.es_column) q = quote(varname) if many: acc.append( EsScript(miss=frum.missing(), type=c.jx_type, expr="doc[" + q + "].values" if c.jx_type != BOOLEAN else "doc[" + q + "].value==\"T\"", frum=frum, many=True)) else: acc.append( EsScript(miss=frum.missing(), type=c.jx_type, expr="doc[" + q + "].value" if c.jx_type != BOOLEAN else "doc[" + q + "].value==\"T\"", frum=frum, many=True)) if len(acc) == 0: return NULL.to_es_script(schema) elif len(acc) == 1: return acc[0] else: return CoalesceOp("coalesce", acc).to_es_script(schema)
def to_es_script(self, schema): if isinstance(self.term, Variable): columns = schema.values(self.term.var) if len(columns) == 1: return self.term.to_es_script(schema, many=False) term = self.term.to_es_script(schema) if isinstance(term.frum, CoalesceOp): return CoalesceOp("coalesce", [FirstOp("first", t.partial_eval().to_es_script(schema)) for t in term.frum.terms]).to_es_script(schema) if term.many: return EsScript( miss=term.miss, type=term.type, expr="(" + term.expr + ")[0]", frum=term.frum ).to_es_script(schema) else: return term