private def generateCompatibilityGuide()

in spark/src/main/scala/org/apache/comet/GenerateDocs.scala [66:111]


  private def generateCompatibilityGuide(): Unit = {
    val templateFilename = "docs/templates/compatibility-template.md"
    val outputFilename = "docs/source/user-guide/compatibility.md"
    val w = new BufferedOutputStream(new FileOutputStream(outputFilename))
    for (line <- Source.fromFile(templateFilename).getLines()) {
      if (line.trim == "<!--COMPAT_CAST_TABLE-->") {
        w.write("| From Type | To Type | Notes |\n".getBytes)
        w.write("|-|-|-|\n".getBytes)
        for (fromType <- CometCast.supportedTypes) {
          for (toType <- CometCast.supportedTypes) {
            if (Cast.canCast(fromType, toType) && (fromType != toType || fromType.typeName
                .contains("decimal"))) {
              val fromTypeName = fromType.typeName.replace("(10,2)", "")
              val toTypeName = toType.typeName.replace("(10,2)", "")
              CometCast.isSupported(fromType, toType, None, CometEvalMode.LEGACY) match {
                case Compatible(notes) =>
                  val notesStr = notes.getOrElse("").trim
                  w.write(s"| $fromTypeName | $toTypeName | $notesStr |\n".getBytes)
                case _ =>
              }
            }
          }
        }
      } else if (line.trim == "<!--INCOMPAT_CAST_TABLE-->") {
        w.write("| From Type | To Type | Notes |\n".getBytes)
        w.write("|-|-|-|\n".getBytes)
        for (fromType <- CometCast.supportedTypes) {
          for (toType <- CometCast.supportedTypes) {
            if (Cast.canCast(fromType, toType) && fromType != toType) {
              val fromTypeName = fromType.typeName.replace("(10,2)", "")
              val toTypeName = toType.typeName.replace("(10,2)", "")
              CometCast.isSupported(fromType, toType, None, CometEvalMode.LEGACY) match {
                case Incompatible(notes) =>
                  val notesStr = notes.getOrElse("").trim
                  w.write(s"| $fromTypeName | $toTypeName  | $notesStr |\n".getBytes)
                case _ =>
              }
            }
          }
        }
      } else {
        w.write(s"${line.trim}\n".getBytes)
      }
    }
    w.close()
  }