Skip to content

Commit b5198b2

Browse files
committed
fix export error for unsupported databases
1 parent 8c24d9a commit b5198b2

2 files changed

Lines changed: 25 additions & 2 deletions

File tree

internal/turso/tursoServer.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ func (i *TursoServerClient) Export(outputFile string, withMetadata bool, remoteE
459459
}
460460
defer res.Body.Close()
461461
if res.StatusCode != http.StatusOK {
462-
return parseResponseError(res)
462+
return parseExportResponseError(res)
463463
}
464464
var info ExportInfo
465465
if err := json.NewDecoder(res.Body).Decode(&info); err != nil {
@@ -472,7 +472,7 @@ func (i *TursoServerClient) Export(outputFile string, withMetadata bool, remoteE
472472
}
473473
defer exportRes.Body.Close()
474474
if exportRes.StatusCode != http.StatusOK {
475-
return parseResponseError(exportRes)
475+
return parseExportResponseError(exportRes)
476476
}
477477

478478
out, err := os.Create(outputFile)
@@ -497,6 +497,13 @@ func (i *TursoServerClient) Export(outputFile string, withMetadata bool, remoteE
497497
return nil
498498
}
499499

500+
func parseExportResponseError(res *http.Response) error {
501+
if res.StatusCode == http.StatusNotFound {
502+
return errors.New("database export is not available for this database. If this is a Fly-hosted database, use `turso db shell <database> .dump` to create a SQL dump instead")
503+
}
504+
return parseResponseError(res)
505+
}
506+
500507
func (i *TursoServerClient) ExportWAL(outputFile string, info *ExportInfo, remoteEncryptionKey string) (int, error) {
501508
walFile := outputFile + "-wal"
502509
walOut, err := os.Create(walFile)

internal/turso/tursoServer_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -907,6 +907,22 @@ func TestUploadFileMultipart_SmoothProgress(t *testing.T) {
907907
require.True(t, calls[len(calls)-1].Done, "Final callback should have Done=true")
908908
}
909909

910+
func TestExportReportsUnsupportedDatabaseForNotFound(t *testing.T) {
911+
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
912+
require.Equal(t, "/info", r.URL.Path)
913+
w.WriteHeader(http.StatusNotFound)
914+
}))
915+
defer server.Close()
916+
917+
client := createTestClient(t, server.URL)
918+
err := client.Export("unused.db", false, "")
919+
920+
require.Error(t, err)
921+
require.Contains(t, err.Error(), "database export is not available")
922+
require.Contains(t, err.Error(), "Fly-hosted database")
923+
require.NotContains(t, err.Error(), "response failed with status 404 Not Found")
924+
}
925+
910926
// infiniteReader provides unlimited bytes for large file simulation (never returns EOF)
911927
type infiniteReader struct {
912928
bytesRead int64

0 commit comments

Comments
 (0)