首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复合SQL查询的go-sqlmock中不应使用args []调用查询

复合SQL查询的go-sqlmock中不应使用args []调用查询
EN

Stack Overflow用户
提问于 2019-09-28 07:22:14
回答 2查看 3.8K关注 0票数 0

我能够成功地模拟查询以从一个表中进行选择,如下所示:

代码语言:javascript
复制
sqlMock.ExpectQuery("^SELECT DISTINCT (.+) FROM myTable1, myTable2").
        WillReturnRows(myResultRows)

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

代码语言:javascript
复制
SELECT EXISTS
        ( SELECT 1
        FROM information_schema.tables
        WHERE table_schema = 'public'
           AND table_name = 'myTable3' );

以下各项的组合:

代码语言:javascript
复制
    existsRows := sqlmock.NewRows([]string{"exists"}).
        AddRow(true)

代码语言:javascript
复制
    slMock.ExpectQuery("^SELECT EXISTS").
        WillReturnRows(existsRows)

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

代码语言:javascript
复制
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......

我正在使用的包:

代码语言:javascript
复制
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"
)

任何想法或指针都是值得感谢的。我在网上找不到相关的例子

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-30 10:37:10

实际上,

代码语言:javascript
复制
    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

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

票数 0
EN

Stack Overflow用户

发布于 2019-09-28 12:27:05

我不确定,但我认为问题出在您查询的缩进中,请尝试删除查询SELECT EXISTS ( SELECT 1 FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'myTable3' );中的换行符或表格

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58142191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档