private def mergeFields()

in ratatool-diffy/src/main/scala/com/spotify/ratatool/diffy/BigDiffy.scala [543:573]


  private def mergeFields(
    x: Seq[TableFieldSchema],
    y: Seq[TableFieldSchema]
  ): Seq[TableFieldSchema] = {
    val xMap = x.map(f => (f.getName, f)).toMap
    val yMap = y.map(f => (f.getName, f)).toMap
    val names = mutable.LinkedHashSet.empty[String]
    xMap.foreach(kv => names.add(kv._1))
    yMap.foreach(kv => names.add(kv._1))
    names.map { n =>
      (xMap.get(n), yMap.get(n)) match {
        case (Some(f), None) => f
        case (None, Some(f)) => f
        case (Some(fx), Some(fy)) =>
          val fxMode = getFieldModeWithDefault(fx.getMode)
          val fyMode = getFieldModeWithDefault(fy.getMode)
          assert(
            fx.getType == fy.getType && fxMode == fyMode,
            f"field ${fx.getName} in lhs, type: ${fx.getType} mode: $fxMode, and rhs, type: ${fy.getType} mode: $fyMode, do not match"
          )
          if (fx.getType == "RECORD") {
            fx.setFields(
              mergeFields(fx.getFields.asScala.toList, fy.getFields.asScala.toList).asJava
            )
          } else {
            fx
          }
        case _ => throw new RuntimeException
      }
    }.toSeq
  }