protected void fillRecord()

in holo-e2e-performance-tool/src/main/java/com/alibaba/hologres/performace/client/PutTest.java [125:195]


  protected void fillRecord(Record record, long pk, TableSchema schema, Random random,
      List<String> writeColumns, boolean enableRandomPartialCol) {
    Record put = record;
    for (String columnName : writeColumns) {
      int columnIndex = schema.getColumnIndex(columnName);
      Column column = schema.getColumn(columnIndex);
      long value = pk;
      if (!schema.isPrimaryKey(columnName) && enableRandomPartialCol) {
        int randNum = random.nextInt(3);
        if (randNum == 0) {
          continue;
        }
      }
      Set<String> distributionKeys = new HashSet<>(Arrays.asList(schema.getDistributionKeys()));
      if (conf.prefixPk && schema.isPrimaryKey(columnName) && distributionKeys.contains(columnName)) {
        value = (pk - 1) / conf.recordCountPerPrefix;
      }

      if (schema.getPartitionIndex() == columnIndex) {
        if (conf.partition) {
          value = random.nextInt(conf.partitionCount + conf.partitionRatio);
          if (value > conf.partitionCount) {
            value = 0;
          }
        } else {
          value = 0;
        }
      }
      switch (column.getType()) {
        case Types.DOUBLE:
          put.setObject(columnIndex, value);
          break;
        case Types.NUMERIC:
          put.setObject(columnIndex, new BigDecimal(value));
        case Types.INTEGER:
        case Types.BIGINT:
        case Types.SMALLINT:
          put.setObject(columnIndex, value);
          break;
        case Types.VARCHAR:
          if (columnIndex == schema.getPartitionIndex()) {
            put.setObject(columnIndex, String.valueOf(value));
          } else {
            put.setObject(columnIndex, Util.alignWithColumnSize(value, conf.columnSize));
          }
          break;
        case Types.BINARY:
          byte[] bytes = new byte[conf.columnSize];
          random.nextBytes(bytes);
          put.setObject(columnIndex, bytes);
          break;
        case Types.TIMESTAMP:
          if (conf.fillTimestampWithNow) {
            put.setObject(columnIndex, new Date());
          } else {
            put.setObject(columnIndex, new Date(value));
          }
          break;
        case Types.DATE:
          if (conf.fillTimestampWithNow) {
            put.setObject(columnIndex, new java.sql.Date(System.currentTimeMillis()));
          } else {
            put.setObject(columnIndex, new java.sql.Date(value));
          }
          break;
        default:
          throw new RuntimeException(
              "unknow type " + column.getType() + "," + column.getTypeName());
      }
    }
  }