{"action":"created","comment":{"url":"https://api.github.com/repos/apache/incubator-trafodion/pulls/comments/49369265","id":49369265,"diff_hunk":"@@ -660,6 +660,269 @@ FileScan::addSpecificExplainInfo(ExplainTupleMaster *explainTuple,\n   return(explainTuple);\n }\n \n+static void appendListOfColumns(Queue* listOfColNames,ComTdb *tdb, NAString& outNAString){\n+\n+\tif (((ComTdbHbaseAccess*)tdb)->sqHbaseTable()){// if trafodion table\n+\t  char buf[1000];\n+\n+\t  listOfColNames->position();\n+\t  for (Lng32 j = 0; j < listOfColNames->numEntries(); j++)\n+\t    {\n+\t      char * currPtr = (char*)listOfColNames->getCurr();\n+\n+\t      Lng32 currPos = 0;\n+\t      Lng32 jj = 0;\n+\t      short colNameLen = *(short*)currPtr;\n+\t      currPos += sizeof(short);\n+\t      char colFam[100];\n+\t      while (currPtr[currPos] != ':')\n+\t\t{\n+\t\t  colFam[jj] = currPtr[currPos];\n+\t\t  currPos++;\n+\t\t  jj++;\n+\t\t}\n+\t      colFam[jj] = ':';\n+\t      jj++;\n+\t      currPos++;\n+\t      colFam[jj] = 0;\n+\t      colNameLen -= jj;\n+\n+\t      NABoolean withAt = FALSE;\n+\t      char * colName = &currPtr[currPos];\n+\t      if (colName[0] == '@')\n+\t\t{\n+\t\t  colNameLen--;\n+\t\t  colName++;\n+\t\t  withAt = TRUE;\n+\t\t}\n+\n+\t      Int64 v;\n+\t      if (colNameLen == sizeof(char))\n+\t\tv = *(char*)colName;\n+\t      else if (colNameLen == sizeof(unsigned short))\n+\t\tv = *(UInt16*)colName;\n+\t      else if (colNameLen == sizeof(Lng32))\n+\t\tv = *(ULng32*)colName;\n+\t      else\n+\t\tv = 0;\n+\t      if (j==0)\n+\t\t      str_sprintf(buf, \"%s%s%Ld\",\n+\t\t\t\t  colFam,\n+\t\t\t\t  (withAt ? \"@\" : \"\"),\n+\t\t\t\t  v);\n+\t      else\n+\t\t\t  str_sprintf(buf, \",%s%s%Ld\",\n+\t\t\t\t  colFam,\n+\t\t\t\t  (withAt ? \"@\" : \"\"),\n+\t\t\t\t  v);\n+\n+\t      outNAString += buf;\n+\n+\t      listOfColNames->advance();\n+\t    } // for\n+\t}// trafodion tables\n+\telse\n+\t{// if hbase native tables\n+\t  char buf[1000];\n+\n+\t  listOfColNames->position();\n+\t  for (Lng32 j = 0; j < listOfColNames->numEntries(); j++)\n+\t    {\n+\t      char * currPtr = (char*)listOfColNames->getCurr();\n+\n+\t      char * colNamePtr = NULL;\n+\n+\t\t  Lng32 currPos = 0;\n+\t\t  short colNameLen = *(short*)currPtr;\n+\t\t  currPos += sizeof(short);\n+\t\t  char colName[500];\n+\n+\t\t  for (Lng32 i = 0; i < colNameLen; i++)\n+\t\t    {\n+\t\t      colName[i] = currPtr[currPos];\n+\t\t      currPos++;\n+\t\t    }\n+\n+\t\t  colName[colNameLen] = 0;\n+\n+\t\t  colNamePtr = colName;\n+\n+\t\t  if (j==0)\n+\t\t\t  str_sprintf(buf, \"%s\",colNamePtr);\n+\t\t  else\n+\t\t\t  str_sprintf(buf, \",%s\",colNamePtr);\n+\n+\n+\t\t  outNAString += buf;\n+\n+\t      listOfColNames->advance();\n+\t    } // for\n+\n+\t}// hbase native table\n+\toutNAString +=\" \";\n+}\n+\n+static void appendPushedDownExpression(ComTdb *tdb, NAString& outNAString){\n+\t// in predicate pushdown V2, the hbaseCompareOps list contains a reverse polish set of operation, were operators are\n+\t// AND or OR, the rest are operands. this function display the column, operator and replace any constant with ?. it keeps reverse polish format\n+\t// this can be improved in the future for better readability.\n+\tchar buf[1000];\n+\tQueue* reversePolishItems = ((ComTdbHbaseAccess *)tdb)->listOfHbaseCompareOps();\n+\tQueue* pushedDownColumns = ((ComTdbHbaseAccess *)tdb)->listOfHbaseFilterColNames();\n+\treversePolishItems->position();\n+\tpushedDownColumns->position();\n+\n+\tfor (Lng32 j = 0; j < reversePolishItems->numEntries(); j++){\n+\t\tchar * currPtr = (char*)reversePolishItems->getCurr();\n+\t\tchar buf2[1000];\n+\t\tif (strcmp(currPtr,\"V2\")!=0 && strcmp(currPtr,\"AND\")!=0 && strcmp(currPtr,\"OR\")!=0){//if an operand (not an operator or V2 marker), get the column name","path":"core/sql/generator/GenExplain.cpp","position":119,"original_position":119,"commit_id":"90795250785f50cc0538284f22b1b8589a84734a","original_commit_id":"90795250785f50cc0538284f22b1b8589a84734a","user":{"login":"eowhadi","id":12662542,"avatar_url":"https://avatars.githubusercontent.com/u/12662542?v=3","gravatar_id":"","url":"https://api.github.com/users/eowhadi","html_url":"https://github.com/eowhadi","followers_url":"https://api.github.com/users/eowhadi/followers","following_url":"https://api.github.com/users/eowhadi/following{/other_user}","gists_url":"https://api.github.com/users/eowhadi/gists{/gist_id}","starred_url":"https://api.github.com/users/eowhadi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eowhadi/subscriptions","organizations_url":"https://api.github.com/users/eowhadi/orgs","repos_url":"https://api.github.com/users/eowhadi/repos","events_url":"https://api.github.com/users/eowhadi/events{/privacy}","received_events_url":"https://api.github.com/users/eowhadi/received_events","type":"User","site_admin":false},"body":"Same question for AND and OR, but we are OK as the column nmae is  familly name concatenated with column name with : char in middle. so cannot match V2, AND or OR given the missing :","created_at":"2016-01-11T19:53:02Z","updated_at":"2016-01-11T19:53:02Z","html_url":"https://github.com/apache/incubator-trafodion/pull/255#discussion_r49369265","pull_request_url":"https://api.github.com/repos/apache/incubator-trafodion/pulls/255","_links":{"self":{"href":"https://api.github.com/repos/apache/incubator-trafodion/pulls/comments/49369265"},"html":{"href":"https://github.com/apache/incubator-trafodion/pull/255#discussion_r49369265"},"pull_request":{"href":"https://api.github.com/repos/apache/incubator-trafodion/pulls/255"}}},"pull_request":{"url":"https://api.github.com/repos/apache/incubator-trafodion/pulls/255","id":55489610,"html_url":"https://github.com/apache/incubator-trafodion/pull/255","diff_url":"https://github.com/apache/incubator-trafodion/pull/255.diff","patch_url":"https://github.com/apache/incubator-trafodion/pull/255.patch","issue_url":"https://api.github.com/repos/apache/incubator-trafodion/issues/255","number":255,"state":"open","locked":false,"title":"[TRAFODION-1662] Predicate push down revisited (V2)","user":{"login":"eowhadi","id":12662542,"avatar_url":"https://avatars.githubusercontent.com/u/12662542?v=3","gravatar_id":"","url":"https://api.github.com/users/eowhadi","html_url":"https://github.com/eowhadi","followers_url":"https://api.github.com/users/eowhadi/followers","following_url":"https://api.github.com/users/eowhadi/following{/other_user}","gists_url":"https://api.github.com/users/eowhadi/gists{/gist_id}","starred_url":"https://api.github.com/users/eowhadi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eowhadi/subscriptions","organizations_url":"https://api.github.com/users/eowhadi/orgs","repos_url":"https://api.github.com/users/eowhadi/repos","events_url":"https://api.github.com/users/eowhadi/events{/privacy}","received_events_url":"https://api.github.com/users/eowhadi/received_events","type":"User","site_admin":false},"body":"Currently Trafodion predicate push down to hbase is supporting only the following cases:\n<Column><op><Value> AND <Column> <op><value> AND…\nAnd require columns to be “SERIALIZED” (can be compared using binary comparator), \nand value data type is not a superset of column data type.\nand char type is not case insensitive or upshifted\nand no support for Big Numbers\nIt suffer from several issues:\nHandling of nullable column:\nWhen a nullable column is involved in the predicate, because of the way nulls are handled in trafodion (can ether be missing cell, or cell with first byte set to xFF), binary compare cannot do a good job at semantically treating NULL the way a SQL expression would require. So the current behavior is that all null column values as never filtered out and always returned, letting trafodion perform a second pass predicate evaluation to deal with nulls. This can quickly turn counterproductive for very sparse columns, as we would perform useless filtering at region server side (since all nulls are pass), and optimizer has not been coded to turn off the feature on sparse columns.\nIn addition, since null handling is done on trafodion side, the current code artificially pull all key columns to make sure that a null coded as absent cell is correctly pushed up for evaluation at trafodion layer. This can be optimized by only requiring a single non-nullable column on current code, but this is another story… as you will see bellow, the proposed new way of doing pushdown will handle 100% nulls at hbase layer, therefore requiring adding non nullable column only when a nullable column is needed in the select statement (not in the predicate).\nAlways returning predicate columns\nSelect a from t where b>10 would always return the b column to trafodion, even if b is non nullable. This is not necessary and will result in useless network and cpu consumption, even if the predicate is not re-evaluated.\nThe new advanced predicate push down feature will do the following:\nSupport any of these primitives:\n<col><op><value>\n<col><op><col>\t(nice to have, high cost of custom filter low value after TPC-DS query survey) \nIs null\nIs not null\nLike\t-> to be investigated, not yet covered in this document\nAnd combination of these primitive with arbitrary number of OR and AND with ( ) associations, given that within () there is only ether any number of OR or any number of AND, no mixing OR and AND inside (). I suspect that normalizer will always convert expression so that this mixing never happen…\nAnd will remove the 2 shortcoming of previous implementation: all null cases will be handled at hbase layer, never requiring re-doing evaluation and the associated pushing up of null columns, and predicate columns will not be pushed up if not needed by the node for other task than the predicate evaluation.\nNote that BETWEEN and IN predicate, when normalized as one of the form supported above, will be pushed down too. Nothing in the code will need to be done to support this.\nImprovement of explain:\nWe currently do not show predicate push down information in the scan node. 2 key information is needed:\nIs predicate push down used\nWhat columns are retrieved by the scan node (investigate why we get column all instead of accurate information)\nThe first one is obviously used to determine if all the conditions are met to have push down available, and the second is used to make sure we are not pushing up data from columns we don’t need.\nNote that columns info is inconsistently shown today. Need to fix this.\nEnablement using an existing ON/OFF CQD (HBASE_FILTER_PREDS) that will be replaced with a multi value CQD that will enable various level of push down optimization, like we have on PCODE optimization level.","created_at":"2016-01-08T17:46:13Z","updated_at":"2016-01-11T19:53:02Z","closed_at":null,"merged_at":null,"merge_commit_sha":"cb88f373d0ce8196e78005def820384ad6e6230f","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/apache/incubator-trafodion/pulls/255/commits","review_comments_url":"https://api.github.com/repos/apache/incubator-trafodion/pulls/255/comments","review_comment_url":"https://api.github.com/repos/apache/incubator-trafodion/pulls/comments{/number}","comments_url":"https://api.github.com/repos/apache/incubator-trafodion/issues/255/comments","statuses_url":"https://api.github.com/repos/apache/incubator-trafodion/statuses/90795250785f50cc0538284f22b1b8589a84734a","head":{"label":"eowhadi:predicatePushdownV2","ref":"predicatePushdownV2","sha":"90795250785f50cc0538284f22b1b8589a84734a","user":{"login":"eowhadi","id":12662542,"avatar_url":"https://avatars.githubusercontent.com/u/12662542?v=3","gravatar_id":"","url":"https://api.github.com/users/eowhadi","html_url":"https://github.com/eowhadi","followers_url":"https://api.github.com/users/eowhadi/followers","following_url":"https://api.github.com/users/eowhadi/following{/other_user}","gists_url":"https://api.github.com/users/eowhadi/gists{/gist_id}","starred_url":"https://api.github.com/users/eowhadi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eowhadi/subscriptions","organizations_url":"https://api.github.com/users/eowhadi/orgs","repos_url":"https://api.github.com/users/eowhadi/repos","events_url":"https://api.github.com/users/eowhadi/events{/privacy}","received_events_url":"https://api.github.com/users/eowhadi/received_events","type":"User","site_admin":false},"repo":{"id":38838590,"name":"incubator-trafodion","full_name":"eowhadi/incubator-trafodion","owner":{"login":"eowhadi","id":12662542,"avatar_url":"https://avatars.githubusercontent.com/u/12662542?v=3","gravatar_id":"","url":"https://api.github.com/users/eowhadi","html_url":"https://github.com/eowhadi","followers_url":"https://api.github.com/users/eowhadi/followers","following_url":"https://api.github.com/users/eowhadi/following{/other_user}","gists_url":"https://api.github.com/users/eowhadi/gists{/gist_id}","starred_url":"https://api.github.com/users/eowhadi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eowhadi/subscriptions","organizations_url":"https://api.github.com/users/eowhadi/orgs","repos_url":"https://api.github.com/users/eowhadi/repos","events_url":"https://api.github.com/users/eowhadi/events{/privacy}","received_events_url":"https://api.github.com/users/eowhadi/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/eowhadi/incubator-trafodion","description":"Mirror of Apache Trafodion (Incubating)","fork":true,"url":"https://api.github.com/repos/eowhadi/incubator-trafodion","forks_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/forks","keys_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/keys{/key_id}","collaborators_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/teams","hooks_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/hooks","issue_events_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/issues/events{/number}","events_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/events","assignees_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/assignees{/user}","branches_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/branches{/branch}","tags_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/tags","blobs_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/git/refs{/sha}","trees_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/git/trees{/sha}","statuses_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/statuses/{sha}","languages_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/languages","stargazers_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/stargazers","contributors_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/contributors","subscribers_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/subscribers","subscription_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/subscription","commits_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/commits{/sha}","git_commits_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/git/commits{/sha}","comments_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/comments{/number}","issue_comment_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/issues/comments{/number}","contents_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/contents/{+path}","compare_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/compare/{base}...{head}","merges_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/merges","archive_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/downloads","issues_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/issues{/number}","pulls_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/pulls{/number}","milestones_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/milestones{/number}","notifications_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/labels{/name}","releases_url":"https://api.github.com/repos/eowhadi/incubator-trafodion/releases{/id}","created_at":"2015-07-09T18:40:03Z","updated_at":"2015-07-09T18:40:42Z","pushed_at":"2016-01-08T17:39:04Z","git_url":"git://github.com/eowhadi/incubator-trafodion.git","ssh_url":"git@github.com:eowhadi/incubator-trafodion.git","clone_url":"https://github.com/eowhadi/incubator-trafodion.git","svn_url":"https://github.com/eowhadi/incubator-trafodion","homepage":null,"size":61776,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"apache:master","ref":"master","sha":"9f8afad66f6cb5152069e25d19d28a042bb5d23c","user":{"login":"apache","id":47359,"avatar_url":"https://avatars.githubusercontent.com/u/47359?v=3","gravatar_id":"","url":"https://api.github.com/users/apache","html_url":"https://github.com/apache","followers_url":"https://api.github.com/users/apache/followers","following_url":"https://api.github.com/users/apache/following{/other_user}","gists_url":"https://api.github.com/users/apache/gists{/gist_id}","starred_url":"https://api.github.com/users/apache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apache/subscriptions","organizations_url":"https://api.github.com/users/apache/orgs","repos_url":"https://api.github.com/users/apache/repos","events_url":"https://api.github.com/users/apache/events{/privacy}","received_events_url":"https://api.github.com/users/apache/received_events","type":"Organization","site_admin":false},"repo":{"id":36349344,"name":"incubator-trafodion","full_name":"apache/incubator-trafodion","owner":{"login":"apache","id":47359,"avatar_url":"https://avatars.githubusercontent.com/u/47359?v=3","gravatar_id":"","url":"https://api.github.com/users/apache","html_url":"https://github.com/apache","followers_url":"https://api.github.com/users/apache/followers","following_url":"https://api.github.com/users/apache/following{/other_user}","gists_url":"https://api.github.com/users/apache/gists{/gist_id}","starred_url":"https://api.github.com/users/apache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apache/subscriptions","organizations_url":"https://api.github.com/users/apache/orgs","repos_url":"https://api.github.com/users/apache/repos","events_url":"https://api.github.com/users/apache/events{/privacy}","received_events_url":"https://api.github.com/users/apache/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/apache/incubator-trafodion","description":"Mirror of Apache Trafodion (Incubating)","fork":false,"url":"https://api.github.com/repos/apache/incubator-trafodion","forks_url":"https://api.github.com/repos/apache/incubator-trafodion/forks","keys_url":"https://api.github.com/repos/apache/incubator-trafodion/keys{/key_id}","collaborators_url":"https://api.github.com/repos/apache/incubator-trafodion/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/apache/incubator-trafodion/teams","hooks_url":"https://api.github.com/repos/apache/incubator-trafodion/hooks","issue_events_url":"https://api.github.com/repos/apache/incubator-trafodion/issues/events{/number}","events_url":"https://api.github.com/repos/apache/incubator-trafodion/events","assignees_url":"https://api.github.com/repos/apache/incubator-trafodion/assignees{/user}","branches_url":"https://api.github.com/repos/apache/incubator-trafodion/branches{/branch}","tags_url":"https://api.github.com/repos/apache/incubator-trafodion/tags","blobs_url":"https://api.github.com/repos/apache/incubator-trafodion/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/apache/incubator-trafodion/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/apache/incubator-trafodion/git/refs{/sha}","trees_url":"https://api.github.com/repos/apache/incubator-trafodion/git/trees{/sha}","statuses_url":"https://api.github.com/repos/apache/incubator-trafodion/statuses/{sha}","languages_url":"https://api.github.com/repos/apache/incubator-trafodion/languages","stargazers_url":"https://api.github.com/repos/apache/incubator-trafodion/stargazers","contributors_url":"https://api.github.com/repos/apache/incubator-trafodion/contributors","subscribers_url":"https://api.github.com/repos/apache/incubator-trafodion/subscribers","subscription_url":"https://api.github.com/repos/apache/incubator-trafodion/subscription","commits_url":"https://api.github.com/repos/apache/incubator-trafodion/commits{/sha}","git_commits_url":"https://api.github.com/repos/apache/incubator-trafodion/git/commits{/sha}","comments_url":"https://api.github.com/repos/apache/incubator-trafodion/comments{/number}","issue_comment_url":"https://api.github.com/repos/apache/incubator-trafodion/issues/comments{/number}","contents_url":"https://api.github.com/repos/apache/incubator-trafodion/contents/{+path}","compare_url":"https://api.github.com/repos/apache/incubator-trafodion/compare/{base}...{head}","merges_url":"https://api.github.com/repos/apache/incubator-trafodion/merges","archive_url":"https://api.github.com/repos/apache/incubator-trafodion/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/apache/incubator-trafodion/downloads","issues_url":"https://api.github.com/repos/apache/incubator-trafodion/issues{/number}","pulls_url":"https://api.github.com/repos/apache/incubator-trafodion/pulls{/number}","milestones_url":"https://api.github.com/repos/apache/incubator-trafodion/milestones{/number}","notifications_url":"https://api.github.com/repos/apache/incubator-trafodion/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/apache/incubator-trafodion/labels{/name}","releases_url":"https://api.github.com/repos/apache/incubator-trafodion/releases{/id}","created_at":"2015-05-27T07:00:05Z","updated_at":"2016-01-11T17:50:32Z","pushed_at":"2016-01-11T17:50:31Z","git_url":"git://github.com/apache/incubator-trafodion.git","ssh_url":"git@github.com:apache/incubator-trafodion.git","clone_url":"https://github.com/apache/incubator-trafodion.git","svn_url":"https://github.com/apache/incubator-trafodion","homepage":null,"size":63380,"stargazers_count":23,"watchers_count":23,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":56,"mirror_url":"git://git.apache.org/incubator-trafodion.git","open_issues_count":9,"forks":56,"open_issues":9,"watchers":23,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/apache/incubator-trafodion/pulls/255"},"html":{"href":"https://github.com/apache/incubator-trafodion/pull/255"},"issue":{"href":"https://api.github.com/repos/apache/incubator-trafodion/issues/255"},"comments":{"href":"https://api.github.com/repos/apache/incubator-trafodion/issues/255/comments"},"review_comments":{"href":"https://api.github.com/repos/apache/incubator-trafodion/pulls/255/comments"},"review_comment":{"href":"https://api.github.com/repos/apache/incubator-trafodion/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/apache/incubator-trafodion/pulls/255/commits"},"statuses":{"href":"https://api.github.com/repos/apache/incubator-trafodion/statuses/90795250785f50cc0538284f22b1b8589a84734a"}}}}