From 121eac6abce6b5c2d0da95ff73e43b804f9208c0 Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Fri, 1 May 2026 17:08:14 -0500 Subject: [PATCH] Update query_runner_service.go --- pkg/services/query_runner_service.go | 36 +++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/pkg/services/query_runner_service.go b/pkg/services/query_runner_service.go index bf1172c..53e288d 100644 --- a/pkg/services/query_runner_service.go +++ b/pkg/services/query_runner_service.go @@ -395,7 +395,19 @@ func mongoListCollections(c models.ConxDb, database string) ([]string, error) { return client.Database(database).ListCollectionNames(ctx, bson.M{}) } -var mongoQueryRe = regexp.MustCompile(`(?s)^db\.(\w[\w\d_]*)\.([\w]+)\((.*)\)\s*$`) +var mongoQueryRe = regexp.MustCompile(`(?s)^db\.(\w[\w\d_]*)\((.*)\)\s*$|^db\.(\w[\w\d_]*)\.(\w+)\((.*)\)\s*$`) + +func mongoStripComments(text string) string { + var lines []string + for _, line := range strings.Split(text, "\n") { + t := strings.TrimSpace(line) + if t == "" || strings.HasPrefix(t, "--") || strings.HasPrefix(t, "//") || strings.HasPrefix(t, "#") { + continue + } + lines = append(lines, t) + } + return strings.TrimSpace(strings.Join(lines, "\n")) +} func mongoExecuteSQL(conx models.ConxDb, database, queryText string) QueryResult { start := time.Now() @@ -420,12 +432,30 @@ func mongoExecuteSQL(conx models.ConxDb, database, queryText string) QueryResult } func mongoRunQuery(ctx context.Context, db *mongo.Database, query string) (*QueryResult, error) { + // Eliminar comentarios y líneas vacías + query = mongoStripComments(query) + m := mongoQueryRe.FindStringSubmatch(query) if m == nil { return nil, fmt.Errorf("sintaxis no reconocida. Use: db.coleccion.metodo({...})") } - collName, method, argsRaw := m[1], strings.ToLower(m[2]), strings.TrimSpace(m[3]) - if collName == "runCommand" { + + var collName, method, argsRaw string + // El regex tiene dos alternativas: + // Alt 1 (m[1],m[2]): db.metodo(args) → para db.runCommand(...) + // Alt 2 (m[3],m[4],m[5]): db.coleccion.metodo(args) + if m[1] != "" { + // db.runCommand(args) + collName = m[1] + method = strings.ToLower(m[1]) + argsRaw = strings.TrimSpace(m[2]) + } else { + collName = m[3] + method = strings.ToLower(m[4]) + argsRaw = strings.TrimSpace(m[5]) + } + + if strings.ToLower(collName) == "runcommand" { return mongoRunCommand(ctx, db, argsRaw) } coll := db.Collection(collName)