Skip to content

Commit c0edb6c

Browse files
committed
fix: list all databases in the project
1 parent 92bff81 commit c0edb6c

File tree

7 files changed

+41
-18
lines changed

7 files changed

+41
-18
lines changed

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.0.9
1+
1.0.10

api/client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ type Client interface {
5656
// GetDatabase gets the database by instance resource id and the database name.
5757
GetDatabase(ctx context.Context, databaseName string) (*v1pb.Database, error)
5858
// ListDatabase list the databases.
59-
ListDatabase(ctx context.Context, instanceID, filter string) (*v1pb.ListDatabasesResponse, error)
59+
ListDatabase(ctx context.Context, instanceID, filter string) ([]*v1pb.Database, error)
6060
// UpdateDatabase patches the database.
6161
UpdateDatabase(ctx context.Context, patch *v1pb.Database, updateMasks []string) (*v1pb.Database, error)
6262
// BatchUpdateDatabases batch updates databases.

client/database.go

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,37 @@ func (c *client) GetDatabase(ctx context.Context, databaseName string) (*v1pb.Da
2626
return &res, nil
2727
}
2828

29-
// ListDatabase list the databases.
30-
func (c *client) ListDatabase(ctx context.Context, instanceID, filter string) (*v1pb.ListDatabasesResponse, error) {
31-
requestURL := fmt.Sprintf("%s/%s/instances/%s/databases", c.url, c.version, instanceID)
32-
if filter != "" {
33-
requestURL = fmt.Sprintf("%s?filter=%s", requestURL, url.QueryEscape(filter))
34-
}
29+
// ListDatabase list all databases.
30+
func (c *client) ListDatabase(ctx context.Context, instanceID, filter string) ([]*v1pb.Database, error) {
31+
res := []*v1pb.Database{}
32+
pageToken := ""
33+
34+
for true {
35+
resp, err := c.listDatabase(ctx, instanceID, filter, pageToken, 500)
36+
if err != nil {
37+
return nil, err
38+
}
39+
res = append(res, resp.Databases...)
40+
pageToken = resp.NextPageToken
41+
if pageToken == "" {
42+
break
43+
}
44+
}
45+
46+
return res, nil
47+
}
48+
49+
// listDatabase list the databases.
50+
func (c *client) listDatabase(ctx context.Context, instanceID, filter, pageToken string, pageSize int) (*v1pb.ListDatabasesResponse, error) {
51+
requestURL := fmt.Sprintf(
52+
"%s/%s/instances/%s/databases?filter=%s&page_size=%d&page_token=%s",
53+
c.url,
54+
c.version,
55+
instanceID,
56+
url.QueryEscape(filter),
57+
pageSize,
58+
pageToken,
59+
)
3560

3661
req, err := http.NewRequestWithContext(ctx, "GET", requestURL, nil)
3762
if err != nil {

provider/data_source_project.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ func setProject(
300300
project *v1pb.Project,
301301
) diag.Diagnostics {
302302
filter := fmt.Sprintf(`project == "%s"`, project.Name)
303-
listDBResponse, err := client.ListDatabase(ctx, "-", filter)
303+
databases, err := client.ListDatabase(ctx, "-", filter)
304304
if err != nil {
305305
return diag.FromErr(err)
306306
}
@@ -353,7 +353,7 @@ func setProject(
353353
return diag.Errorf("cannot set postgres_database_tenant_mode for project: %s", err.Error())
354354
}
355355

356-
databaseList := flattenDatabaseList(listDBResponse.Databases)
356+
databaseList := flattenDatabaseList(databases)
357357
if err := d.Set("databases", schema.NewSet(databaseHash, databaseList)); err != nil {
358358
return diag.Errorf("cannot set databases for project: %s", err.Error())
359359
}

provider/data_source_project_list.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,12 +125,12 @@ func dataSourceProjectListRead(ctx context.Context, d *schema.ResourceData, m in
125125
proj["postgres_database_tenant_mode"] = project.PostgresDatabaseTenantMode
126126

127127
filter := fmt.Sprintf(`project == "%s"`, project.Name)
128-
response, err := c.ListDatabase(ctx, "-", filter)
128+
databases, err := c.ListDatabase(ctx, "-", filter)
129129
if err != nil {
130130
return diag.FromErr(err)
131131
}
132132

133-
proj["databases"] = flattenDatabaseList(response.Databases)
133+
proj["databases"] = flattenDatabaseList(databases)
134134

135135
iamPolicy, err := c.GetProjectIAMPolicy(ctx, project.Name)
136136
if err != nil {

provider/internal/mock_client.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ func (c *mockClient) GetDatabase(_ context.Context, databaseName string) (*v1pb.
375375
}
376376

377377
// ListDatabase list the databases.
378-
func (c *mockClient) ListDatabase(_ context.Context, instaceID, filter string) (*v1pb.ListDatabasesResponse, error) {
378+
func (c *mockClient) ListDatabase(_ context.Context, instaceID, filter string) ([]*v1pb.Database, error) {
379379
projectID := "-"
380380
if strings.HasPrefix(filter, "project == ") {
381381
projectID = strings.Split(filter, "project == ")[1]
@@ -391,9 +391,7 @@ func (c *mockClient) ListDatabase(_ context.Context, instaceID, filter string) (
391391
databases = append(databases, db)
392392
}
393393

394-
return &v1pb.ListDatabasesResponse{
395-
Databases: databases,
396-
}, nil
394+
return databases, nil
397395
}
398396

399397
// UpdateDatabase patches the database.

provider/resource_project.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -367,12 +367,12 @@ func resourceProjectDelete(ctx context.Context, d *schema.ResourceData, m interf
367367

368368
func updateDatabasesInProject(ctx context.Context, d *schema.ResourceData, client api.Client, projectName string) diag.Diagnostics {
369369
filter := fmt.Sprintf(`project == "%s"`, projectName)
370-
listDB, err := client.ListDatabase(ctx, "-", filter)
370+
databases, err := client.ListDatabase(ctx, "-", filter)
371371
if err != nil {
372372
return diag.Errorf("failed to list database with error: %v", err)
373373
}
374374
existedDBMap := map[string]*v1pb.Database{}
375-
for _, db := range listDB.Databases {
375+
for _, db := range databases {
376376
existedDBMap[db.Name] = db
377377
}
378378

0 commit comments

Comments
 (0)