Skip to content

Commit dca95ae

Browse files
authored
Add Rename collection (#558)
1 parent d4b7621 commit dca95ae

7 files changed

+138
-0
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
- Bugfix: Force analyzer removal
2727
- Move examples to separate package
2828
- Deprecate ClientConfig.SynchronizeEndpointsInterval due to bug in implementation
29+
- [V1] Add Rename function for collections (single server only).
2930

3031
## [1.6.0](https://github.com/arangodb/go-driver/tree/v1.6.0) (2023-05-30)
3132
- Add ErrArangoDatabaseNotFound and IsExternalStorageError helper to v2

collection.go

+4
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,10 @@ type Collection interface {
7777
// Truncate removes all documents from the collection, but leaves the indexes intact.
7878
Truncate(ctx context.Context) error
7979

80+
// Rename renames the collection (SINGLE server only).
81+
// If the collection does not exist, a NotFoundError is returned.
82+
Rename(ctx context.Context, newName string) error
83+
8084
// All index functions
8185
CollectionIndexes
8286

collection_impl.go

+20
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,26 @@ func (c *collection) Truncate(ctx context.Context) error {
334334
return nil
335335
}
336336

337+
// Rename renames the collection. (SINGLE server only).
338+
// If the collection does not exist, a NotFoundError is returned.
339+
func (c *collection) Rename(ctx context.Context, newName string) error {
340+
req, err := c.conn.NewRequest("PUT", path.Join(c.relPath("collection"), "rename"))
341+
if err != nil {
342+
return WithStack(err)
343+
}
344+
345+
req.SetBody(map[string]string{"name": newName})
346+
347+
resp, err := c.conn.Do(ctx, req)
348+
if err != nil {
349+
return WithStack(err)
350+
}
351+
if err := resp.CheckStatus(200); err != nil {
352+
return WithStack(err)
353+
}
354+
return nil
355+
}
356+
337357
type setCollectionPropertiesOptionsInternal struct {
338358
WaitForSync *bool `json:"waitForSync,omitempty"`
339359
JournalSize int64 `json:"journalSize,omitempty"`

edge_collection_impl.go

+9
Original file line numberDiff line numberDiff line change
@@ -185,3 +185,12 @@ func (c *edgeCollection) Truncate(ctx context.Context) error {
185185
}
186186
return nil
187187
}
188+
189+
// Rename renames the collection (SINGLE server only).
190+
// If the collection does not exist, a NotFoundError is returned.
191+
func (c *edgeCollection) Rename(ctx context.Context, newName string) error {
192+
if err := c.rawCollection().Rename(ctx, newName); err != nil {
193+
return WithStack(err)
194+
}
195+
return nil
196+
}

test/edge_collection_test.go

+47
Original file line numberDiff line numberDiff line change
@@ -278,3 +278,50 @@ func TestSetVertexConstraints(t *testing.T) {
278278
}
279279
}
280280
}
281+
282+
// TestRenameEdgeCollection creates a graph and then adds an edge collection in it and then renames the edge collection.
283+
func TestRenameEdgeCollection(t *testing.T) {
284+
c := createClient(t, nil)
285+
286+
//Run only in single server
287+
skipNoSingle(c, t)
288+
289+
db := ensureDatabase(nil, c, "edge_collection_test", nil, t)
290+
name := "test_rename_edge_collection"
291+
g, err := db.CreateGraphV2(nil, name, nil)
292+
if err != nil {
293+
t.Fatalf("Failed to create graph '%s': %s", name, describe(err))
294+
}
295+
296+
// Now create an edge collection
297+
colName := "rename_edge_collection"
298+
ec, err := g.CreateEdgeCollection(nil, colName, driver.VertexConstraints{From: []string{"person"}, To: []string{"person"}})
299+
if err != nil {
300+
t.Fatalf("CreateEdgeCollection failed: %s", describe(err))
301+
} else if ec.Name() != colName {
302+
t.Errorf("Invalid name, expected '%s', got '%s'", colName, ec.Name())
303+
}
304+
305+
// Collection must exist
306+
if found, err := g.EdgeCollectionExists(nil, colName); err != nil {
307+
t.Errorf("EdgeCollectionExists failed: %s", describe(err))
308+
} else if !found {
309+
t.Errorf("EdgeCollectionExists return false, expected true")
310+
}
311+
312+
// Rename edge collection to new name
313+
newColName := "rename_edge_collection_new"
314+
if err := ec.Rename(nil, newColName); err != nil {
315+
t.Errorf("Rename failed: %s", describe(err))
316+
}
317+
318+
// Original edge collection must NOT exits
319+
if found, err := g.EdgeCollectionExists(nil, colName); err != nil {
320+
t.Errorf("EdgeCollectionExists failed: %s", describe(err))
321+
} else if found {
322+
t.Errorf("EdgeCollectionExists return true, expected false")
323+
}
324+
325+
// Collection must still exist in database
326+
assertCollection(nil, db, newColName, t)
327+
}

test/vertex_collection_test.go

+48
Original file line numberDiff line numberDiff line change
@@ -188,3 +188,51 @@ func TestRemoveVertexCollection(t *testing.T) {
188188
assertCollection(nil, db, "friends", t)
189189

190190
}
191+
192+
// TestRenameVertexCollection creates a graph and then adds an vertex collection in it and then renames the vertex collection.
193+
func TestRenameVertexCollection(t *testing.T) {
194+
c := createClient(t, nil)
195+
196+
//Run only in single server
197+
skipNoSingle(c, t)
198+
199+
db := ensureDatabase(nil, c, "vertex_collection_test", nil, t)
200+
name := "test_rename_vertex_collection"
201+
g, err := db.CreateGraphV2(nil, name, nil)
202+
if err != nil {
203+
t.Fatalf("Failed to create graph '%s': %s", name, describe(err))
204+
}
205+
206+
// Now create an vertex collection
207+
colName := "friends"
208+
vc, err := g.CreateVertexCollection(nil, colName)
209+
if err != nil {
210+
t.Errorf("CreateVertexCollection failed: %s", describe(err))
211+
} else if vc.Name() != "friends" {
212+
t.Errorf("Invalid name, expected 'friends', got '%s'", vc.Name())
213+
}
214+
215+
// Friends vertex collection must exits
216+
if found, err := g.VertexCollectionExists(nil, colName); err != nil {
217+
t.Errorf("VertexCollectionExists failed: %s", describe(err))
218+
} else if !found {
219+
t.Errorf("VertexCollectionExists return false, expected true")
220+
}
221+
222+
// Rename vertex collection
223+
newName := "old_friends"
224+
if err := vc.Rename(nil, newName); err != nil {
225+
t.Errorf("Rename failed: %s", describe(err))
226+
}
227+
228+
// Friends vertex collection must NOT exits
229+
if found, err := g.VertexCollectionExists(nil, colName); err != nil {
230+
t.Errorf("VertexCollectionExists failed: %s", describe(err))
231+
} else if found {
232+
t.Errorf("VertexCollectionExists return true, expected false")
233+
}
234+
235+
// Collection must still exist in database
236+
assertCollection(nil, db, newName, t)
237+
238+
}

vertex_collection_impl.go

+9
Original file line numberDiff line numberDiff line change
@@ -185,3 +185,12 @@ func (c *vertexCollection) Truncate(ctx context.Context) error {
185185
}
186186
return nil
187187
}
188+
189+
// Rename renames the collection (SINGLE server only).
190+
// If the collection does not exist, a NotFoundError is returned.
191+
func (c *vertexCollection) Rename(ctx context.Context, newName string) error {
192+
if err := c.rawCollection().Rename(ctx, newName); err != nil {
193+
return WithStack(err)
194+
}
195+
return nil
196+
}

0 commit comments

Comments
 (0)