[ https://issues.apache.org/jira/browse/PHOENIX-7015?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17814610#comment-17814610 ]
ASF GitHub Bot commented on PHOENIX-7015: ----------------------------------------- TheNamesRai commented on code in PR #1813: URL: https://github.com/apache/phoenix/pull/1813#discussion_r1479237528 ########## phoenix-core/src/main/java/org/apache/phoenix/coprocessor/CDCGlobalIndexRegionScanner.java: ########## @@ -223,4 +237,85 @@ protected boolean getNextCoveredIndexRow(List<Cell> result) throws IOException { } return false; } + + private Result getCDCImage( + Map<String, Map<String, Object>> preImageObj, + Map<String, Map<String, Object>> changeImageObj, + boolean isIndexCellDeleteRow, Long indexCellTS, Cell firstCell) { + Map<String, Object> rowValueMap = new HashMap<>(); + + if (this.cdcChangeScopeSet.size() == 0 + || (this.cdcChangeScopeSet.contains(PTable.CDCChangeScope.PRE))) { + rowValueMap.put(PRE_IMAGE, preImageObj); + } + + if (this.cdcChangeScopeSet.size() == 0 + || (this.cdcChangeScopeSet.contains(PTable.CDCChangeScope.CHANGE))) { + rowValueMap.put(CHANGE_IMAGE, changeImageObj); + } + + Map<String, Map<String, Object>> postImageObj = new HashMap<>(); + if (this.cdcChangeScopeSet.size() == 0 + || (this.cdcChangeScopeSet.contains(PTable.CDCChangeScope.POST))) { + if (!isIndexCellDeleteRow) { + for (Map.Entry<String, Map<String, Object>> preImageObjFamily + : preImageObj.entrySet()) { + String columnFamily = preImageObjFamily.getKey(); + postImageObj.put(columnFamily, new HashMap<>()); + for (Map.Entry<String, Object> preImageColQual : + preImageObjFamily.getValue().entrySet()) { + postImageObj.get(columnFamily).put(preImageColQual.getKey(), + preImageColQual.getValue()); + } + } + for (Map.Entry<String, Map<String, Object>> changeImageObjFamily + : changeImageObj.entrySet()) { + String columnFamily = changeImageObjFamily.getKey(); + if (!postImageObj.containsKey(columnFamily)) { + postImageObj.put(columnFamily, new HashMap<>()); + } + for (Map.Entry<String, Object> changeImageColQual : + changeImageObjFamily.getValue().entrySet()) { + postImageObj.get(columnFamily).put(changeImageColQual.getKey(), + changeImageColQual.getValue()); + } + } + } + rowValueMap.put(POST_IMAGE, postImageObj); + } + + if (isIndexCellDeleteRow) { + rowValueMap.put(EVENT_TYPE, DELETE_EVENT_TYPE); + } else { + rowValueMap.put(EVENT_TYPE, UPSERT_EVENT_TYPE); + } + Gson gson = new GsonBuilder().serializeNulls().create(); + + byte[] value = + gson.toJson(rowValueMap).getBytes(StandardCharsets.UTF_8); + CellBuilder builder = CellBuilderFactory.create(CellBuilderType.SHALLOW_COPY); + Result cdcRow = Result.create(Arrays.asList(builder. + setRow(indexToDataRowKeyMap.get(new ImmutableBytesPtr(firstCell.getRowArray(), + firstCell.getRowOffset(), firstCell.getRowLength()) + .copyBytesIfNecessary())). + setFamily(firstCell.getFamilyArray()). + setQualifier(scan.getAttribute(CDC_JSON_COL_QUALIFIER)). + setTimestamp(indexCellTS). + setValue(value). + setType(Cell.Type.Put). + build())); + + return cdcRow; + } + + private Object getColumnValue (Cell cell, PDataType dataType) { + if (dataType.getSqlType() == Types.BINARY) { + return Base64.getEncoder().encodeToString(cell.getValueArray()); + } else if (dataType.getSqlType() == Types.DATE) { + return ((Date) dataType.toObject(cell.getValueArray())).getTime(); Review Comment: Change this to Stringified value of Date/Timestamp > Extend UncoveredGlobalIndexRegionScanner for CDC region scanner usecase > ----------------------------------------------------------------------- > > Key: PHOENIX-7015 > URL: https://issues.apache.org/jira/browse/PHOENIX-7015 > Project: Phoenix > Issue Type: Sub-task > Reporter: Viraj Jasani > Priority: Major > > For CDC region scanner usecase, extend UncoveredGlobalIndexRegionScanner to > CDCUncoveredGlobalIndexRegionScanner. The new region scanner for CDC performs > raw scan to index table and retrieve data table rows from index rows. > Using the time range, it can form a JSON blob to represent changes to the row > including pre and/or post row images. -- This message was sent by Atlassian Jira (v8.20.10#820010)