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
|
| Список | 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 по дате отправления: