我真的很感兴趣学习ocaml,它很快(他们说它可以编译成本机代码)并且它的功能.所以我试着编写像启用mysql事件调度程序一样简单的代码.
#load "unix.cma";;
#directory "+mysql";;
#load "mysql.cma";;
let db = Mysql.quick_connect
~user:"username"
~password:"userpassword"
~database:"databasename"();;
let sql =
"SET GLOBAL EVENT_SCHEDULER=1;"
in
(Mysql.exec db sql);;
Run Code Online (Sandbox Code Playgroud)
它在ocaml解释器上工作正常,但当我尝试将其编译为native(我使用的是ubuntu karmic)时,这些命令都没有工作
ocamlopt -o mysqleventon mysqleventon.ml unix.cmxa mysql.cmxa
ocamlopt -o mysqleventon mysqleventon.ml unix.cma mysql.cma
Run Code Online (Sandbox Code Playgroud)
我也试过了
ocamlc -c mysqleventon.ml unix.cma mysql.cma
Run Code Online (Sandbox Code Playgroud)
所有这些都产生了同样的信息
File "mysqleventon.ml", line 1, characters 0-1:
Error: Syntax error
Run Code Online (Sandbox Code Playgroud)
然后我试图删除"#load",所以代码就是这样
let db = Mysql.quick_connect
~user:"username"
~password:"userpassword"
~database:"databasename"();;
let sql =
"SET GLOBAL EVENT_SCHEDULER=1;"
in
(Mysql.exec db sql);;
Run Code Online (Sandbox Code Playgroud)
ocamlopt结果消息
File "mysqleventon.ml", line 1, characters 9-28:
Error: …Run Code Online (Sandbox Code Playgroud) 我正在尝试为伪数组变量创建一个表.看起来像
CREATE TABLE IF NOT EXISTS `MyArray`.`ArrayTable` (
`ID` INT UNSIGNED NOT NULL COMMENT 'Hash value of SessionID + ArrayName' ,
`SessionID` INT UNSIGNED NOT NULL ,
`ArrayName` CHAR(26) NOT NULL
COMMENT '32 digit char - 6 digit longest process id (assumtion)' ,
`Index` INT UNSIGNED NOT NULL ,
`Value` TEXT NOT NULL ,
PRIMARY KEY (`ID`, `SessionID`) )
ENGINE = MyISAM;
Run Code Online (Sandbox Code Playgroud)
这个表还没有标准化,"希望这会让它更容易理解:)
为了避免客户端之间的冲突,客户端会话之间应该有区别.出于这个原因,我认为需要知道当前的会话/进程ID(就像"SHOW PROCESSLIST"),但真的需要知道IN WHICH进程的查询是什么?