-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprocparam.xo.go
81 lines (65 loc) · 1.7 KB
/
procparam.xo.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
// Package models contains the types for schema 'public'.
package models
// Code generated by xo. DO NOT EDIT.
// ProcParam represents a stored procedure param.
type ProcParam struct {
ParamType string // param_type
}
// PgProcParams runs a custom query, returning results as ProcParam.
func PgProcParams(db XODB, schema string, proc string) ([]*ProcParam, error) {
var err error
// sql query
const sqlstr = `SELECT ` +
`UNNEST(STRING_TO_ARRAY(oidvectortypes(p.proargtypes), ', ')) ` + // ::varchar AS param_type
`FROM pg_proc p ` +
`JOIN ONLY pg_namespace n ON p.pronamespace = n.oid ` +
`WHERE n.nspname = $1 AND p.proname = $2`
// run query
XOLog(sqlstr, schema, proc)
q, err := db.Query(sqlstr, schema, proc)
if err != nil {
return nil, err
}
defer q.Close()
// load results
res := []*ProcParam{}
for q.Next() {
pp := ProcParam{}
// scan
err = q.Scan(&pp.ParamType)
if err != nil {
return nil, err
}
res = append(res, &pp)
}
return res, nil
}
// MyProcParams runs a custom query, returning results as ProcParam.
func MyProcParams(db XODB, schema string, proc string) ([]*ProcParam, error) {
var err error
// sql query
const sqlstr = `SELECT ` +
`dtd_identifier AS param_type ` +
`FROM information_schema.parameters ` +
`WHERE ordinal_position > 0 AND specific_schema = ? AND specific_name = ? ` +
`ORDER BY ordinal_position`
// run query
XOLog(sqlstr, schema, proc)
q, err := db.Query(sqlstr, schema, proc)
if err != nil {
return nil, err
}
defer q.Close()
// load results
res := []*ProcParam{}
for q.Next() {
pp := ProcParam{}
// scan
err = q.Scan(&pp.ParamType)
if err != nil {
return nil, err
}
res = append(res, &pp)
}
return res, nil
}