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