@Override
 @SuppressWarnings("unchecked")
 public List<Transaction> getTransactions(TransactionQueryForm form) {
   return getInternal(form)
       .fetch()
       .map(
           r ->
               Transaction.builder()
                   .id(r.value1())
                   .chargeBoxId(r.value2())
                   .connectorId(r.value3())
                   .ocppIdTag(r.value4())
                   .startTimestamp(DateTimeUtils.humanize(r.value5()))
                   .startValue(r.value6())
                   .stopTimestamp(DateTimeUtils.humanize(r.value7()))
                   .stopValue(r.value8())
                   .chargeBoxPk(r.value9())
                   .ocppTagPk(r.value10())
                   .build());
 }
 @Override
 public List<ChargePoint.Overview> getOverview(ChargePointQueryForm form) {
   return getOverviewInternal(form)
       .map(
           r ->
               ChargePoint.Overview.builder()
                   .chargeBoxPk(r.value1())
                   .chargeBoxId(r.value2())
                   .description(r.value3())
                   .ocppProtocol(r.value4())
                   .lastHeartbeatTimestamp(DateTimeUtils.humanize(r.value5()))
                   .build());
 }
  @Override
  public List<ConnectorStatus> getChargePointConnectorStatus() {
    // Prepare for the inner select of the second join
    Field<Integer> t1Pk = CONNECTOR_STATUS.CONNECTOR_PK.as("t1_pk");
    Field<DateTime> t1Max = DSL.max(CONNECTOR_STATUS.STATUS_TIMESTAMP).as("t1_max");
    TableLike<?> t1 =
        ctx.select(t1Pk, t1Max)
            .from(CONNECTOR_STATUS)
            .groupBy(CONNECTOR_STATUS.CONNECTOR_PK)
            .asTable("t1");

    return ctx.select(
            CHARGE_BOX.CHARGE_BOX_PK,
            CONNECTOR.CHARGE_BOX_ID,
            CONNECTOR.CONNECTOR_ID,
            CONNECTOR_STATUS.STATUS_TIMESTAMP,
            CONNECTOR_STATUS.STATUS,
            CONNECTOR_STATUS.ERROR_CODE)
        .from(CONNECTOR_STATUS)
        .join(CONNECTOR)
        .onKey()
        .join(CHARGE_BOX)
        .on(CHARGE_BOX.CHARGE_BOX_ID.eq(CONNECTOR.CHARGE_BOX_ID))
        .join(t1)
        .on(CONNECTOR_STATUS.CONNECTOR_PK.equal(t1.field(t1Pk)))
        .and(CONNECTOR_STATUS.STATUS_TIMESTAMP.equal(t1.field(t1Max)))
        .orderBy(CONNECTOR_STATUS.STATUS_TIMESTAMP.desc())
        .fetch()
        .map(
            r ->
                ConnectorStatus.builder()
                    .chargeBoxPk(r.value1())
                    .chargeBoxId(r.value2())
                    .connectorId(r.value3())
                    .timeStamp(DateTimeUtils.humanize(r.value4()))
                    .status(r.value5())
                    .errorCode(r.value6())
                    .build());
  }