Problem with using snprintf in C-function - Mailing list pgsql-general

From Ilya Urikh
Subject Problem with using snprintf in C-function
Date
Msg-id adf175f70910170712r180c7781k2e2f2c83656611b7@mail.gmail.com
Whole thread Raw
Responses Re: Problem with using snprintf in C-function
Re: Problem with using snprintf in C-function
List pgsql-general
Hi,

I have a problem with snprintf function which insert the variables to string with error.
This code I wrote for PostgreSQL 8.3.7 on Fedora 10 and it worked fine. But now I use CentOS 5.3 and PostgreSQL 8.3.8.

Function:
Datum calculateAccount(PG_FUNCTION_ARGS) {
    int64   accountId = PG_GETARG_INT64(0);
    DateADT startDate = PG_GETARG_DATEADT(1);
    DateADT endDate = PG_GETARG_DATEADT(2);

    char    command[QUERY_MAX_SIZE];
    char    startDateStr[MAXDATELEN + 3];
    char    endDateStr[MAXDATELEN + 3];

    snprintf(startDateStr, sizeof (startDateStr), "'%s'", DatumGetCString(DirectFunctionCall1(date_out, startDate)));
    snprintf(endDateStr, sizeof (endDateStr), "'%s'", DatumGetCString(DirectFunctionCall1(date_out, endDate)));
    elog(INFO, startDateStr);
    elog(INFO, endDateStr);
    snprintf(command, sizeof (command),
            "SELECT serviceId, periodStartDate, periodEndDate\
             FROM   accountServiceBaseView\
             WHERE  accountId = %ld AND\
                    periodStartDate <= %s AND\
                    periodEndDate >= %s;",
            accountId, startDateStr, endDateStr);
    elog(INFO, command);

    PG_RETURN_BOOL(true);
}

Result:
select calculateaccount(123, '01-01-2009', '01-02-2009');
INFO:  '2009-01-01'
INFO:  '2009-02-01'
INFO:  SELECT serviceId, periodStartDate, periodEndDate FROM accountServiceBaseView WHERE  accountId = 123 AND periodStartDate <= (null) AND periodEndDate >= '2009-01-01';


If I change the order of parameters to "periodStartDate <= %s AND periodEndDate >= %s AND accountId = %ld", all works fine. Unfortunately this method can not be applied to other functions of my module.


--
Best regards,
Ilya Urikh.

pgsql-general by date:

Previous
From: LaMi
Date:
Subject: Re: How ad an increasing index to a query result?
Next
From: Pavel Stehule
Date:
Subject: Re: Problem with using snprintf in C-function