@@ -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 {
35+ resp , err := c .listDatabasePerPage (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+ // listDatabasePerPage list the databases.
50+ func (c * client ) listDatabasePerPage (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 {
0 commit comments