Hello!

Please help to find bug in code or in my head :)
I just try to select COUNT from table and all the time receive 0 (zerro).
If I try to get value as a string, then I receive value ERROR. Seems it is
not a agregate functions problem, because SUM working properly. Of course
I am not testing all of agregate functions. MySQL is used as a database engine.
I am ready to releate this problem with MySQL, because mysql client utility
receive correct result for count query. Database and client applications
based on different machienes. I try to use this sample on Slackware 10.0 and
database installed also on Slackware 10.0 OS.

I create special demonstration of situation and put it bellow.

[EMAIL PROTECTED]:/data/development$ uname -a
Linux nautilus 2.4.26 #6 Mon Jun 14 19:07:27 PDT 2004 i686 unknown unknown 
GNU/Linux

[EMAIL PROTECTED]:/data/development$ cat sample.cpp
#include <stdio.h>
#include <dbi/dbi.h>

int      main(int argc, char *argv[])
         {
          dbi_conn       conn;
          dbi_result     result;
          unsigned int   fields;

          dbi_initialize(NULL);
          conn = dbi_conn_new("mysql");
          dbi_conn_set_option(conn, "host", "<removed before sending>");
          dbi_conn_set_option(conn, "username", "<removed before sending>");
          dbi_conn_set_option(conn, "password", "<removed before sending>");
          dbi_conn_set_option(conn, "dbname", "<removed before sending>");
          dbi_conn_set_option(conn, "encoding", "UTF-8");
          dbi_conn_connect(conn);

          printf("DBI version = %s\n", dbi_version());
          printf("Query: %s\n", argv[1]);
          result = dbi_conn_query (conn, argv[1]);

          while (dbi_result_next_row(result))
                {
                 printf("Next row:\n");
                 fields = dbi_result_get_numfields(result);
                 while (fields)
                       {
                        switch (dbi_result_get_field_type_idx(result, fields))
                               {
                                case DBI_TYPE_INTEGER:
                                     printf("\tint\tfield %d %s (type %d) = 
%d\n", fields, dbi_result_get_field_name(result, fields), 
dbi_result_get_field_type_idx(result, fields), dbi_result_get_int_idx(result, 
fields));
                                     break;

                                case DBI_TYPE_DECIMAL:
                                     printf("\tdouble\tfield %d %s (type %d) = 
%f\n", fields, dbi_result_get_field_name(result, fields), 
dbi_result_get_field_type_idx(result, fields), 
dbi_result_get_double_idx(result, fields));
                                     break;

                                default:
                                     printf("\tother\tfield %d %s (type %d) = 
%s\n", fields, dbi_result_get_field_name(result, fields), 
dbi_result_get_field_type_idx(result, fields), 
dbi_result_get_string_idx(result, fields));
                               };
                        fields--;
                       };
                };
          dbi_result_free(result);
          dbi_conn_close(conn);
          dbi_shutdown();
          return 0;
         };
[EMAIL PROTECTED]:/data/development$ g++ sample.cpp -g -ggdb -gstabs+ -Wall 
-ldbi -o sample
[EMAIL PROTECTED]:/data/development$ ./sample "select * from CODERS"
DBI version = libdbi v0.8.3
Query: select * from CODERS
Next row:
        double  field 3 hours_of_sleep (type 2) = -10.000000
        other   field 2 NAME (type 3) = Coder 1
        int     field 1 ID (type 1) = 1
Next row:
        double  field 3 hours_of_sleep (type 2) = -5.500000
        other   field 2 NAME (type 3) = Coder 2
        int     field 1 ID (type 1) = 2
Next row:
        double  field 3 hours_of_sleep (type 2) = 0.000000
        other   field 2 NAME (type 3) = Coder 3
        int     field 1 ID (type 1) = 3
Next row:
        double  field 3 hours_of_sleep (type 2) = 5.550000
        other   field 2 NAME (type 3) = Coder 4
        int     field 1 ID (type 1) = 4
Next row:
        double  field 3 hours_of_sleep (type 2) = 11.000000
        other   field 2 NAME (type 3) = Coder 5
        int     field 1 ID (type 1) = 5
[EMAIL PROTECTED]:/data/development$ ./sample "select COUNT(*) from CODERS"
DBI version = libdbi v0.8.3
Query: select COUNT(*) from CODERS
Next row:
        int     field 1 COUNT(*) (type 1) = 0
[EMAIL PROTECTED]:/data/development$ ./sample "select COUNT(*) CNT from CODERS"
DBI version = libdbi v0.8.3
Query: select COUNT(*) CNT from CODERS
Next row:
        int     field 1 CNT (type 1) = 0
[EMAIL PROTECTED]:/data/development$ ./sample "select SUM(hours_of_sleep) CNT 
from CODERS"
DBI version = libdbi v0.8.3
Query: select SUM(hours_of_sleep) CNT from CODERS
Next row:
        double  field 1 CNT (type 2) = 1.050000
