def to_es_script(self, schema, not_null=False, boolean=False, many=True): if len(self.terms) == 0: return self.default.to_es_script(schema) acc = [] separator = StringOp(self.separator).partial_eval() sep = separator.to_es_script(schema).expr for t in self.terms: val = WhenOp( t.missing(), **{ "then": Literal(""), "else": EsScript( type=STRING, expr=sep + "+" + StringOp(t).partial_eval().to_es_script(schema).expr, frum=t, schema=schema, ) # "else": ConcatOp([sep, t]) } ) acc.append("(" + val.partial_eval().to_es_script(schema).expr + ")") expr_ = ( "(" + "+".join(acc) + ").substring(" + LengthOp(separator).to_es_script(schema).expr + ")" ) if self.default is NULL: return EsScript( miss=self.missing(), type=STRING, expr=expr_, frum=self, schema=schema ) else: return EsScript( miss=self.missing(), type=STRING, expr="((" + expr_ + ").length==0) ? (" + self.default.to_es_script(schema).expr + ") : (" + expr_ + ")", frum=self, )
def to_es_script(self, schema, not_null=False, boolean=False, many=True): lhs = FirstOp(self.lhs).partial_eval() rhs = FirstOp(self.rhs).partial_eval() if rhs == ONE: script = "(int)Math.floor(" + lhs.to_es_script(schema).expr + ")" else: rhs = rhs.to_es_script(schema) script = ("Math.floor((" + lhs.to_es_script(schema).expr + ") / (" + rhs.expr + "))*(" + rhs.expr + ")") output = WhenOp( OrOp([lhs.missing(), rhs.missing(), EqOp([self.rhs, ZERO])]), **{ "then": self.default, "else": EsScript(type=NUMBER, expr=script, frum=self, miss=FALSE, schema=schema), }).partial_eval().to_es_script(schema) return output
def to_es_script(self, schema, not_null=False, boolean=False, many=True): acc = Painless[self.whens[-1]].partial_eval().to_es_script(schema) for w in reversed(self.whens[0:-1]): acc = WhenOp(w.when, **{ "then": w.then, "else": acc }).partial_eval().to_es_script(schema) return acc
def partial_eval(self): index = self.lang[BasicIndexOfOp([self.value, self.find, self.start])].partial_eval() output = self.lang[WhenOp( OrOp([ self.value.missing(), self.find.missing(), BasicEqOp([index, Literal(-1)]), ]), **{ "then": self.default, "else": index })].partial_eval() return output
def to_es_script(self, schema, not_null=False, boolean=False, many=True): lhs = NumberOp(self.lhs).partial_eval() rhs = NumberOp(self.rhs).partial_eval() script = ("(" + lhs.to_es_script(schema).expr + ") / (" + rhs.to_es_script(schema).expr + ")") output = (WhenOp( OrOp([lhs.missing(), rhs.missing(), EqOp([rhs, ZERO])]), **{ "then": self.default, "else": EsScript(type=NUMBER, expr=script, frum=self, schema=schema), }).partial_eval().to_es_script(schema)) return output
def to_es_script(self, schema, not_null=False, boolean=False, many=True): value = self.lang[self.term].to_es_script(schema) if value.many: return BooleanOp( EsScript( miss=value.miss, type=value.type, expr="(" + value.expr + ")[0]", frum=value.frum, schema=schema, )).to_es_script(schema) elif value.type == BOOLEAN: miss = value.miss value.miss = FALSE return (WhenOp(miss, **{ "then": FALSE, "else": value }).partial_eval().to_es_script(schema)) else: return NotOp(value.miss).partial_eval().to_es_script(schema)
def to_es_script(self, schema, not_null=False, boolean=False, many=True): return CaseOp([ WhenOp(self.lhs.missing(), **{"then": self.rhs.missing()}), WhenOp(self.rhs.missing(), **{"then": FALSE}), BasicEqOp([self.lhs, self.rhs]), ]).partial_eval().to_es_script(schema)