Help! Parser Stage: Get The Columns Of the Table

From: NK <noc100(at)yahoo(dot)gr>
To: pgsql-hackers(at)postgresql(dot)org
Subject: Help! Parser Stage: Get The Columns Of the Table
Date: 2003-12-07 00:49:40
Message-ID: 20031207004940.4812.qmail@web40011.mail.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers pgsql-interfaces pgsql-novice pgsql-ports

Dear Friends,

I am trying to modify the parser of the postgresql so as to print all the columns of a table (or to put them in a seperate file) when the parser meets an Insert Statement.
In the <gram.y> file (/src/backend/parser/gram.y) ,

InsertStmt:
INSERT INTO qualified_name insert_rest
{
$4->relation = $3;
$$ = (Node *) $4;
}
;
I can take the table name adding the following line of code

printf($3->relname);


The problem is that in the insert_column_item section (see the last section below) the var n is of type ResTarget and in case of insert and select the ResTarget->Name is null and not the name of the column (in the update command everything is ok- see also the line 371 in the file parsenodes.h ...typedef struct ResTarget {....} ). Could you please tell me the way to take the names of the columns?

Every answer will be appreciated
Thank You Very Much In Advance
NK
noc100(at)yahoo(dot)gr

insert_rest:
VALUES '(' insert_target_list ')'
{
$$ = makeNode(InsertStmt);
$$->cols = NIL;
$$->targetList = $3;
$$->selectStmt = NULL;
}
| DEFAULT VALUES
{
$$ = makeNode(InsertStmt);
$$->cols = NIL;
$$->targetList = NIL;
$$->selectStmt = NULL;
}
| SelectStmt
{
$$ = makeNode(InsertStmt);
$$->cols = NIL;
$$->targetList = NIL;
$$->selectStmt = $1;
}
| '(' insert_column_list ')' VALUES '(' insert_target_list ')'
{
$$ = makeNode(InsertStmt);
$$->cols = $2;
$$->targetList = $6;
$$->selectStmt = NULL;
}
| '(' insert_column_list ')' SelectStmt
{
$$ = makeNode(InsertStmt);
$$->cols = $2;
$$->targetList = NIL;
$$->selectStmt = $4;
}
;
insert_column_list:
insert_column_item { $$ = makeList1($1); }
| insert_column_list ',' insert_column_item
{ $$ = lappend($1, $3); }
;
insert_column_item:
ColId opt_indirection
{
ResTarget *n = makeNode(ResTarget);
n->name = $1;
n->indirection = $2;
n->val = NULL;
$$ = (Node *)n;
}
;

---------------------------------
Do You Yahoo!?
Αποκτήστε την δωρεάν σας(at)yahoo(dot)gr διεύθυνση στο Yahoo! Mail.

Browse pgsql-hackers by date

  From Date Subject
Next Message Bruce Momjian 2003-12-07 01:02:07 Re: Double linked list with one pointer
Previous Message Tom Lane 2003-12-07 00:45:41 Re: 7.4.1 ... slight change of scheduale ...

Browse pgsql-interfaces by date

  From Date Subject
Next Message Joshua D. Drake 2003-12-07 22:20:31 Re: 7.4 and Pygresql
Previous Message dbuechel 2003-12-05 12:33:06 PyGreSQL on Cygwin installation

Browse pgsql-novice by date

  From Date Subject
Next Message Bruce Momjian 2003-12-07 00:53:35 Re: sql command to drop everything
Previous Message Tom Lane 2003-12-06 15:33:51 Re: COMPUTED BY fields or equivalent?

Browse pgsql-ports by date

  From Date Subject
Next Message Tore Halset 2003-12-07 19:17:12 libedit on OS X?
Previous Message Peter Eisentraut 2003-12-04 20:54:57 Re: darwin x86