public static void fillRecord()

in holo-client/src/main/java/com/alibaba/hologres/client/impl/handler/ActionHandler.java [37:93]


	public static void fillRecord(Record record, int recordIndex, ResultSet rs, int resultSetIndex, Column column) throws SQLException {
		switch (column.getType()) {
			case Types.SMALLINT:
				// ResultSet getShort will make null to 0.
				if (null != rs.getObject(resultSetIndex)) {
					record.setObject(recordIndex, rs.getShort(resultSetIndex));
					break;
				}
				record.setObject(recordIndex, rs.getObject(resultSetIndex));
				break;
			case Types.CHAR:
			case Types.NCHAR:
			case Types.CLOB:
			case Types.NCLOB:
			case Types.VARCHAR:
			case Types.LONGVARCHAR:
			case Types.NVARCHAR:
			case Types.LONGNVARCHAR:
				try {
					record.setObject(recordIndex, rs.getObject(resultSetIndex));
				} catch (PSQLException e) {
					if (Objects.equals(e.getSQLState(), PSQLState.DATA_ERROR.getState()) &&
							(e.getMessage().contains("Invalid character data was found") || e.getMessage().contains("发现不合法的字元"))) {
						// 如果字符串有非utf8字符
						byte[] bytes = rs.getBytes(resultSetIndex);
						record.setObject(recordIndex, new String(bytes, StandardCharsets.UTF_8));
					} else {
						throw e;
					}
                }
				break;
			case Types.OTHER:
				if ("roaringbitmap".equals(column.getTypeName())) {
					Object obj = rs.getObject(resultSetIndex);
					if (null != obj) {
						if (obj instanceof PGobject) {
							String value = ((PGobject) obj).getValue();
							if (value.startsWith("\\x")) {
								value = value.toLowerCase();
							}
							final byte[] bytes = new byte[(value.length() - 2) >> 1];
							for (int i = 2; i < value.length(); i += 2) {
								byte highDit = (byte) (Character.digit(value.charAt(i), 16) & 0xFF);
								byte lowDit = (byte) (Character.digit(value.charAt(i + 1), 16) & 0xFF);
								bytes[i / 2 - 1] = (byte) (highDit << 4 | lowDit);
							}
							record.setObject(recordIndex, bytes);
							break;
						}
					}
				}
				record.setObject(recordIndex, rs.getObject(resultSetIndex));
				break;
			default:
				record.setObject(recordIndex, rs.getObject(resultSetIndex));
		}
	}