This is an automated email from the ASF dual-hosted git repository. huor pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/hawq.git
commit 30afd65875a6dd574bfdb8c481a1782ae9015a00 Author: wang.ziming <[email protected]> AuthorDate: Mon Jul 29 17:12:45 2019 +0800 HAWQ-1733.Resolve select issue in external table of orc --- src/backend/access/appendonly/aosegfiles.c | 3 +++ src/backend/access/parquet/parquetsegfiles.c | 1 + src/backend/cdb/cdbdatalocality.c | 18 ++++++++++++++++++ 3 files changed, 22 insertions(+) diff --git a/src/backend/access/appendonly/aosegfiles.c b/src/backend/access/appendonly/aosegfiles.c index 3021f3c..c4427b2 100644 --- a/src/backend/access/appendonly/aosegfiles.c +++ b/src/backend/access/appendonly/aosegfiles.c @@ -1714,6 +1714,7 @@ AOGetAllSegFileSplits(AppendOnlyEntry *aoEntry, split->segno = segno; split->offsets = 0; split->lengths = file_size; + split->ext_file_uri_string = NULL; splits = lappend(splits, split); } else @@ -1727,6 +1728,7 @@ AOGetAllSegFileSplits(AppendOnlyEntry *aoEntry, split->segno = segno; split->offsets = offset; split->lengths = aoEntry->splitsize; + split->ext_file_uri_string = NULL; splits = lappend(splits, split); offset += aoEntry->splitsize; @@ -1738,6 +1740,7 @@ AOGetAllSegFileSplits(AppendOnlyEntry *aoEntry, split->segno = segno; split->offsets = offset; split->lengths = remaining_size; + split->ext_file_uri_string = NULL; splits = lappend(splits, split); } } diff --git a/src/backend/access/parquet/parquetsegfiles.c b/src/backend/access/parquet/parquetsegfiles.c index 3404a9e..a3c8ebb 100644 --- a/src/backend/access/parquet/parquetsegfiles.c +++ b/src/backend/access/parquet/parquetsegfiles.c @@ -676,6 +676,7 @@ ParquetGetAllSegFileSplits(AppendOnlyEntry *aoEntry, split->offsets = 0; split->lengths = (int64)DatumGetFloat8(fastgetattr(tuple, Anum_pg_parquetseg_eof, pg_parquetseg_dsc, NULL)); split->logiceof = split->lengths; + split->ext_file_uri_string = NULL; splits = lappend(splits, split); } diff --git a/src/backend/cdb/cdbdatalocality.c b/src/backend/cdb/cdbdatalocality.c index f7d4472..55f4ac0 100644 --- a/src/backend/cdb/cdbdatalocality.c +++ b/src/backend/cdb/cdbdatalocality.c @@ -153,6 +153,7 @@ typedef struct Detailed_File_Split { int64 logiceof; int64 offset; int64 length; + char *ext_file_uri_string; } Detailed_File_Split; /* @@ -1289,6 +1290,7 @@ static void AOGetSegFileDataLocation(Relation relation, File_Split *split = (File_Split *) palloc(sizeof(File_Split)); split->offset = 0; split->length = logic_len; + split->ext_file_uri = NULL; file->split_num = 1; file->splits = split; context->total_split_count += file->split_num; @@ -1304,6 +1306,7 @@ static void AOGetSegFileDataLocation(Relation relation, splits[realSplitNum].host = -1; splits[realSplitNum].is_local_read = true; splits[realSplitNum].offset = offset; + splits[realSplitNum].ext_file_uri = NULL; splits[realSplitNum].length = file->locations[realSplitNum].length; if (logic_len - offset <= splits[realSplitNum].length) { @@ -1342,6 +1345,7 @@ static void AOGetSegFileDataLocation(Relation relation, split->length = logic_len; split->host = -1; split->is_local_read = true; + split->ext_file_uri = NULL; file->split_num = 1; file->splits = split; file->logic_len = logic_len; @@ -1425,6 +1429,7 @@ static void AOGetSegFileDataLocation(Relation relation, File_Split *split = (File_Split *) palloc(sizeof(File_Split)); split->offset = 0; split->length = logic_len; + split->ext_file_uri = NULL; file->split_num = 1; file->splits = split; context->total_split_count += file->split_num; @@ -1441,6 +1446,7 @@ static void AOGetSegFileDataLocation(Relation relation, splits[realSplitNum].host = -1; splits[realSplitNum].is_local_read = true; splits[realSplitNum].offset = offset; + splits[realSplitNum].ext_file_uri = NULL; splits[realSplitNum].length = file->locations[realSplitNum].length; if (logic_len - offset <= splits[realSplitNum].length) { @@ -1482,6 +1488,7 @@ static void AOGetSegFileDataLocation(Relation relation, split->length = logic_len; split->host = -1; split->is_local_read = true; + split->ext_file_uri = NULL; file->split_num = 1; file->splits = split; file->logic_len = logic_len; @@ -1621,6 +1628,7 @@ static void ParquetGetSegFileDataLocation(Relation relation, splits[realSplitNum].offset = offset; splits[realSplitNum].length = file->locations[realSplitNum].length; splits[realSplitNum].logiceof = logic_len; + splits[realSplitNum].ext_file_uri = NULL; if (logic_len - offset <= splits[realSplitNum].length) { splits[realSplitNum].length = logic_len - offset; realSplitNum++; @@ -1649,6 +1657,7 @@ static void ParquetGetSegFileDataLocation(Relation relation, split->logiceof = logic_len; split->host = -1; split->is_local_read = true; + split->ext_file_uri = NULL; file->split_num = 1; file->splits = split; file->logic_len = logic_len; @@ -2259,6 +2268,7 @@ post_process_assign_result(Split_Assignment_Result *assign_result) { Detailed_File_Split *split = har->splits + j; ListCell *per_seg_splits; bool empty_seg = false; + char *p = NULL; FileSplit fileSplit = makeNode(FileSplitNode); if (split->rel_oid != last_oid) { last_oid = split->rel_oid; @@ -2274,10 +2284,15 @@ post_process_assign_result(Split_Assignment_Result *assign_result) { } fileSplit->offsets = split->offset; fileSplit->lengths = split->length; + p = split->ext_file_uri_string; + fileSplit->ext_file_uri_string = p ? pstrdup(p) : (char *) NULL; j += 1; if (empty_seg) { + if (fileSplit->ext_file_uri_string) { + pfree(fileSplit->ext_file_uri_string); + } pfree(fileSplit); } else { per_seg_splits = list_nth_cell((List *) (last_mapnode->splits), i); @@ -3863,6 +3878,7 @@ static void combine_all_splits(Detailed_File_Split **splits, for (int i = 0; i < rel_file->split_num; i++) { /* fake data locality */ + char *p = NULL; if (debug_fake_datalocality) { bool isLocalRead = false; int localCount = 0; @@ -3934,6 +3950,8 @@ static void combine_all_splits(Detailed_File_Split **splits, (*splits)[total_split_index].offset = rel_file->splits[i].offset; (*splits)[total_split_index].length = rel_file->splits[i].length; (*splits)[total_split_index].logiceof = rel_file->logic_len; + p = rel_file->splits[i].ext_file_uri; + (*splits)[total_split_index].ext_file_uri_string = p ? pstrdup(p) : (char *) NULL; total_split_index++; splitTotalLength += rel_file->splits[i].length; }
