@@ -26,6 +26,60 @@ func newIndexQuerier(conn *Connection, collection *clerk.Collection) *indexQueri
26
26
}
27
27
}
28
28
29
+ func (q * indexQuerier ) Count (
30
+ ctx context.Context ,
31
+ query * clerk.Query [* clerk.Index ],
32
+ ) (int64 , error ) {
33
+ var name string
34
+ for _ , filter := range query .Filters {
35
+ switch filter .(type ) {
36
+ case * clerk.Equals :
37
+ if strings .ToLower (filter .Key ()) == "name" {
38
+ name = fmt .Sprintf ("%s_%s" , q .collection .Name , filter .Value ().(string ))
39
+ }
40
+ }
41
+ }
42
+
43
+ selectFn := func (ctx context.Context , dbConn * pgx.Conn ) (pgx.Rows , error ) {
44
+ if name == "" {
45
+ return dbConn .Query (ctx , "SELECT Count(*) FROM pg_indexes WHERE tablename = $1" , q .collection .Name )
46
+ }
47
+
48
+ return dbConn .Query (ctx , "SELECT Count(*) FROM pg_indexes WHERE tablename = $1 AND indexname = $2" , q .collection .Name , name )
49
+ }
50
+
51
+ queryCtx , cancel := q .conn .config .GetContext (ctx )
52
+ defer cancel ()
53
+
54
+ var total int64
55
+
56
+ if err := q .transactor .executeInTransactionIfAvailable (queryCtx , q .collection .Database , func (ctx context.Context ) error {
57
+ dbConn , release , err := q .conn .createOrUseDatabase (ctx , q .collection .Database .Name )
58
+ defer release ()
59
+ if err != nil {
60
+ return err
61
+ }
62
+
63
+ rows , err := selectFn (ctx , dbConn )
64
+ if err != nil {
65
+ return err
66
+ }
67
+ defer rows .Close ()
68
+
69
+ for rows .Next () {
70
+ if err := rows .Scan (& total ); err != nil {
71
+ return err
72
+ }
73
+ }
74
+
75
+ return nil
76
+ }); err != nil {
77
+ return 0 , err
78
+ }
79
+
80
+ return total , nil
81
+ }
82
+
29
83
func (q * indexQuerier ) ExecuteQuery (
30
84
ctx context.Context ,
31
85
query * clerk.Query [* clerk.Index ],
@@ -40,7 +94,7 @@ func (q *indexQuerier) ExecuteQuery(
40
94
}
41
95
}
42
96
43
- createFn := func (ctx context.Context , dbConn * pgx.Conn ) (pgx.Rows , error ) {
97
+ selectFn := func (ctx context.Context , dbConn * pgx.Conn ) (pgx.Rows , error ) {
44
98
if name == "" {
45
99
return dbConn .Query (ctx , "SELECT indexname, indexdef FROM pg_indexes WHERE tablename = $1" , q .collection .Name )
46
100
}
@@ -60,7 +114,7 @@ func (q *indexQuerier) ExecuteQuery(
60
114
return err
61
115
}
62
116
63
- rows , err := createFn (ctx , dbConn )
117
+ rows , err := selectFn (ctx , dbConn )
64
118
if err != nil {
65
119
return err
66
120
}
0 commit comments