postgresql v6.4.2 c funcs and null text pointers...

Поиск
Список
Период
Сортировка
От Walt Bigelow
Тема postgresql v6.4.2 c funcs and null text pointers...
Дата
Msg-id Pine.LNX.3.96.990108122541.2807B-100000@alice.stimpy.com
обсуждение исходный текст
Список pgsql-general
I wrote a c func (ATTACHED BELOW) which takes 2 pointers to type text, and
a bool field.  When a field in a row passed to the func is null, espically
the 'first' field, Postgresql does not return the value that my code
produced.

For example:
First        lastco        nocompany
------------------------------------------
NULL            Walt Bigelow    True

the above data is contained in the database, and when passed to my c func
like:

SELECT lastfirst(first, lastco, nocompany) as name from tbladdress where
agencyid = 691;

I get:
name
----

(1 row)

Not the expected output of 'Walt Bigelow, '.

When I update that row with first = '', the result is correct, but the
value is no null, so it works.

What am I missing??

Any help is appricated,
Walt

-------------
name.c:

#include <string.h>
#include "postgres.h"

#define        COMMA    ", "

text *lastfirst (text *first, text *last, bool nocompany)
{
/* this function will take in the first name, and last name
 * and based on nocompany set the output to either return
 * 'last, first' or just the company name.
 */

int32    ret_size;
text    *return_text;

    if (nocompany) {

        if (first == NULL) {

            ret_size = VARSIZE(last) + sizeof(COMMA);
            return_text = (text *) palloc(ret_size);

            memset(return_text, 0, ret_size);

            VARSIZE(return_text) = ret_size;

            strncpy (VARDATA(return_text), VARDATA(last),
                VARSIZE(last)-VARHDRSZ);

            strncat (VARDATA(return_text), COMMA,
                sizeof(COMMA));

            return (return_text);

        } else {

            ret_size = VARSIZE(first) + VARSIZE(last) +
                sizeof(COMMA) - VARHDRSZ;

            return_text = (text *) palloc(ret_size);

            memset(return_text, 0, ret_size);

            VARSIZE(return_text) = ret_size;

            strncpy (VARDATA(return_text), VARDATA(last), VARSIZE(last)-VARHDRSZ);
            strncat (VARDATA(return_text), COMMA, sizeof(COMMA));
            strncat (VARDATA(return_text), VARDATA(first), VARSIZE(first)-VARHDRSZ);

            return (return_text);

        }

    } else {
        /* Just the company name is returned here */

        ret_size = VARSIZE(last);
        return_text = (text *) palloc(ret_size);

        VARSIZE(return_text) = ret_size;
        strncpy(VARDATA(return_text), VARDATA(last),
            VARSIZE(last)-VARHDRSZ);

        return (return_text);
    }
}




В списке pgsql-general по дате отправления:

Предыдущее
От: Pedro Feliciano Branco
Дата:
Сообщение: subscribe
Следующее
От: "Bryan Field-Elliot"
Дата:
Сообщение: Benchmarking PGSQL against Microsoft SQL 7.0?