gpt4 book ai didi

postgresql - Call to Query with args [],在复合 SQL 查询的 go-sqlmock 中不是预期的

转载 作者:行者123 更新时间:2023-11-28 21:36:37 24 4
gpt4 key购买 nike

我能够像这样成功地模拟查询以从一个表中进行选择:

sqlMock.ExpectQuery("^SELECT DISTINCT (.+) FROM myTable1, myTable2").
WillReturnRows(myResultRows)

但我无法模拟以下查询来检查我的 postgres 数据库中表是否存在:

SELECT EXISTS
( SELECT 1
FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name = 'myTable3' );

组合:

    existsRows := sqlmock.NewRows([]string{"exists"}).
AddRow(true)

    slMock.ExpectQuery("^SELECT EXISTS").
WillReturnRows(existsRows)

我也尝试模拟 SELECT 1 但我得到了完全相同的错误:

time="2019-09-27T15:49:41-07:00" level=panic msg="db query" error="call to Query 'SELECT EXISTS\n\t\t( SELECT 1\n\t\tFROM information_schema.tables\n\t\tWHERE table_schema = 'public'\n\t\t   AND table_name = 'myTable3' );' with args [], was not expected, next expectation is: ExpectedExec => expecting Exec or ExecContext which......

我正在使用的软件包:

import (
"database/sql"
"db"
"os"
"testing"

// not explicitly called
_ "github.com/denisenkom/go-mssqldb"
_ "github.com/lib/pq"

"github.com/DATA-DOG/go-sqlmock"
"github.com/sirupsen/logrus"
)

任何想法或指示都将受到赞赏。网上找不到相关例子

最佳答案

其实,


sqlMock.ExpectQuery("SELECT EXISTS \\( SELECT 1 FROM information_schema\\.tables WHERE table_schema = 'public' AND table_name = 'myTable3' \\);").
WillReturnRows(existsRows)

成功了。

这里有更多例子: https://chromium.googlesource.com/external/github.com/DATA-DOG/go-sqlmock/+/e36ad8d068217ee8e4df50408476b153e115e3e6/README.md

我还用了regex101.com

线索是它在等待下一个查询。所以我们知道它根本没有读过这个。我的同事指出了 :)

关于postgresql - Call to Query with args [],在复合 SQL 查询的 go-sqlmock 中不是预期的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58142191/

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