@Override
  public Analysis visitInsertRows(
      InsertRowsStatement insertRowsStatement, MPPQueryContext context) {
    context.setQueryType(QueryType.WRITE);
    insertRowsStatement.semanticCheck();
    Analysis analysis = new Analysis();
    validateSchema(
        analysis,
        insertRowsStatement,
        () -> SchemaValidator.validate(schemaFetcher, insertRowsStatement, context));
    InsertRowsStatement realInsertRowsStatement =
        (InsertRowsStatement) removeLogicalView(analysis, insertRowsStatement);
    if (analysis.isFinishQueryAfterAnalyze()) {
      return analysis;
    }
    analysis.setRealStatement(realInsertRowsStatement);

    AnalyzeUtils.analyzeDataPartition(
        analysis,
        AnalyzeUtils.computeTreeDataPartitionParams(realInsertRowsStatement, context),
        context.getSession().getUserName(),
        partitionFetcher::getOrCreateDataPartition);
    return analysis;
  }
Check datatype consistency in ALIGN BY DEVICE.

<p>an inconsistent example: select s0 from root.sg1.d1, root.sg1.d2 align by device, return
false while root.sg1.d1.s0 is INT32 and root.sg1.d2.s0 is FLOAT.
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java