def to_ruby(self, schema): v = StringOp("string", self.value).partial_eval().to_ruby(schema).expr start = IntegerOp("string", self.start).partial_eval().to_ruby(schema).expr end = IntegerOp("integer", self.end).partial_eval().to_ruby(schema).expr return Ruby(miss=FALSE, type=STRING, expr="(" + v + ").substring(" + start + ", " + end + ")", frum=self)
def to_es14_script(self, schema, not_null=False, boolean=False, many=True): v = StringOp("string", self.value).partial_eval().to_es14_script(schema).expr start = IntegerOp("string", self.start).partial_eval().to_es14_script(schema).expr end = IntegerOp("integer", self.end).partial_eval().to_es14_script(schema).expr return EsScript( miss=FALSE, type=STRING, expr="(" + v + ").substring(" + start + ", " + end + ")", frum=self )
def to_ruby(self, schema): value = self.term.to_ruby(schema) if value.many: return IntegerOp( "integer", Ruby(miss=value.missing, type=value.type, expr="(" + value.expr + ")[0]", frum=value.frum)).to_ruby(schema) elif value.type == BOOLEAN: return Ruby(miss=value.missing, type=INTEGER, expr=value.expr + " ? 1 : 0", frum=self) elif value.type == INTEGER: return value elif value.type == NUMBER: return Ruby(miss=value.missing, type=INTEGER, expr="(int)(" + value.expr + ")", frum=self) elif value.type == STRING: return Ruby(miss=value.missing, type=INTEGER, expr="Integer.parseInt(" + value.expr + ")", frum=self) else: return Ruby(miss=value.missing, type=INTEGER, expr="((" + value.expr + ") instanceof String) ? Integer.parseInt(" + value.expr + ") : (int)(" + value.expr + ")", frum=self)
def to_ruby(self, schema): v = StringOp("string", self.value).to_ruby(schema).expr find = StringOp("string", self.find).to_ruby(schema).expr start = IntegerOp("integer", self.start).to_ruby(schema).expr return Ruby(miss=FALSE, type=INTEGER, expr="(" + v + ").indexOf(" + find + ", " + start + ")", frum=self)
def to_python(self, not_null=False, boolean=False, many=False): agg = "rows[rownum+" + IntegerOp("", self.offset).to_python() + "]" path = split_field(json2value(self.var.json)) if not path: return agg for p in path[:-1]: agg = agg + ".get(" + convert.value2quote(p) + ", EMPTY_DICT)" return agg + ".get(" + convert.value2quote(path[-1]) + ")"
def to_es14_script(self, schema, not_null=False, boolean=False, many=True): v = StringOp("string", self.value).to_es14_script(schema).expr find = StringOp("string", self.find).to_es14_script(schema).expr start = IntegerOp("integer", self.start).to_es14_script(schema).expr return EsScript( miss=FALSE, type=INTEGER, expr="(" + v + ").indexOf(" + find + ", " + start + ")", frum=self )
def to_es14_script(self, schema, not_null=False, boolean=False, many=True): value = self.term.to_es14_script(schema) if value.many: return IntegerOp("integer", EsScript( miss=value.missing, type=value.type, expr="(" + value.expr + ")[0]", frum=value.frum )).to_es14_script(schema) elif value.type == BOOLEAN: return EsScript( miss=value.missing, type=INTEGER, expr=value.expr + " ? 1 : 0", frum=self ) elif value.type == INTEGER: return value elif value.type == NUMBER: return EsScript( miss=value.missing, type=INTEGER, expr="(int)(" + value.expr + ")", frum=self ) elif value.type == STRING: return EsScript( miss=value.missing, type=INTEGER, expr="Integer.parseInt(" + value.expr + ")", frum=self ) else: return EsScript( miss=value.missing, type=INTEGER, expr="((" + value.expr + ") instanceof String) ? Integer.parseInt(" + value.expr + ") : (int)(" + value.expr + ")", frum=self )