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@yahoo.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!?
οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½@yahoo.gr οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½  οΏ½οΏ½οΏ½ Yahoo! Mail.


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@yahoo.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!?οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½
@yahoo.gr οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½  οΏ½οΏ½οΏ½ 
Yahoo! Mail.
Sun, 7 Dec 2003 00:49:40 +0000 (GMT)
=?iso-8859-7?q?NK?= <noc100@yahoo.gr>
Help! Parser Stage: Get The Columns Of the Table