From d786919a364c8a18b70d295ce460debbabf80b0b Mon Sep 17 00:00:00 2001 From: Dan Sosedoff Date: Sat, 11 Oct 2014 13:20:16 -0500 Subject: [PATCH] Add endpoint to fetch table indexes --- api.go | 13 ++++++++++++- client.go | 17 ++++++++++++++--- main.go | 3 ++- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/api.go b/api.go index 9f9f78a..d560360 100644 --- a/api.go +++ b/api.go @@ -34,7 +34,7 @@ func API_GetTables(c *gin.Context) { } func API_GetTable(c *gin.Context) { - res, err := dbClient.Query(fmt.Sprintf(SQL_TABLE_SCHEMA, c.Params.ByName("name"))) + res, err := dbClient.Query(fmt.Sprintf(SQL_TABLE_SCHEMA, c.Params.ByName("table"))) if err != nil { c.JSON(400, NewError(err)) @@ -59,6 +59,17 @@ func API_Info(c *gin.Context) { c.JSON(200, res.Format()[0]) } +func API_TableIndexes(c *gin.Context) { + res, err := dbClient.TableIndexes(c.Params.ByName("table")) + + if err != nil { + c.JSON(400, NewError(err)) + return + } + + c.JSON(200, res) +} + func API_HandleQuery(query string, c *gin.Context) { result, err := dbClient.Query(query) diff --git a/client.go b/client.go index 47b88dc..eabc318 100644 --- a/client.go +++ b/client.go @@ -9,9 +9,10 @@ import ( ) const ( - SQL_INFO = "SELECT version(), user, current_database(), inet_client_addr(), inet_client_port(), inet_server_addr(), inet_server_port()" - SQL_TABLES = "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' ORDER BY table_schema,table_name;" - SQL_TABLE_SCHEMA = "SELECT column_name, data_type, is_nullable, character_maximum_length, character_set_catalog, column_default FROM information_schema.columns where table_name = '%s';" + SQL_INFO = "SELECT version(), user, current_database(), inet_client_addr(), inet_client_port(), inet_server_addr(), inet_server_port()" + SQL_TABLES = "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' ORDER BY table_schema,table_name;" + SQL_TABLE_SCHEMA = "SELECT column_name, data_type, is_nullable, character_maximum_length, character_set_catalog, column_default FROM information_schema.columns where table_name = '%s';" + SQL_TABLE_INDEXES = "SELECT indexname, indexdef FROM pg_indexes WHERE tablename = '%s';" ) type Client struct { @@ -58,6 +59,16 @@ func (client *Client) Tables() ([]string, error) { return tables, nil } +func (client *Client) TableIndexes(table string) (*Result, error) { + res, err := client.Query(fmt.Sprintf(SQL_TABLE_INDEXES, table)) + + if err != nil { + return nil, err + } + + return res, err +} + func (client *Client) Query(query string) (*Result, error) { rows, err := client.db.Queryx(query) diff --git a/main.go b/main.go index b40cdb2..03d8e0f 100644 --- a/main.go +++ b/main.go @@ -68,7 +68,8 @@ func main() { router.GET("/info", API_Info) router.GET("/tables", API_GetTables) - router.GET("/tables/:name", API_GetTable) + router.GET("/tables/:table", API_GetTable) + router.GET("/tables/:table/indexes", API_TableIndexes) router.GET("/query", API_RunQuery) router.POST("/query", API_RunQuery) router.GET("/history", API_History)