Now for the VARDATA, VARSIZE, and VARHDRSZ stuff
От | Lonnie Cumberland |
---|---|
Тема | Now for the VARDATA, VARSIZE, and VARHDRSZ stuff |
Дата | |
Msg-id | 20010415212755.2676.qmail@web12503.mail.yahoo.com обсуждение исходный текст |
Ответ на | Re: Re: [SQL] g++ not working for postgresql extension languages? (Peter Eisentraut <peter_e@gmx.net>) |
Ответы |
Re: Now for the VARDATA, VARSIZE, and VARHDRSZ stuff
(Peter Eisentraut <peter_e@gmx.net>)
|
Список | pgsql-interfaces |
Hello All, That fixed the problem I think as I am no longer getting the loading errors and the functions appear to be being called. I now have a simple question about the use of these VARDATA() VARSIZE() and VARHDRSZ() wrappers I tried to make the modifications using the manual for reference, but there seems to be little information related to these VAR???() wrappers and my simple routine went off into never-never land. I have a simple function that used to work with individual pointers. My original simple routine: ------------------------------------------------------------------------------ void public_to_enc(char *public_userid, char *enc_userid ) { char ch[3]; int i,j; char buff[5]; int sp=0; // Clear out the public_userid place strcpy(enc_userid,""); while(*public_userid!='\0') { ch[0]=*public_userid; ch[1]=*(public_userid+1); i=atoi(ch); j=i; sp++; // printf("48 sect --- i=%d\n",i); if((i>=1)&&(i<=10)) { i+=47; } else // printf("65 sect --- i=%d\n",i); if((i>=11)&&(i<=36)) { i+=54; } else // printf("97 sect --- i=%d\n",i); if((i>=37)&&(i<=62)) { i+=60; } else printf("public_enc: ERROR !!!!\n\n"); sprintf(buff,"%c",i); // Add the value to our string strcat(enc_userid,buff); public_userid+=2; } } ------------------------------------------------------------------------------ and my new modified routine of the above: ------------------------------------------------------------------------------ text * encode(text *enc_userid) { int32 new_text_size = VARSIZE(enc_userid) * 2 - VARHDRSZ; text *new_text = (text *) palloc(new_text_size); // Clearout the public_userid place memset((void *) new_text, 0, new_text_size); VARSIZE(new_text) = new_text_size; //range values // (0 - 9) ---- dec 48 - 57 ascii // (A - Z) ---- dec 65 - 90 ascii // (a - z) ---- dec 97 - 122 ascii char ch; int i,j; char buff[5]; int sp=0; while(VARDATA(enc_userid)!='\0') { ch=VARDATA(enc_userid); i=ch; j=i; sp++; // printf("48 sect --- i=%d\n",i); if((i>=48)&&(i<=57)) { i-=47; } // printf("65 sect --- i=%d\n",i); else if((i>=65)&&(i<=90)) { i-=54; } else // printf("97 sect --- i=%d\n",i); if((i>=97)&&(i<=122)) { i-=60; } else printf("public encoder: ERROR !!!!\n\n"); sprintf(buff,"%02d",i); // Add the value to our string strcat(VARDATA(new_text),VARDATA(buff)); enc_userid++; } // Add the value to our string strcat(VARDATA(new_text),VARDATA("\0")); return (new_text); } ------------------------------------------------------------------------------- The problem is that I do not think that I have converted the second version over correctly and would like to know if someone could take a look to see what might be wrong. Also, I just wanted to say that I really appreciate all of the help that you you have given me to get started using this interface with PostgreSQL. Best Regards, Lonnie --- Peter Eisentraut <peter_e@gmx.net> wrote: > Lonnie Cumberland writes: > > > trdata=# select concat_text('a','d'); > > ERROR: Load of file /test/trfuncs.so failed: /test/trfuncs.so: undefined > > symbol: MemoryContextAlloc__FP17MemoryContextDataUi > > Name mangling at its finest. You need to put extern "C" around all > #include's of PostgreSQL header files as well. > > -- > Peter Eisentraut peter_e@gmx.net http://funkturm.homeip.net/~peter > __________________________________________________ Do You Yahoo!? Get email at your own domain with Yahoo! Mail. http://personal.mail.yahoo.com/
В списке pgsql-interfaces по дате отправления:
Предыдущее
От: Peter EisentrautДата:
Сообщение: Re: Re: [SQL] g++ not working for postgresql extension languages?