mirror of
https://github.com/alm494/sql_proxy.git
synced 2026-04-05 11:51:03 +02:00
convertRows moved to convert.go
This commit is contained in:
42
src/handlers/convert.go
Normal file
42
src/handlers/convert.go
Normal file
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user