MCPcopy Index your code
hub / github.com/bytebase/bytebase / getIndices

Function getIndices

backend/plugin/db/sqlite/sync.go:169–224  ·  view source on GitHub ↗

getIndices gets all indices of a database.

(txn *sql.Tx)

Source from the content-addressed store, hash-verified

167
168// getIndices gets all indices of a database.
169func getIndices(txn *sql.Tx) (map[string][]*storepb.IndexMetadata, error) {
170 indexMap := make(map[string][]*storepb.IndexMetadata)
171 query := `
172 SELECT
173 tbl_name, name, sql
174 FROM sqlite_schema
175 WHERE type ='index' AND name NOT LIKE 'sqlite_%'
176 ORDER BY tbl_name, name;`
177 rows, err := txn.Query(query)
178 if err != nil {
179 return nil, err
180 }
181 defer rows.Close()
182
183 for rows.Next() {
184 var tableName, statement string
185 index := &storepb.IndexMetadata{}
186 if err := rows.Scan(&tableName, &index.Name, &statement); err != nil {
187 return nil, err
188 }
189 index.Unique = strings.Contains(statement, " UNIQUE INDEX ")
190 indexMap[tableName] = append(indexMap[tableName], index)
191 }
192 if err := rows.Err(); err != nil {
193 return nil, util.FormatErrorWithQuery(err, query)
194 }
195
196 for _, indexes := range indexMap {
197 for _, index := range indexes {
198 if err := func() error {
199 query := fmt.Sprintf("pragma index_info(%s);", index.Name)
200 rows, err := txn.Query(query)
201 if err != nil {
202 return err
203 }
204 defer rows.Close()
205 for rows.Next() {
206 var unusedPosition int
207 var unusedCid, expression string
208 if err := rows.Scan(&unusedPosition, &unusedCid, &expression); err != nil {
209 return err
210 }
211 index.Expressions = append(index.Expressions, expression)
212 }
213 if err := rows.Err(); err != nil {
214 return util.FormatErrorWithQuery(err, query)
215 }
216 return nil
217 }(); err != nil {
218 return nil, err
219 }
220 }
221 }
222
223 return indexMap, nil
224}
225
226func getViews(txn *sql.Tx) ([]*storepb.ViewMetadata, error) {

Callers 1

getTablesFunction · 0.85

Calls 5

FormatErrorWithQueryFunction · 0.92
ScanMethod · 0.80
QueryMethod · 0.65
CloseMethod · 0.65
NextMethod · 0.45

Tested by

no test coverage detected