Re: how to add my source file?
От | dakotali kasap |
---|---|
Тема | Re: how to add my source file? |
Дата | |
Msg-id | 354060.24913.qm@web31315.mail.mud.yahoo.com обсуждение исходный текст |
Ответ на | Re: how to add my source file? (Bruce Momjian <bruce@momjian.us>) |
Список | pgsql-hackers |
Thanks a lot, it worked:) Actually, I have tried to include "postgres.h" before, but not at the top of the other includes.<br/><br />regards,<br /><br />dakotali<br /><br /><b><i>Bruce Momjian <bruce@momjian.us></i></b> wrote:<blockquoteclass="replbq" style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><br/>Ah, all *.c files must have this at the top before they include _any_<br />other files, including system includefiles:<br /><br /> #include "postgres.h"<br /><br />You will see that all our backend files follow this rule.<br /><br/>---------------------------------------------------------------------------<br /><br />dakotali kasap wrote:<br />>Sorry I did not want to bother you with the details, I just thought that there is smth that I have to do apart fromadding the object file name into the Makefile.<br />> <br />> So, here is the whole picture:<br />> <br />><br />> I want to write a function that takes the raw parsetree and rewrites it according to my rules, then producenew raw parsetrees.<br />> <br />> I will call this function inside backend/tcop/postgres.c . I wrote an headerfile called my_rewriter.h and include this inside postgres.c.<br />> <br />> my_writer.h looks like:<br />>-------------------------------------------------<br />> #ifndef UWSDREWRITE_H<br />> #define UWSDREWRITE_H<br/>> <br />> #include "nodes/pg_list.h"<br />> #include "nodes/nodes.h"<br />> <br />> typedefstruct my_Projection<br />> {<br />> char *relname;<br />> List attnames;<br />> char *result_relname;<br/>> <br />> } my_Projection;<br />> <br />> .<br />> .<br />> .<br />> <br />>extern void my_analyze(Node *parsetree);<br />> extern void my_rewrite(List *parsetree_list);<br />> <br />>#endif UWSDREWRITE_H<br />> ---------------------------------------------<br />> <br />> <br />> my_writer.clooks like:<br />> -------------------------------------------------<br />> #include "nodes/nodes.h"<br/>> #include <br />> #include "nodes/pg_list.h"<br />> <br />> <br />> static void my_string_print(char*s);<br />> static void my_int_print(int i);<br />> <br />> static void my_string_print(char*s)<br />> {<br />> FILE *outfile = fopen("/home/?/the_log.txt", "a");<br />> fprintf(outfile,"\n%s\n",s);<br />> fflush(stdout);<br />> fclose(outfile);<br />> }<br />> <br />> staticvoid my_int_print(int i)<br />> {<br />> FILE *outfile = fopen("/home/?/the_log.txt", "a");<br />> fprintf(outfile,"\nthe int is: %d\n", i);<br />> fflush(stdout);<br />> fclose(outfile);<br />> }<br />> <br/>> void UWSD_rewrite(List *parsetree_list)<br />> {<br />> ListCell *parsetree_item;<br />> <br />> foreach(parsetree_item,parsetree_list)<br />> {<br />> Node *parsetree = (Node *) lfirst(parsetree_item);<br />>UWSD_analyze(parsetree);<br />> }<br />> }<br />> <br />> void UWSD_analyze(Node *parsetree)<br />>{<br />> if(nodeTag(parsetree)==T_SelectStmt)<br />> {<br />> my_string_print("THIS IS A SELECT STMT");<br/>> }<br />> else my_int_print(nodeTag(parsetree));<br />> }<br />> <br />> -----------------------------------------------------------<br/>> <br />> <br />> 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 needNode 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:<br />> <br />> ---------------------------------------<br />>../../../src/include/nodes/nodes.h:359: error: syntax error before ?Node?<br />> ../../../src/include/nodes/nodes.h:398:error: syntax error before ?equal?<br />> ../../../src/include/nodes/nodes.h:398:warning: type defaults to ?int? in declaration of ?equal?<br />> ../../../src/include/nodes/nodes.h:398:warning: data definition has no type or storage class<br />> ----------------------------------------<br/>> <br />> I added the object file my_writer.o to the Makefile inside backend/parser/Makefileand configured again, but it did not work, what else should I do?<br />> <br />> regards,<br/>> <br />> dakotali<br />> <br />> <br />> <br />> Andrew Dunstan wrote: dakotali kasap wrote:<br/>> > Hi,<br />> ><br />> > I have one source and one header file which are called my_writer.hand <br />> > my_writer.c. I included my_writer.h inside postgres.c and do the <br />> > implementationof declared functions inside my_writer.c. When I <br />> > include, some other header files of postgresql(like nodes/pg_list.h <br />> > or nodes/nodes.h) in my_writer.c, it gives me compile errors that are <br/>> > related with these header files of postgresql, although there is no <br />> > problem.<br />> ><br/>> > Do you know why?<br />> ><br />> <br />> We're not magicians, nor mindreaders. Unless yougive us enough <br />> information we can't possibly guess. At the very least you need to show <br />> us what theoffending code is and what the compiler error is.<br />> <br />> cheers<br />> <br />> andrew<br />> <br/>> <br />> __________________________________________________<br />> Do You Yahoo!?<br />> Tired of spam?Yahoo! Mail has the best spam protection around <br />> http://mail.yahoo.com <br />-- <br /> Bruce Momjian bruce@momjian.us<br/> EnterpriseDB http://www.enterprisedb.com<br /><br /> + If your life is a hard drive, Christ can beyour backup. +<br /><br />---------------------------(end of broadcast)---------------------------<br />TIP 5: don't forgetto increase your free space map settings<br /></blockquote><br /><p> __________________________________________________<br/>Do You Yahoo!?<br />Tired of spam? Yahoo! Mail has the best spam protectionaround <br />http://mail.yahoo.com
В списке pgsql-hackers по дате отправления:
Следующее
От: Tom LaneДата:
Сообщение: Re: [PATCHES] [BUGS] BUG #2846: inconsistent and confusing handling of