private def convertToInner()

in s2core/src/main/scala/org/apache/s2graph/core/QueryParam.scala [413:444]


  private def convertToInner(kvs: Seq[(String, JsValue)], edgeOpt: Option[S2EdgeLike]): Seq[(LabelMeta, InnerValLike)] = {
    kvs.map { case (propKey, propValJs) =>
      propValJs match {
        case JsString(in) if edgeOpt.isDefined && in.contains("_parent.") =>
          val parentLen = in.split("_parent.").length - 1
          val edge = (0 until parentLen).foldLeft(edgeOpt.get) { case (acc, _) => acc.getParentEdges().head.edge }

          val timePivot = edge.ts
          val replaced = TemplateHelper.replaceVariable(timePivot, in).trim

          val (_propKey, _padding) = replaced.span(ch => !ch.isDigit && ch != '-' && ch != '+' && ch != ' ')
          val propKey = _propKey.split("_parent.").last
          val padding = Try(_padding.trim.toLong).getOrElse(0L)

          val labelMeta = edge.innerLabel.metaPropsInvMap.getOrElse(propKey, throw new RuntimeException(s"$propKey not found in ${edge} labelMetas."))

          val propVal =
            if (InnerVal.isNumericType(labelMeta.dataType)) {
              InnerVal.withLong(edge.property(labelMeta.name).value.toString.toLong + padding, label.schemaVersion)
            } else {
              edge.property(labelMeta.name).asInstanceOf[S2Property[_]].innerVal
            }

          labelMeta -> propVal
        case _ =>
          val labelMeta = label.metaPropsInvMap.getOrElse(propKey, throw new RuntimeException(s"$propKey not found in labelMetas."))
          val propVal = jsValueToInnerVal(propValJs, labelMeta.dataType, label.schemaVersion)

          labelMeta -> propVal.get
      }
    }
  }