Re: how to add my source file?

From: Bruce Momjian <bruce(at)momjian(dot)us>
To: dakotali kasap <dakotalidavid(at)yahoo(dot)com>
Cc: Andrew Dunstan <andrew(at)dunslane(dot)net>, Alvaro Herrera <alvherre(at)commandprompt(dot)com>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: how to add my source file?
Date: 2006-12-27 17:56:56
Message-ID: 200612271756.kBRHuup10052@momjian.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers


Ah, all *.c files must have this at the top before they include _any_
other files, including system include files:

#include "postgres.h"

You will see that all our backend files follow this rule.

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

dakotali kasap wrote:
> 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 <andrew(at)dunslane(dot)net> 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
--
Bruce Momjian bruce(at)momjian(dot)us
EnterpriseDB http://www.enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Andrew Dunstan 2006-12-27 18:06:27 Re: how to add my source file?
Previous Message dakotali kasap 2006-12-27 17:41:40 Re: how to add my source file?