Hello,
On 07/02/06 20:07, Matty wrote:
Howdy,
When I attempt to start openser, I am greeted with the following error
(please continue reading for the reason why):
$ openser
[ ..... ]
0(0) usrloc:preload_udomain: Wrong version v2134024 for table
<location>, expected v1001
0(0) register_udomain(): Error while preloading domain 'location'
0(0) pool_remove: Removing connection from the pool
0(0) domain_fixup(): Error while registering domain
I checked the MySQL database (5.22) table and the query being issued,
and they both check out:
$ mysql -uroot -p -hmysql
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 35 to server version: 5.0.22-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use openser
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select table_version from version where table_name='location';
+---------------+
| table_version |
+---------------+
| 1001 |
+---------------+
1 row in set (0.00 sec)
To see what was going on, I added a break point to table_version and
dumped res.rows.values just prior to the function returning:
(gdb) p *res.rows.values
$7 = {type = DB_STRING, nul = 0, val = {int_val = 2134056,
double_val = 4.6067679823539676e-308, time_val = 2134056,
string_val = 0x209028 "1001", str_val = {s = 0x209028 "1001",
len = 0}, blob_val = {s = 0x209028 "1001", len = 0},
bitmap_val = 2134056}}
Upon inspecting the code in table_version, I noticed that the VAL_INT
MACRO is used to return val.int_val to the calling function:
/* From db.c */
ret = VAL_INT(ROW_VALUES(RES_ROWS(res)));
dbf->free_result(connection, res);
return ret;
When I dump val.int_val with gdb, I get differenet results each time
the program runs:
(gdb) p *res.rows.values.val.int_val
$10 = 825241649
I did a bit more digging, and it looks like the 'type' field is set to
2 (DB_STRING) after the query completes, and val.str_val.s contains
the result:
(gdb) x/s res.rows.values.val.str_val.s
0x209028: "1001"
With that said, is there a reason that the "type" field isn't checked
on return from the query, and the appropriate result used? I can
submit the patches I am using to address this problem, but I wanted to
check with the development folks to see why the VAL_INT macro is
always used.
VAL_INT is used because the table_version should be integer number, but
seems not to be in your case. Please check the structure of table 'version'.
describe version;
show create table version;
However, the check of the result type should be done as you suggested, I
will commit it soon.
Cheers,
Daniel
Thanks for any insight,
- Ryan
--
UNIX Administrator
http://daemons.net/~matty
_______________________________________________
Devel mailing list
[email protected]
http://openser.org/cgi-bin/mailman/listinfo/devel
_______________________________________________
Devel mailing list
[email protected]
http://openser.org/cgi-bin/mailman/listinfo/devel