gpt4 book ai didi

mysql - 如何将大于 4k 的查询从 SQL 缓冲区发送到 Emacs 中的 sql-mysql 缓冲区?

转载 作者:IT老高 更新时间:2023-10-28 23:47:55 25 4
gpt4 key购买 nike

我经常在 Emacs 的 sql-mysql 模式中遇到麻烦,我想知道是否有人有解决方案或更好的解决方法。每当我尝试将查询从 sql-mode 缓冲区发送到事件的 SQL 进程缓冲区时,该查询都不能大于 4k。如果它大于 4k,似乎插入了某种中断 - 可能是换行符,这会导致 mysql 解释器在下一行抛出错误。

sql-mysqlsql.el实现,使用函数sql-send-region发送查询区域(或整个buffers) 到选定的 SQL 进程缓冲区。 sql-send-region 调用 comint-send-region,后者又调用 process-send-regionprocess-send-region是一个调用send_process的C函数,都在Emacs源码的src/process.c中。

看起来这可能只是 IPC 管道上的 4k 缓冲区产生的限制。由于似乎必须修改内核才能更改此大小,所以这不是一个很好的答案。

我想我很困惑的是,如果它大于 4k,为什么通过管道发送的 SQL 不能被 mysql 客户端正确地重新组装。有什么想法吗?

Emacs 版本:GNU Emacs 23.3.1 (x86_64-pc-linux-gnu, GTK+ Version 2.24.10) of 2012-03-25 on allspice, Debian 修改

mysql -V: mysql Ver 14.14 Distrib 5.5.24, for debian-linux-gnu (x86_64) 使用 readline 6.2

Sql Mysql 选项:-A -C -n(注意我已经尝试过使用和不使用 -n(无缓冲)但都没有解决这个问题)

最佳答案

我怀疑罪魁祸首是 Emacs 的进程通信代码,由 comint 使用,分配 PTY 以与进程通信。虽然这些对于交互式工作很有用,因为它们允许作业控制,但它们在没有换行符的情况下可以在一个 block 中传输多少数据方面也受到限制。 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)))

确保 process-connection-type 仅在 MySQL 交互缓冲区中重置。


编辑

根据 http://tinyurl.com/car439o/ ,Emacs 不再费心用换行符+EOF 对来打断长的 PTY 输出。虽然提交时间是 2010-04-13,但它只出现在 2012 年发布的 Emacs 24 中。这可以解释为什么问题在 24.2.1 中显然无法重现。如果您使用的是 24 之前的 Emacs,请尝试升级。

关于mysql - 如何将大于 4k 的查询从 SQL 缓冲区发送到 Emacs 中的 sql-mysql 缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11955360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com