ListWorkSheets returns a list of sheets.
(ctx context.Context, find *FindWorkSheetMessage)
| 97 | |
| 98 | // ListWorkSheets returns a list of sheets. |
| 99 | func (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( |