@@ -670,7 +670,52 @@ func (c *QueryClient) Query(ctx context.Context, query, dbName string) ([]map[st
670670 // Parse the query
671671 parsed , err := c .ParseQuery (query , dbName )
672672 if err != nil {
673- return nil , err
673+ // Fallback: Directly execute the query in DuckDB if ParseQuery fails
674+ // Set DuckDB safety option to disable external access
675+ if _ , errSet := c .DB .Exec ("SET enable_external_access = false;" ); errSet != nil {
676+ return nil , fmt .Errorf ("failed to disable external access: %v" , errSet )
677+ }
678+ if _ , errSet := c .DB .Exec ("SET lock_configuration = true;" ); errSet != nil {
679+ return nil , fmt .Errorf ("failed to lock configuration: %v" , errSet )
680+ }
681+
682+ stmt , err2 := c .DB .Prepare (query )
683+ if err2 != nil {
684+ return nil , fmt .Errorf ("failed to prepare query: %v" , err2 )
685+ }
686+ defer stmt .Close ()
687+
688+ rows , err2 := stmt .Query ()
689+ if err2 != nil {
690+ return nil , fmt .Errorf ("query execution failed: %v" , err2 )
691+ }
692+ defer rows .Close ()
693+
694+ columns , err2 := rows .Columns ()
695+ if err2 != nil {
696+ return nil , fmt .Errorf ("failed to get columns: %v" , err2 )
697+ }
698+
699+ var result []map [string ]interface {}
700+ for rows .Next () {
701+ values := make ([]interface {}, len (columns ))
702+ valuePtrs := make ([]interface {}, len (columns ))
703+ for i := range values {
704+ valuePtrs [i ] = & values [i ]
705+ }
706+ if err := rows .Scan (valuePtrs ... ); err != nil {
707+ return nil , fmt .Errorf ("error scanning row: %v" , err )
708+ }
709+ row := make (map [string ]interface {})
710+ for i , col := range columns {
711+ row [col ] = values [i ]
712+ }
713+ result = append (result , row )
714+ }
715+ if err := rows .Err (); err != nil {
716+ return nil , fmt .Errorf ("error iterating rows: %v" , err )
717+ }
718+ return result , nil
674719 }
675720
676721 // Find relevant files
0 commit comments