[EMAIL PROTECTED]:/data/development$ ./sample "select COUNT(hours_of_sleep) CNT 
from CODERS"
DBI version = libdbi v0.8.3
Query: select COUNT(hours_of_sleep) CNT from CODERS
Next row:
        int     field 1 CNT (type 1) = 0
[EMAIL PROTECTED]:/data/development$ ./sample "select SUM(hours_of_sleep - 
hours_of_sleep + 1) CNT from CODERS"
DBI version = libdbi v0.8.3
Query: select SUM(hours_of_sleep - hours_of_sleep + 1) CNT from CODERS
Next row:
        double  field 1 CNT (type 2) = 5.000000

[EMAIL PROTECTED]:/data/development$ mysql --version
mysql  Ver 14.12 Distrib 5.0.51a, for pc-linux-gnu (i686) using readline 5.0

[EMAIL PROTECTED]:/data/development$ mysql <removed before sending> -h<removed 
before sending> -p
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 62694
Server version: 5.0.18-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> select COUNT(*) CNT from CODERS;
+-----+
| CNT |
+-----+
|   5 |
+-----+
1 row in set (0.01 sec)

mysql> desc CODERS;
+----------------+------------------+------+-----+---------+-------+
| Field          | Type             | Null | Key | Default | Extra |
+----------------+------------------+------+-----+---------+-------+
| ID             | int(10) unsigned | NO   | PRI | 0       |       |
| NAME           | varchar(45)      | YES  |     | NULL    |       |
| hours_of_sleep | double           | YES  |     | NULL    |       |
+----------------+------------------+------+-----+---------+-------+
3 rows in set (0.02 sec)

mysql> select * from CODERS;
+----+---------+----------------+
| ID | NAME    | hours_of_sleep |
+----+---------+----------------+
|  1 | Coder 1 |            -10 |
|  2 | Coder 2 |           -5.5 |
|  3 | Coder 3 |              0 |
|  4 | Coder 4 |           5.55 |
|  5 | Coder 5 |             11 |
+----+---------+----------------+
5 rows in set (0.01 sec)

mysql> quit
Bye

[EMAIL PROTECTED]:/data/development$ ldd sample
        libdbi.so.0 => /usr/local/lib/libdbi.so.0 (0x40016000)
        libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x40025000)
        libm.so.6 => /lib/libm.so.6 (0x400dc000)
        libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x400fe000)
        libc.so.6 => /lib/libc.so.6 (0x40107000)
        libdl.so.2 => /lib/libdl.so.2 (0x40236000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

[EMAIL PROTECTED]:/data/development$ ldd /usr/local/lib/libdbi.so.0
        libdl.so.2 => /lib/libdl.so.2 (0x40010000)
        libm.so.6 => /lib/libm.so.6 (0x40013000)
        libc.so.6 => /lib/libc.so.6 (0x40035000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)

[EMAIL PROTECTED]:/data/development$ ldd /usr/local/lib/dbd/libdbdmysql.so
        libmysqlclient.so.15 => /usr/mysql/lib/libmysqlclient.so.15 (0x40007000)
        libdbi.so.0 => /usr/local/lib/libdbi.so.0 (0x401f5000)
        libc.so.6 => /lib/libc.so.6 (0x40204000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x40333000)
        libnss_files.so.2 => /lib/libnss_files.so.2 (0x40385000)
        libnss_dns.so.2 => /lib/libnss_dns.so.2 (0x4038f000)
        libresolv.so.2 => /lib/libresolv.so.2 (0x40393000)
        libcrypt.so.1 => /lib/libcrypt.so.1 (0x403a5000)
        libnsl.so.1 => /lib/libnsl.so.1 (0x403d2000)
        libm.so.6 => /lib/libm.so.6 (0x403e7000)
        libdl.so.2 => /lib/libdl.so.2 (0x4040a000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)

[EMAIL PROTECTED]:/data/development$ ldd  /usr/mysql/lib/libmysqlclient.so.15
        libpthread.so.0 => /lib/libpthread.so.0 (0x401f2000)
        libnss_files.so.2 => /lib/libnss_files.so.2 (0x40243000)
        libnss_dns.so.2 => /lib/libnss_dns.so.2 (0x4024d000)
        libresolv.so.2 => /lib/libresolv.so.2 (0x40251000)
        libcrypt.so.1 => /lib/libcrypt.so.1 (0x40264000)
        libnsl.so.1 => /lib/libnsl.so.1 (0x40291000)
        libm.so.6 => /lib/libm.so.6 (0x402a6000)
        libc.so.6 => /lib/libc.so.6 (0x402c8000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)

[EMAIL PROTECTED]:/data/development$ which mysql
/usr/mysql/bin/mysql

[EMAIL PROTECTED]:/data/development$ ldd /usr/mysql/bin/mysql
        not a dynamic executable

Best regards,
Alex
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
libdbi-users mailing list
libdbi-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libdbi-users

Reply via email to