222 lines
4.7 KiB
Go
222 lines
4.7 KiB
Go
package query
|
|
|
|
import (
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
// getDefaultPort returns default port for database type
|
|
func getDefaultPort(dbType string) int {
|
|
switch dbType {
|
|
case "postgres":
|
|
return 5432
|
|
case "mysql":
|
|
return 3306
|
|
case "sqlserver":
|
|
return 1433
|
|
case "mongodb":
|
|
return 27017
|
|
case "sqlite":
|
|
return 0 // SQLite doesn't use port
|
|
default:
|
|
return 5432
|
|
}
|
|
}
|
|
|
|
// getDefaultSchema returns default schema for database type
|
|
func getDefaultSchema(dbType string) string {
|
|
switch dbType {
|
|
case "postgres":
|
|
return "public"
|
|
case "mysql":
|
|
return ""
|
|
case "sqlserver":
|
|
return "dbo"
|
|
case "mongodb":
|
|
return ""
|
|
case "sqlite":
|
|
return ""
|
|
default:
|
|
return "public"
|
|
}
|
|
}
|
|
|
|
// getDefaultSSLMode returns default SSL mode for database type
|
|
func getDefaultSSLMode(dbType string) string {
|
|
switch dbType {
|
|
case "postgres":
|
|
return "disable"
|
|
case "mysql":
|
|
return "false"
|
|
case "sqlserver":
|
|
return "false"
|
|
case "mongodb":
|
|
return "false"
|
|
case "sqlite":
|
|
return ""
|
|
default:
|
|
return "disable"
|
|
}
|
|
}
|
|
|
|
// getDefaultMaxOpenConns returns default max open connections for database type
|
|
func getDefaultMaxOpenConns(dbType string) int {
|
|
switch dbType {
|
|
case "postgres":
|
|
return 25
|
|
case "mysql":
|
|
return 25
|
|
case "sqlserver":
|
|
return 25
|
|
case "mongodb":
|
|
return 100
|
|
case "sqlite":
|
|
return 1 // SQLite only supports one writer at a time
|
|
default:
|
|
return 25
|
|
}
|
|
}
|
|
|
|
// getDefaultMaxIdleConns returns default max idle connections for database type
|
|
func getDefaultMaxIdleConns(dbType string) int {
|
|
switch dbType {
|
|
case "postgres":
|
|
return 25
|
|
case "mysql":
|
|
return 25
|
|
case "sqlserver":
|
|
return 25
|
|
case "mongodb":
|
|
return 10
|
|
case "sqlite":
|
|
return 1 // SQLite only supports one writer at a time
|
|
default:
|
|
return 25
|
|
}
|
|
}
|
|
|
|
// getDefaultConnMaxLifetime returns default connection max lifetime for database type
|
|
func getDefaultConnMaxLifetime(dbType string) string {
|
|
switch dbType {
|
|
case "postgres":
|
|
return "5m"
|
|
case "mysql":
|
|
return "5m"
|
|
case "sqlserver":
|
|
return "5m"
|
|
case "mongodb":
|
|
return "30m"
|
|
case "sqlite":
|
|
return "5m"
|
|
default:
|
|
return "5m"
|
|
}
|
|
}
|
|
|
|
// getEnvFromMap gets value from map with default
|
|
func getEnvFromMap(config map[string]string, key, defaultValue string) string {
|
|
if value, exists := config[key]; exists {
|
|
return value
|
|
}
|
|
return defaultValue
|
|
}
|
|
|
|
// getEnvAsIntFromMap gets int value from map with default
|
|
func getEnvAsIntFromMap(config map[string]string, key string, defaultValue int) int {
|
|
if value, exists := config[key]; exists {
|
|
if intValue, err := strconv.Atoi(value); err == nil {
|
|
return intValue
|
|
}
|
|
}
|
|
return defaultValue
|
|
}
|
|
|
|
// getEnvAsBoolFromMap gets bool value from map with default
|
|
func getEnvAsBoolFromMap(config map[string]string, key string, defaultValue bool) bool {
|
|
if value, exists := config[key]; exists {
|
|
if boolValue, err := strconv.ParseBool(value); err == nil {
|
|
return boolValue
|
|
}
|
|
}
|
|
return defaultValue
|
|
}
|
|
|
|
// parseSchemes parses comma-separated schemes string into a slice
|
|
func parseSchemes(schemesStr string) []string {
|
|
if schemesStr == "" {
|
|
return []string{"http"}
|
|
}
|
|
|
|
schemes := strings.Split(schemesStr, ",")
|
|
for i, scheme := range schemes {
|
|
schemes[i] = strings.TrimSpace(scheme)
|
|
}
|
|
return schemes
|
|
}
|
|
|
|
// parseStaticTokens parses comma-separated static tokens string into a slice
|
|
func parseStaticTokens(tokensStr string) []string {
|
|
if tokensStr == "" {
|
|
return []string{}
|
|
}
|
|
|
|
tokens := strings.Split(tokensStr, ",")
|
|
var result []string
|
|
|
|
for _, token := range tokens {
|
|
token = strings.TrimSpace(token)
|
|
if token != "" {
|
|
result = append(result, token)
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
// parseOrigins parses comma-separated origins string into a slice
|
|
func parseOrigins(originsStr string) []string {
|
|
if originsStr == "" {
|
|
return []string{"http://localhost:8080"} // Default for development
|
|
}
|
|
origins := strings.Split(originsStr, ",")
|
|
for i, origin := range origins {
|
|
origins[i] = strings.TrimSpace(origin)
|
|
}
|
|
return origins
|
|
}
|
|
|
|
// parseDuration parses duration string
|
|
func parseDuration(durationStr string) time.Duration {
|
|
if duration, err := time.ParseDuration(durationStr); err == nil {
|
|
return duration
|
|
}
|
|
return 5 * time.Minute
|
|
}
|
|
|
|
// getEnv gets environment variable with default
|
|
func getEnv(key, defaultValue string) string {
|
|
if value := os.Getenv(key); value != "" {
|
|
return value
|
|
}
|
|
return defaultValue
|
|
}
|
|
|
|
// getEnvAsInt gets environment variable as int with default
|
|
func getEnvAsInt(key string, defaultValue int) int {
|
|
valueStr := getEnv(key, "")
|
|
if value, err := strconv.Atoi(valueStr); err == nil {
|
|
return value
|
|
}
|
|
return defaultValue
|
|
}
|
|
|
|
// getEnvAsBool gets environment variable as bool with default
|
|
func getEnvAsBool(key string, defaultValue bool) bool {
|
|
valueStr := getEnv(key, "")
|
|
if value, err := strconv.ParseBool(valueStr); err == nil {
|
|
return value
|
|
}
|
|
return defaultValue
|
|
}
|