MCPcopy Create free account
hub / github.com/bytebase/bytebase / ListWorkSheets

Method ListWorkSheets

backend/store/worksheet.go:99–193  ·  view source on GitHub ↗

ListWorkSheets returns a list of sheets.

(ctx context.Context, find *FindWorkSheetMessage)

Source from the content-addressed store, hash-verified

97
98// ListWorkSheets returns a list of sheets.
99func (s *Store) ListWorkSheets(ctx context.Context, find *FindWorkSheetMessage) ([]*WorkSheetMessage, error) {
100 if len(find.ProjectIDs) == 0 {
101 return nil, errors.Errorf("empty project filter")
102 }
103 statementField := fmt.Sprintf("LEFT(worksheet.statement, %d)", common.MaxSheetSize)
104 if find.LoadFull {
105 statementField = "worksheet.statement"
106 }
107
108 q := qb.Q().Space(fmt.Sprintf(`
109 SELECT
110 worksheet.resource_id,
111 worksheet.creator,
112 worksheet.created_at,
113 worksheet.updated_at,
114 worksheet.project,
115 worksheet.instance,
116 worksheet.db_name,
117 worksheet.name,
118 %s,
119 worksheet.visibility,
120 OCTET_LENGTH(worksheet.statement),
121 COALESCE(worksheet_organizer.payload, '{}')
122 FROM worksheet
123 LEFT JOIN worksheet_organizer ON worksheet_organizer.worksheet = worksheet.resource_id AND worksheet_organizer.principal = '%s'
124 WHERE TRUE`, statementField, find.PrincipalEmail))
125
126 if len(find.ProjectIDs) == 1 {
127 q.And("worksheet.project = ?", find.ProjectIDs[0])
128 } else {
129 q.And("worksheet.project = ANY(?)", find.ProjectIDs)
130 }
131
132 if filterQ := find.FilterQ; filterQ != nil {
133 q.And("?", filterQ)
134 }
135
136 if v := find.ResourceID; v != nil {
137 q.And("worksheet.resource_id = ?", *v)
138 }
139
140 query, args, err := q.ToSQL()
141 if err != nil {
142 return nil, errors.Wrapf(err, "failed to build sql")
143 }
144
145 rows, err := s.GetDB().QueryContext(ctx, query, args...)
146 if err != nil {
147 return nil, err
148 }
149 defer rows.Close()
150
151 var sheets []*WorkSheetMessage
152 for rows.Next() {
153 var sheet WorkSheetMessage
154 var instanceID, databaseName sql.NullString
155 var payloadBytes []byte
156 if err := rows.Scan(

Callers 2

GetWorkSheetMethod · 0.95
SearchWorksheetsMethod · 0.80

Calls 11

GetDBMethod · 0.95
QFunction · 0.92
ErrorfMethod · 0.80
SpaceMethod · 0.80
AndMethod · 0.80
ToSQLMethod · 0.80
QueryContextMethod · 0.80
ScanMethod · 0.80
UnmarshalMethod · 0.80
CloseMethod · 0.65
NextMethod · 0.45

Tested by

no test coverage detected