You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hawq.apache.org by od...@apache.org on 2016/03/30 03:22:39 UTC
incubator-hawq git commit: HAWQ-546. Implemented call of
pxf_get_object_fields for Hive on psql. [Forced Update!]
Repository: incubator-hawq
Updated Branches:
refs/heads/HAWQ-546 4bcbef98c -> cad902769 (forced update)
HAWQ-546. Implemented call of pxf_get_object_fields for Hive on psql.
Project: http://git-wip-us.apache.org/repos/asf/incubator-hawq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-hawq/commit/cad90276
Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/cad90276
Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/cad90276
Branch: refs/heads/HAWQ-546
Commit: cad9027698c2143fc2971d33b3555ea4aaca7f8e
Parents: cac5e17
Author: Oleksandr Diachenko <od...@pivotal.io>
Authored: Tue Mar 29 14:44:05 2016 -0700
Committer: Oleksandr Diachenko <od...@pivotal.io>
Committed: Tue Mar 29 18:22:28 2016 -0700
----------------------------------------------------------------------
src/bin/psql/describe.c | 97 ++++++++++++++++++++++++++++++++++++--------
1 file changed, 80 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/cad90276/src/bin/psql/describe.c
----------------------------------------------------------------------
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index 1672e64..a0debb6 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -42,12 +42,16 @@ static bool describeOneTSConfig(const char *oid, const char *nspname,
static void printACLColumn(PQExpBuffer buf, const char *colname);
static bool isGPDB(void);
static bool isGPDB4200OrLater(void);
-static bool describeHcatalogTable(const char *pattern, bool verbose);
+static bool describePxfTable(const char *profile, const char *pattern, bool verbose);
+static void parsePxfPattern(const char *user_pattern, char **pattern);
/* GPDB 3.2 used PG version 8.2.10, and we've moved the minor number up since then for each release, 4.1 = 8.2.15 */
/* Allow for a couple of future releases. If the version isn't in this range, we are talking to PostgreSQL, not GPDB */
#define mightBeGPDB() (pset.sversion >= 80210 && pset.sversion < 80222)
+#define HiveProfileName "Hive"
+#define HcatalogSourceName "hcatalog"
+
static bool isGPDB(void)
{
static enum { gpdb_maybe, gpdb_yes, gpdb_no } talking_to_gpdb;
@@ -1152,12 +1156,15 @@ describeTableDetails(const char *pattern, bool verbose, bool showSystem)
PQExpBufferData buf;
PGresult *res;
int i;
- char const *hcatalog = "hcatalog";
+ //Hive hook in this method
+ if(strncmp(pattern, HcatalogSourceName, strlen(HcatalogSourceName)) == 0)
+ {
+ char *pxf_pattern = "*";
+ parsePxfPattern(pattern, &pxf_pattern);
+ return describePxfTable(HiveProfileName, pxf_pattern, verbose);
+ }
- //Hcatalog hook in this method
- if(strncmp(pattern, hcatalog, strlen(hcatalog)) == 0)
- return describeHcatalogTable(pattern, verbose);
initPQExpBuffer(&buf);
@@ -4223,40 +4230,96 @@ printACLColumn(PQExpBuffer buf, const char *colname)
static void
-parseExternalPattern(const char *user_pattern, char **profile, char **pattern)
+parsePxfPattern(const char *user_pattern, char **pattern)
{
-
- *profile = strtok(user_pattern, ".");
+ strtok(strdup(user_pattern), ".");
*pattern = strtok(NULL, "/0");
-
}
static bool
-describeHcatalogTable(const char *pattern, bool verbose)
+describePxfTable(const char *profile, const char *pattern, bool verbose)
{
PQExpBufferData buf;
+ PQExpBufferData title;
PGresult *res;
printQueryOpt myopt = pset.popt;
- char *pxf_profile = "*";
- char *pxf_pattern = "*";
-
- parseExternalPattern(pattern, &pxf_profile, &pattern);
+ printTableContent cont;
+ int cols = 0;
+ int total_numrows = 0;
+ char *headers[2];
+ bool printTableInitialized = false;
initPQExpBuffer(&buf);
printfPQExpBuffer(&buf, "SELECT * FROM\n"
- "pxf_get_object_fields('%s', '%s') \n", pxf_profile, pxf_pattern);
+ "pxf_get_item_fields('%s', '%s') \n", profile, pattern);
res = PSQLexec(buf.data, false);
+ total_numrows = PQntuples(res);
termPQExpBuffer(&buf);
if (!res)
return false;
myopt.nullPrint = NULL;
- myopt.title = _("List of Hcatalog tables");
+ myopt.title = _("List of Hive tables");
myopt.translate_header = true;
- printQuery(res, &myopt, pset.queryFout, pset.logfile);
+
+ /* Header */
+ headers[0] = gettext_noop("Column");
+ headers[1] = gettext_noop("Type");
+ cols = 2;
+
+ char *previous_path = NULL;
+ char *previous_itemname = NULL;
+
+
+ for (int i = 0; i < total_numrows; i++)
+ {
+
+ /* First row for current table*/
+ if (previous_itemname == NULL || strncmp(previous_itemname, PQgetvalue(res, i, 1), strlen(previous_itemname)) != 0)
+ {
+
+ if (previous_itemname != NULL)
+ printTable(&cont, pset.queryFout, pset.logfile);
+
+ /* Do clean-up for previous tables if any*/
+ if (printTableInitialized)
+ {
+ printTableCleanup(&cont);
+ termPQExpBuffer(&title);
+ printTableInitialized = false;
+ }
+
+ /* Initialize */
+ initPQExpBuffer(&title);
+
+ printfPQExpBuffer(&title, _("Table \"%s.%s\""), PQgetvalue(res, i, 0), PQgetvalue(res, i, 1));
+ printTableInit(&cont, &myopt, title.data, cols, total_numrows);
+
+ for (int j = 0; j < cols; j++)
+ printTableAddHeader(&cont, headers[j], true, 'l');
+ }
+
+ /* Column */
+ printTableAddCell(&cont, PQgetvalue(res, i, 2), false, false);
+
+ /* Type */
+ printTableAddCell(&cont, PQgetvalue(res, i, 3), false, false);
+
+ previous_path = PQgetvalue(res, i, 0);
+ previous_itemname = PQgetvalue(res, i, 1);
+
+ }
+
+ printTable(&cont, pset.queryFout, pset.logfile);
+
+ if (printTableInitialized)
+ {
+ printTableCleanup(&cont);
+ termPQExpBuffer(&title);
+ }
PQclear(res);
return true;