Esempio n. 1
0
    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
Esempio n. 4
0
    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
Esempio n. 5
0
    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
Esempio n. 6
0
 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)
Esempio n. 7
0
 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)