MySQL 代理查询重写

发布于 2025-01-06 14:58:09 字数 617 浏览 0 评论 0原文

我想用 SELECT COUNT(1) 更改所有 SELECT COUNT(*) 查询(对于此用例)。

我有以下 lua 脚本,但它无法正常工作:

function read_query( packet )
   if string.byte(packet) == proxy.COM_QUERY then
     local query = string.sub(packet, 2)
     local replacing = false
     if string.match(string.upper(query), 'COUNT(*)') then
         query = string.gsub(query,'COUNT(*)', 'COUNT(1)')
         replacing = true
     end
     if (replacing) then
         proxy.queries:append(1, string.char(proxy.COM_QUERY) .. query )
         return proxy.PROXY_SEND_QUERY
     end
   end
 end

我做错了什么?

I would like to change all SELECT COUNT(*) queries with SELECT COUNT(1) (for this use case).

I have the following lua script, but it does not work somehow:

function read_query( packet )
   if string.byte(packet) == proxy.COM_QUERY then
     local query = string.sub(packet, 2)
     local replacing = false
     if string.match(string.upper(query), 'COUNT(*)') then
         query = string.gsub(query,'COUNT(*)', 'COUNT(1)')
         replacing = true
     end
     if (replacing) then
         proxy.queries:append(1, string.char(proxy.COM_QUERY) .. query )
         return proxy.PROXY_SEND_QUERY
     end
   end
 end

What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏末染殇 2025-01-13 14:58:09

如果您正在搜索字符串“COUNT(*)”,请记住第二个参数是一个模式而不是一个简单的字符串,您可以使用

抑制正则表达式魔术字符 ^$()%.[]*+ 对 字符串进行转义-?)

在每个非字母数字字符 (%W) 前面加上 % 转义字符,其中 %% 是 % 转义字符,%1 是原始字符,

function strPlainText(strText)
    return strText:gsub("(%W)","%%%1")
end

因此

if string.match(string.upper(query), strPlainText('COUNT(*)')) then

If you are searching for the string "COUNT(*)" remember the second parameter is a pattern and not a simple string, you could escape the string using

Inhibit Regular Expression magic characters ^$()%.[]*+-?)

Prefix every non-alphanumeric character (%W) with a % escape character,where %% is the % escape, and %1 is original character

function strPlainText(strText)
    return strText:gsub("(%W)","%%%1")
end

so

if string.match(string.upper(query), strPlainText('COUNT(*)')) then
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文