Re: SQLDA question

Поиск
Список
Период
Сортировка
От Satoshi Nagayasu
Тема Re: SQLDA question
Дата
Msg-id 4C216532.1000300@gmail.com
обсуждение исходный текст
Ответ на SQLDA question  (Satoshi Nagayasu <satoshi.nagayasu@gmail.com>)
Список pgsql-interfaces
Hi all,

Finally, I have found that the values are coming in binary forms,
not string forms. 

So I was misunderstanding.

> (By the way, all values are represented as string form
> in sqlvar.sqldata, right?)

This is wrong.
I have to parse the binary forms when retreiving number values.

So here is my example. If you're interested in, please check it out.

test_desc3.pgc
http://gist.github.com/449338

Regards,


On 2010/06/22 16:57, Satoshi Nagayasu wrote:
> Hi all,
> 
> I'm trying SQLDA features, and I'm encountered strange thing
> which I can't solve.
> 
> In my sample code, I retreived some records from the pg_database
> table, and dump all columns of the records.
> 
> Almost works well, but the "datconnlimit" column shows
> a string "????" instead of the correct value.
> (See below for more details.)
> 
> I think it should show "-1".
> (By the way, all values are represented as string form
> in sqlvar.sqldata, right?)
> 
> Why does it happen? Any suggestions?
> 
> Here are my sample code, the result of execution and the correct table.
> --------------------------------------------------------------
> EXEC SQL include sqlda.h;
> 
> sqlda_t         *sqlda1;
> 
> int
> main(void)
> {
>          EXEC SQL CONNECT TO uptimedb AS con1 USER uptime;
> 
>          EXEC SQL DECLARE cur CURSOR FOR SELECT * FROM pg_database;
>          EXEC SQL OPEN cur;
> 
>          EXEC SQL WHENEVER NOT FOUND DO BREAK;
> 
>          while (1) {
>                  /* Open a cursor and assign descriptor to the cursor  */
>                  EXEC SQL FETCH NEXT FROM cur INTO DESCRIPTOR sqlda1;
> 
>                  while (1) {
>                    int i;
>                    char name_buf[1024];
>                    char var_buf[1024];
> 
>                    for (i=0 ; i<sqlda1->sqld ; i++) {
>                      sqlvar_t v = sqlda1->sqlvar[i];
>                      char *sqldata = v.sqldata;
>                      short sqllen  = v.sqllen;
> 
>                      strncpy(name_buf, v.sqlname.data, v.sqlname.length);
>                      name_buf[v.sqlname.length] = '\0';
> 
>                      strncpy(var_buf, sqldata, sqllen);
>                      var_buf[sqllen] = '\0';
>                      printf("%s = %s, (type:%d)\n", name_buf, var_buf, v.sqltype);
>                    }
>                    printf("\n");
> 
>                    if ( sqlda1->desc_next==NULL )
>                      break;
>                  }
>          }
>          EXEC SQL CLOSE cur;
>          EXEC SQL COMMIT;
>          EXEC SQL DISCONNECT ALL;
>          return (0);
> }
> --------------------------------------------------------------
> [snaga@devwa02 test]$ ./test_desc3
> datname = template1, (type:1)
> datdba = 10, (type:1)
> encoding = , (type:5)
> datistemplate = t, (type:1)
> datallowconn = t, (type:1)
> datconnlimit = ????, (type:5)
> datlastsysoid = 11510, (type:1)
> datfrozenxid = 379, (type:1)
> dattablespace = 1663, (type:1)
> datconfig = , (type:1)
> datacl = {=c/uptime,uptime=CTc/uptime}, (type:1)
> 
> datname = template0, (type:1)
> datdba = 10, (type:1)
> encoding = , (type:5)
> datistemplate = t, (type:1)
> datallowconn = f, (type:1)
> datconnlimit = ????, (type:5)
> datlastsysoid = 11510, (type:1)
> datfrozenxid = 379, (type:1)
> dattablespace = 1663, (type:1)
> datconfig = , (type:1)
> datacl = {=c/uptime,uptime=CTc/uptime}, (type:1)
> 
> datname = postgres, (type:1)
> datdba = 10, (type:1)
> encoding = , (type:5)
> datistemplate = f, (type:1)
> datallowconn = t, (type:1)
> datconnlimit = ????, (type:5)
> datlastsysoid = 11510, (type:1)
> datfrozenxid = 379, (type:1)
> dattablespace = 1663, (type:1)
> datconfig = , (type:1)
> datacl = , (type:1)
> 
> datname = uptimedb, (type:1)
> datdba = 10, (type:1)
> encoding = , (type:5)
> datistemplate = f, (type:1)
> datallowconn = t, (type:1)
> datconnlimit = ????, (type:5)
> datlastsysoid = 11510, (type:1)
> datfrozenxid = 379, (type:1)
> dattablespace = 1663, (type:1)
> datconfig = , (type:1)
> datacl = , (type:1)
> 
> datname = testdb, (type:1)
> datdba = 10, (type:1)
> encoding = , (type:5)
> datistemplate = f, (type:1)
> datallowconn = t, (type:1)
> datconnlimit = ????, (type:5)
> datlastsysoid = 11510, (type:1)
> datfrozenxid = 379, (type:1)
> dattablespace = 1663, (type:1)
> datconfig = , (type:1)
> datacl = , (type:1)
> 
> [snaga@devwa02 test]$
> --------------------------------------------------------------
> uptimedb=# SELECT * FROM pg_database ;
>    datname  | datdba | encoding | datistemplate | datallowconn | datconnlimit | datlastsysoid | datfrozenxid |
dattablespace| datconfig |            datacl
 
>
-----------+--------+----------+---------------+--------------+--------------+---------------+--------------+---------------+-----------+-------------------------------
>   template1 |     10 |        0 | t             | t            |           -1 |         11510 |          379 |
 1663 |           | {=c/uptime,uptime=CTc/uptime}
 
>   template0 |     10 |        0 | t             | f            |           -1 |         11510 |          379 |
 1663 |           | {=c/uptime,uptime=CTc/uptime}
 
>   postgres  |     10 |        0 | f             | t            |           -1 |         11510 |          379 |
 1663 |           |
 
>   uptimedb  |     10 |        6 | f             | t            |           -1 |         11510 |          379 |
 1663 |           |
 
>   testdb    |     10 |        0 | f             | t            |           -1 |         11510 |          379 |
 1663 |           |
 
> (5 rows)
> 
> uptimedb=#
> --------------------------------------------------------------
> 


-- 
NAGAYASU Satoshi <satoshi.nagayasu@gmail.com>


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

Предыдущее
От: Heikki Linnakangas
Дата:
Сообщение: Re: [DOCS] ECPG Documentation Improvement
Следующее
От: Satoshi Nagayasu
Дата:
Сообщение: ECPG/SQLDA question - parsing an "interval" binary form