Sorry I did not want to bother you with the details, I just thought that there 
is smth that I have to do apart from adding the object file name into the 
Makefile.

So, here is the whole picture:


I want to write a function that takes the raw parsetree and rewrites it 
according to my rules, then produce new raw parsetrees.

I will call this function inside backend/tcop/postgres.c . I wrote an header 
file called my_rewriter.h and include this inside postgres.c.

my_writer.h looks like:
-------------------------------------------------
#ifndef UWSDREWRITE_H
#define UWSDREWRITE_H

#include "nodes/pg_list.h"
#include "nodes/nodes.h"

typedef struct my_Projection
{
    char *relname;
    List attnames;
    char *result_relname;

} my_Projection;

.
.
.

extern void  my_analyze(Node *parsetree);
extern void my_rewrite(List *parsetree_list);

#endif  UWSDREWRITE_H
---------------------------------------------


my_writer.c looks like:
-------------------------------------------------
#include "nodes/nodes.h"
#include <stdio.h>
#include "nodes/pg_list.h"


static void my_string_print(char *s);
static void my_int_print(int i);

static void my_string_print(char *s)
{
    FILE *outfile = fopen("/home/?/the_log.txt", "a");
    fprintf(outfile,"\n%s\n", s);
    fflush(stdout);
    fclose(outfile);
}

static void my_int_print(int i)
{
    FILE *outfile = fopen("/home/?/the_log.txt", "a");
    fprintf(outfile,"\n the int is: %d\n", i);
    fflush(stdout);
    fclose(outfile);
}

void UWSD_rewrite(List *parsetree_list)
{
    ListCell   *parsetree_item;
    
    foreach(parsetree_item, parsetree_list)
    {
        Node       *parsetree = (Node *) lfirst(parsetree_item);
        UWSD_analyze(parsetree);
    }
}

void UWSD_analyze(Node *parsetree)
{
    if(nodeTag(parsetree)==T_SelectStmt)
    {
        my_string_print("THIS IS A SELECT STMT");
    }
    else my_int_print(nodeTag(parsetree));
}

-----------------------------------------------------------


Then I wrote a C file called my_writer.c, and do the implementation of 
my_analyze(Node *parsetree) and my_rewrite(List *parsetree_list) functions.  I 
need Node and List structures here, but when I include the necessary header 
files (#include "nodes/pg_list.h", #include "nodes/nodes.h"), I got errors at 
compile time like:

---------------------------------------
../../../src/include/nodes/nodes.h:359: error: syntax error before ¡Node¢
../../../src/include/nodes/nodes.h:398: error: syntax error before ¡equal¢
../../../src/include/nodes/nodes.h:398: warning: type defaults to ¡int¢ in 
declaration of ¡equal¢
../../../src/include/nodes/nodes.h:398: warning: data definition has no type or 
storage class
----------------------------------------

I added the object file my_writer.o  to the  Makefile inside  
backend/parser/Makefile and configured again, but it did not work, what else 
should I do?

regards,

dakotali



Andrew Dunstan <[EMAIL PROTECTED]> wrote: dakotali kasap wrote:
> Hi,
>
> I have one source and one header file which are called my_writer.h and 
> my_writer.c. I included my_writer.h inside postgres.c and do the 
> implementation of declared functions inside my_writer.c. When I 
> include, some other header files of postgresql (like nodes/pg_list.h 
> or nodes/nodes.h) in my_writer.c, it gives me compile errors that are 
> related with these header files of postgresql, although there is no 
> problem.
>
> Do you know why?
>

We're not magicians, nor mindreaders. Unless you give us enough 
information we can't possibly guess. At the very least you need to show 
us what the offending code is and what the compiler error is.

cheers

andrew


 __________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

Reply via email to