Dev: add column plain to indicat if paste is plain
This commit is contained in:
		
							parent
							
								
									949ec07e8b
								
							
						
					
					
						commit
						c526fa7862
					
				|  | @ -39,11 +39,15 @@ func initDatabase(db *sql.DB) error { | |||
|         create table if not exists paste ( | ||||
|             id text unique, | ||||
|             content blob, | ||||
|             plain integer, | ||||
|             expire integer | ||||
|         ); | ||||
| 
 | ||||
|         create index if not exists paste_id | ||||
|             on paste ( id ); | ||||
| 
 | ||||
|         create index if not exists paste_expire | ||||
|             on paste ( expire ); | ||||
|     ` | ||||
| 
 | ||||
|     if _, err := db.Exec(sqlStmt); err != nil { | ||||
|  | @ -58,17 +62,22 @@ func (s *StorageSqlite) Close() error { | |||
| } | ||||
| 
 | ||||
| func (s *StorageSqlite) Save(p *storage.Paste) (string, error) { | ||||
|     stmt, err := s.db.Prepare(`insert into paste (id, content, expire) values (?, ?, ?);`) | ||||
|     stmt, err := s.db.Prepare(`insert into paste (id, content, plain, expire) values (?, ?, ?, ?);`) | ||||
|     if err != nil { | ||||
|         return "", err | ||||
|     } | ||||
|     defer stmt.Close() | ||||
| 
 | ||||
|     var id string | ||||
|     var plain = 0 | ||||
| 
 | ||||
|     if p.Plain { | ||||
|         plain = 1 | ||||
|     } | ||||
| 
 | ||||
|     for true { | ||||
|         id = utils.GenerateId(s.idLength) | ||||
|         _, err = stmt.Exec(id, p.Content, p.Expire) | ||||
|         _, err = stmt.Exec(id, p.Content, plain, p.Expire) | ||||
|         if err == nil { | ||||
|             break | ||||
|         } else if errors.Is(err, sqlite3.ErrConstraint) { | ||||
|  | @ -82,7 +91,7 @@ func (s *StorageSqlite) Save(p *storage.Paste) (string, error) { | |||
| } | ||||
| 
 | ||||
| func (s *StorageSqlite) Get(id string) (*storage.Paste, error) { | ||||
|     stmt, err := s.db.Prepare(`select content, expire from paste where id = ?`) | ||||
|     stmt, err := s.db.Prepare(`select content, plain, expire from paste where id = ?`) | ||||
|     if err != nil { | ||||
|         return nil, err | ||||
|     } | ||||
|  | @ -91,13 +100,19 @@ func (s *StorageSqlite) Get(id string) (*storage.Paste, error) { | |||
|     var p storage.Paste | ||||
| 
 | ||||
|     if !rows.Next() { | ||||
|         return nil, errors.New("No such paste") | ||||
|         return nil, nil | ||||
|     } | ||||
| 
 | ||||
|     if err = rows.Scan(&p.Content, &p.Expire); err != nil { | ||||
|     var plain = 0 | ||||
| 
 | ||||
|     if err = rows.Scan(&p.Content, &plain, &p.Expire); err != nil { | ||||
|         return nil, err | ||||
|     } | ||||
| 
 | ||||
|     if plain != 0 { | ||||
|         p.Plain = true | ||||
|     } | ||||
| 
 | ||||
|     return &p, nil | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -35,10 +35,12 @@ func TestSqlite(t * testing.T) { | |||
| func testGetSave(s *sqlite.StorageSqlite, t * testing.T) { | ||||
|     var a = storage.Paste { | ||||
|         Content: []byte("abc"), | ||||
|         Plain: true, | ||||
|         Expire:  time.Now().UnixMilli() + 15 * 1000, | ||||
|     } | ||||
|     var b = storage.Paste { | ||||
|         Content: []byte("def"), | ||||
|         Plain: true, | ||||
|         Expire:  time.Now().UnixMilli() - 15 * 1000, | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ type Storage interface { | |||
| } | ||||
| 
 | ||||
| type Paste struct { | ||||
|     Plain       bool | ||||
|     Content     []byte | ||||
|     Expire      int64 | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 leafee98
						leafee98