code: private static void visitColumn(SQLExpr expr, FieldItem fieldItem) {
          if (expr instanceof SQLIdentifierExpr) {
              // 无owner
              SQLIdentifierExpr identifierExpr = (SQLIdentifierExpr) expr;
              if (fieldItem.getFieldName() == null) {
                  fieldItem.setFieldName(identifierExpr.getName());
                  fieldItem.setExpr(identifierExpr.toString());
              }
              ColumnItem columnItem = new ColumnItem();
              columnItem.setColumnName(identifierExpr.getName());
              fieldItem.getOwners().add(null);
              fieldItem.addColumn(columnItem);
          } else if (expr instanceof SQLPropertyExpr) {
              // 有owner
              SQLPropertyExpr sqlPropertyExpr = (SQLPropertyExpr) expr;
              if (fieldItem.getFieldName() == null) {
                  fieldItem.setFieldName(sqlPropertyExpr.getName());
                  fieldItem.setExpr(sqlPropertyExpr.toString());
              }
              fieldItem.getOwners().add(sqlPropertyExpr.getOwnernName());
              ColumnItem columnItem = new ColumnItem();
              columnItem.setColumnName(sqlPropertyExpr.getName());
              columnItem.setOwner(sqlPropertyExpr.getOwnernName());
              fieldItem.addColumn(columnItem);
          } else if (expr instanceof SQLMethodInvokeExpr) {
              SQLMethodInvokeExpr methodInvokeExpr = (SQLMethodInvokeExpr) expr;
              fieldItem.setMethod(true);
              for (SQLExpr sqlExpr : methodInvokeExpr.getArguments()) {
                  visitColumn(sqlExpr, fieldItem);
              }
          } else if (expr instanceof SQLBinaryOpExpr) {
              SQLBinaryOpExpr sqlBinaryOpExpr = (SQLBinaryOpExpr) expr;
              fieldItem.setBinaryOp(true);
              visitColumn(sqlBinaryOpExpr.getLeft(), fieldItem);
              visitColumn(sqlBinaryOpExpr.getRight(), fieldItem);
          } else if (expr instanceof SQLCaseExpr) {
              SQLCaseExpr sqlCaseExpr = (SQLCaseExpr) expr;
              fieldItem.setMethod(true);
              sqlCaseExpr.getItems().forEach(item-> visitColumn(item.getConditionExpr(), fieldItem));
          }
      }
docs: 解析字段
  
  @param expr sql expr
  @param fieldItem 字段属性