1 Star 1 Fork 1

c./goframe框架

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
pgsql_tables.go 2.35 KB
一键复制 编辑 原始数据 按行查看 历史
admin 提交于 2024-10-31 23:15 +08:00 . 2024-10-31 结构和常量变量都改成中文
// 版权归GoFrame作者(https://goframe.org)所有。保留所有权利。
//
// 本源代码形式受MIT许可证条款约束。
// 如果未随本文件一同分发MIT许可证副本,
// 您可以在https://github.com/gogf/gf处获取。
// md5:a9832f33b234e3f3
package pgsql
import (
"context"
"fmt"
"regexp"
gdb "gitee.com/go_888/goframe/database/gdb"
gregex "gitee.com/go_888/goframe/text/gregex"
gstr "gitee.com/go_888/goframe/text/gstr"
gutil "gitee.com/go_888/goframe/util/gutil"
)
var (
tablesSqlTmp = `
SELECT
c.relname
FROM
pg_class c
INNER JOIN pg_namespace n ON
c.relnamespace = n.oid
WHERE
n.nspname = '%s'
AND c.relkind IN ('r', 'p')
%s
ORDER BY
c.relname
`
)
func init() {
var err error
tablesSqlTmp, err = gdb.FormatMultiLineSqlToSingle(tablesSqlTmp)
if err != nil {
panic(err)
}
}
// X取表名称数组 获取并返回当前模式下的表格列表。
//主要用于命令行工具链,用于自动生成模型。
// md5:bce161ba95454bf5
func (d *Driver) X取表名称数组(ctx context.Context, schema ...string) (tables []string, err error) {
var (
result gdb.X类型_Result
usedSchema = gutil.X取文本值或取默认值(d.X取当前节点配置().Namespace, schema...)
)
if usedSchema == "" {
usedSchema = defaultSchema
}
// 不要将`usedSchema`作为`SlaveLink`函数的参数。 md5:283541defa4ac558
link, err := d.X底层SlaveLink(schema...)
if err != nil {
return nil, err
}
useRelpartbound := ""
if gstr.X版本号比较GNU格式(d.version(ctx, link), "10") >= 0 {
useRelpartbound = "AND c.relpartbound IS NULL"
}
var query = fmt.Sprintf(
tablesSqlTmp,
usedSchema,
useRelpartbound,
)
query, _ = gregex.X替换文本(`[\n\r\s]+`, " ", gstr.X删首尾空与字符(query))
result, err = d.X底层查询(ctx, link, query)
if err != nil {
return
}
for _, m := range result {
for _, v := range m {
tables = append(tables, v.String())
}
}
return
}
// 检查并返回数据库版本。 md5:39cd1f37b14f728a
func (d *Driver) version(ctx context.Context, link gdb.Link) string {
result, err := d.X底层查询(ctx, link, "SELECT version();")
if err != nil {
return ""
}
if len(result) > 0 {
if v, ok := result[0]["version"]; ok {
matches := regexp.MustCompile(`PostgreSQL (\d+\.\d+)`).FindStringSubmatch(v.String())
if len(matches) >= 2 {
return matches[1]
}
}
}
return ""
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/go_888/goframe.git
git@gitee.com:go_888/goframe.git
go_888
goframe
goframe框架
782a3f7170cf

搜索帮助