TDBC::MySQL "allrows"和"prepare"语句 10.5.11 以上的 Mariadb-libs 上的分段错误



我的问题:

tdbcmyslq 1.1.3版本仅适用于10.5.11之前的mariadb libs和mariadb客户端在更高版本的mariadb-libs上,allrowsprepare语句会导致segfault。

我的代码:

package require tdbc::mysql
namespace import ::tdbc::mysql::*
connection create db -host 127.0.0.1 -port 3306 -passwd mypass -user root -database mydb
#working on all configs
db evaldirect "select product_id from product_to_category where category_id=555"
#seg fault  on mariadb-libs above 10.5.11
db allrows  { select * from category_description }
db prepare  { select * from category_description }

这段代码在最新的Arch linux发行版和最新的Alpine linux服务器上出现错误mariadb客户端和mariadb libs 10.6.9。如果我将mariadb libs降级为10.5.11 ,效果会很好

请你测试一下这个,如果它有错误,请报告错误,或者告诉我如何报告错误。

Upd:

我已经找到错误报告的位置了

https://core.tcl-lang.org/tdbcmysql/tktview?name=79e85de788

应该在tdbc::mysql1.1.5中修复Bug。

解决方法是将MySQL客户端库与MariaDB客户端库一起安装。在基于Debian的系统上,

sudo apt install libmysqlclient21

这不应该干扰MariaDB客户端库,并且tdbc::mysql在MariaDB服务器上与mysql客户端运行良好(或者我早就注意到这个问题了!(

我在stackoverflow中发布了一个问题,稍后在comp.lang.tcl中发布,最后在tdbc中打开了一个票证:mysql:

Win32-tdbc 1.1.2-tcl/tk 8.6.11

你好,正在测试这个脚本(当然,参数不是真实的(:

package require tdbc::mysql
tdbc::mysql::connection create test_conn -user test_admin -passwd   
test_passw -db test -host www.test.com -port 3306
set consulta "SELECT * FROM entes"
set sentencia [test_conn prepare $consulta ]
$sentencia foreach row {
puts $row 
}
$sentencia close
test_conn close

我得到这个

退出代码:3221225477

但是,使用此

放入[test_conn evaldirect$consulta]

我得到了正确的清单。

在测试了libmariadb.dll的几个版本后,我可以确认只有3.1.17有效,3.2.7和3.3.1都失效。

后来我测试了一个";固定的";1.1.4版本,但对我来说也不起作用。

在使用我不起眼的C专业知识调试之后,我将问题追溯到以下行:

if (Tcl_GetCommandInfo(interp, "::tcl::build-info", &info)) {

是在tcl 8.7之后添加的命令tcl::build-info。

对于所有这些,我在另一张票上发表了评论:

我对8.6.xx的测试失败了,但这似乎是由新功能引起的在8.7中。

我无法确认,因为所有Win32二进制发行版都是8.6.xx

我希望有人能在tdbc::mysql中检查并修复这个问题。

Saludos,

Alejandro

相关内容

  • 没有找到相关文章

最新更新