diff --git a/src/handlers/convert.go b/src/handlers/convert.go new file mode 100644 index 0000000..110fd59 --- /dev/null +++ b/src/handlers/convert.go @@ -0,0 +1,42 @@ +package handlers + +import ( + "database/sql" + "sql-proxy/src/db" +) + +// Converts SQL query result to json +func convertRows(rows *sql.Rows, columns *[]string) (*[]map[string]interface{}, uint32, bool) { + var rowsCount uint32 = 0 + colsCount := len(*columns) + tableData := make([]map[string]interface{}, 0) + values := make([]interface{}, colsCount) + valuePtrs := make([]interface{}, colsCount) + exceedsMaxRows := false + + for rows.Next() { + for i := range *columns { + valuePtrs[i] = &values[i] + } + rows.Scan(valuePtrs...) + entry := make(map[string]interface{}) + for i, col := range *columns { + var v interface{} + val := values[i] + b, ok := val.([]byte) + if ok { + v = string(b) + } else { + v = val + } + entry[col] = v + } + if rowsCount > db.MaxRows { + exceedsMaxRows = true + break + } + tableData = append(tableData, entry) + rowsCount++ + } + return &tableData, rowsCount, exceedsMaxRows +} diff --git a/src/handlers/query.go b/src/handlers/query.go index d858198..0593d18 100644 --- a/src/handlers/query.go +++ b/src/handlers/query.go @@ -1,7 +1,6 @@ package handlers import ( - "database/sql" "encoding/json" "net/http" @@ -87,39 +86,3 @@ func ExecuteQuery(w http.ResponseWriter, r *http.Request) { http.Error(w, "Invalid SQL query", http.StatusBadRequest) } } - -// Converts SQL query result to json -func convertRows(rows *sql.Rows, columns *[]string) (*[]map[string]interface{}, uint32, bool) { - var rowsCount uint32 = 0 - colsCount := len(*columns) - tableData := make([]map[string]interface{}, 0) - values := make([]interface{}, colsCount) - valuePtrs := make([]interface{}, colsCount) - exceedsMaxRows := false - - for rows.Next() { - for i := range *columns { - valuePtrs[i] = &values[i] - } - rows.Scan(valuePtrs...) - entry := make(map[string]interface{}) - for i, col := range *columns { - var v interface{} - val := values[i] - b, ok := val.([]byte) - if ok { - v = string(b) - } else { - v = val - } - entry[col] = v - } - if rowsCount > db.MaxRows { - exceedsMaxRows = true - break - } - tableData = append(tableData, entry) - rowsCount++ - } - return &tableData, rowsCount, exceedsMaxRows -}