Skip to content
This repository was archived by the owner on Mar 4, 2025. It is now read-only.

Commit 44f4c64

Browse files
committed
common: refactor sqlite table and view query functions
There used to be just a single "Tables()" function, which returned a list of both tables and views present in a SQLite database. This has been renamed to "TablesAndViews()" to clarify what it does, and the code inside it has been broken out into two new separate "Tables()" and "Views()" functions so they can be called from the API.
1 parent 0a859dc commit 44f4c64

File tree

4 files changed

+43
-22
lines changed

4 files changed

+43
-22
lines changed

common/sqlite.go

Lines changed: 37 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -868,11 +868,10 @@ func SQLiteVersionNumber() int32 {
868868
return sqlite.VersionNumber()
869869
}
870870

871-
// Tables returns the list of tables and views in the SQLite database.
872-
func Tables(sdb *sqlite.Conn, dbName string) ([]string, error) {
873-
// TODO: It might be useful to cache this info in PG or memcached
871+
// Tables returns the list of tables in the SQLite database.
872+
func Tables(sdb *sqlite.Conn) (tbl []string, err error) {
874873
// Retrieve the list of tables in the database
875-
tables, err := sdb.Tables("")
874+
tbl, err = sdb.Tables("")
876875
if err != nil {
877876
// An error occurred, so get the extended error code
878877
if cerr, ok := err.(sqlite.ConnError); ok {
@@ -881,28 +880,53 @@ func Tables(sdb *sqlite.Conn, dbName string) ([]string, error) {
881880
if extCode == 5 { // Magic number which (in this case) means "database is locked"
882881
// Wait 3 seconds then try again
883882
time.Sleep(3 * time.Second)
884-
tables, err = sdb.Tables("")
883+
tbl, err = sdb.Tables("")
885884
if err != nil {
886885
log.Printf("Error retrieving table names: %s", err)
887-
return nil, err
886+
return
888887
}
889888
} else {
890889
log.Printf("Error retrieving table names: %s", err)
891-
return nil, err
890+
return
892891
}
893892
} else {
894893
log.Printf("Error retrieving table names: %s", err)
895-
return nil, err
894+
return
896895
}
897896
}
898-
if len(tables) == 0 {
897+
return
898+
}
899+
900+
// TablesAndViews returns the list of tables and views in the SQLite database.
901+
func TablesAndViews(sdb *sqlite.Conn, dbName string) (list []string, err error) {
902+
// TODO: It might be useful to cache this info in PG or memcached
903+
// Retrieve the list of tables in the database
904+
list, err = Tables(sdb)
905+
if err != nil {
906+
return
907+
}
908+
if len(list) == 0 {
899909
// No table names were returned, so abort
900910
log.Printf("The database '%s' doesn't seem to have any tables. Aborting.", dbName)
901-
return nil, err
911+
return
902912
}
903913

904914
// Retrieve the list of views in the database
905-
vw, err := sdb.Views("")
915+
var vw []string
916+
vw, err = Views(sdb)
917+
if err != nil {
918+
return
919+
}
920+
921+
// Merge the table and view lists
922+
list = append(list, vw...)
923+
return
924+
}
925+
926+
// Views returns the list of views in the SQLite database.
927+
func Views(sdb *sqlite.Conn) (vw []string, err error) {
928+
// Retrieve the list of views in the database
929+
vw, err = sdb.Views("")
906930
if err != nil {
907931
log.Printf("Error retrieving view names: %v\n", err)
908932
if cerr, ok := err.(sqlite.ConnError); ok {
@@ -913,10 +937,7 @@ func Tables(sdb *sqlite.Conn, dbName string) ([]string, error) {
913937
} else {
914938
log.Printf("Expected a connection error, but got a '%v'\n", reflect.TypeOf(cerr))
915939
}
916-
return nil, err
940+
return
917941
}
918-
919-
// Merge the table and view arrays
920-
tables = append(tables, vw...)
921-
return tables, nil
942+
return
922943
}

webui/main.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2116,7 +2116,7 @@ func deleteCommitHandler(w http.ResponseWriter, r *http.Request) {
21162116
defer sdb.Close()
21172117

21182118
// Retrieve the list of tables in the database
2119-
sTbls, err := com.Tables(sdb, fmt.Sprintf("%s%s%s", dbOwner, dbFolder, dbName))
2119+
sTbls, err := com.TablesAndViews(sdb, fmt.Sprintf("%s%s%s", dbOwner, dbFolder, dbName))
21202120
if err != nil {
21212121
errorPage(w, r, http.StatusInternalServerError, err.Error())
21222122
return
@@ -4086,7 +4086,7 @@ func saveSettingsHandler(w http.ResponseWriter, r *http.Request) {
40864086
// Retrieve the list of tables in the database
40874087
// TODO: Update this to handle having a default table "per branch". Even though it would mean looping here, it
40884088
// TODO seems like the only way to be flexible and accurate enough for our purposes
4089-
tables, err := com.Tables(sdb, fmt.Sprintf("%s%s%s", dbOwner, dbFolder, dbName))
4089+
tables, err := com.TablesAndViews(sdb, fmt.Sprintf("%s%s%s", dbOwner, dbFolder, dbName))
40904090
if err != nil {
40914091
errorPage(w, r, http.StatusInternalServerError, err.Error())
40924092
return
@@ -4523,7 +4523,7 @@ func tableNamesHandler(w http.ResponseWriter, r *http.Request) {
45234523
defer sdb.Close()
45244524

45254525
// Retrieve the list of tables in the database
4526-
sTbls, err := com.Tables(sdb, fmt.Sprintf("%s%s%s", dbOwner, dbFolder, dbName))
4526+
sTbls, err := com.TablesAndViews(sdb, fmt.Sprintf("%s%s%s", dbOwner, dbFolder, dbName))
45274527
if err != nil {
45284528
w.WriteHeader(http.StatusInternalServerError)
45294529
return

webui/pages.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1656,7 +1656,7 @@ func databasePage(w http.ResponseWriter, r *http.Request, dbOwner string, dbFold
16561656
defer sdb.Close()
16571657

16581658
// Retrieve the list of tables and views in the database
1659-
tables, err := com.Tables(sdb, dbName)
1659+
tables, err := com.TablesAndViews(sdb, dbName)
16601660
if err != nil {
16611661
errorPage(w, r, http.StatusInternalServerError, err.Error())
16621662
return
@@ -3124,7 +3124,7 @@ func settingsPage(w http.ResponseWriter, r *http.Request) {
31243124
defer sdb.Close()
31253125

31263126
// Retrieve the list of tables in the database
3127-
pageData.DB.Info.Tables, err = com.Tables(sdb, fmt.Sprintf("%s%s%s", dbOwner, dbFolder, dbName))
3127+
pageData.DB.Info.Tables, err = com.TablesAndViews(sdb, fmt.Sprintf("%s%s%s", dbOwner, dbFolder, dbName))
31283128
if err != nil {
31293129
errorPage(w, r, http.StatusInternalServerError, err.Error())
31303130
return

webui/vis.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ func visualisePage(w http.ResponseWriter, r *http.Request) {
260260
defer sdb.Close()
261261

262262
// Retrieve the list of tables and views in the database
263-
tables, err := com.Tables(sdb, dbName)
263+
tables, err := com.TablesAndViews(sdb, dbName)
264264
if err != nil {
265265
errorPage(w, r, http.StatusInternalServerError, err.Error())
266266
return

0 commit comments

Comments
 (0)