[
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)