Rya*_*n M 23 mysql linux emacs buffer ipc
我经常在Emacs的sql-mysql模式中遇到烦恼,我想知道是否有人有解决方案或更好的解决方法.无论何时我尝试将查询从sql-mode缓冲区发送到活动的SQL进程缓冲区,该查询都不能大于4k.如果它大于4k,则会出现某种中断 - 可能是换行符 - 这会导致mysql解释器在下一行引发错误.
sql-mysql由...实现sql.el,并使用该函数sql-send-region将查询区域(或整个缓冲区)发送到选定的SQL进程缓冲区.sql-send-region电话comint-send-region,然后拨打电话process-send-region.process-send-region是调用一个C函数send_process,无论是在src/process.c在Emacs的源.
看起来这可能只是IPC管道上4k缓冲区产生的限制.由于看起来内核黑客攻击是改变这个大小所必需的,所以这不是一个好的答案.
我想我很困惑的是,如果mysql客户端大于4k,那么通过管道发送的SQL没有被mysql客户端正确地重新组装.有任何想法吗?
Emacs版本:2012-03-25关于allspice的GNU Emacs 23.3.1(x86_64-pc-linux-gnu,GTK +版本2.24.10),由Debian修改
mysql -V:mysql Ver 14.14 Distrib 5.5.24,debian-linux-gnu(x86_64)使用readline 6.2
Sql Mysql选项:-A -C -n(注意我已尝试使用和不使用-n(无缓冲)并且都没有修复此问题)
我怀疑罪魁祸首是Emacs的进程通信代码,用于comint分配PTY与进程通信.虽然这些对于交互式工作很有用,因为它们允许作业控制,但它们也可以在一个块中传输多少数据,而无需插入新行.Emacs也可以被告知使用管道,没有这个限制.
要测试这一点,请启动一个新的Emacs,评估M-: (setq process-connection-type nil)并开始sql-mysql.如果问题消失,这就是你的罪魁祸首.在这种情况下,您将需要使用以下内容:
(add-hook 'sql-mysql-mode-hook
(lambda ()
(set (make-local-variable 'process-connection-type) nil)))
Run Code Online (Sandbox Code Playgroud)
确保process-connection-type仅在MySQL交互缓冲区中重置.
编辑
根据http://tinyurl.com/car439o/,Emacs不再需要使用换行符+ EOF对来中断长PTY输出.虽然提交时间是2010年4月13日,但它只出现在2012年发布的Emacs 24中.这可以解释为什么问题在24.2.1中显然不可复制.如果您在24之前使用Emacs,请尝试升级.
| 归档时间: |
|
| 查看次数: |
740 次 |
| 最近记录: |