MCPcopy Create free account
hub / github.com/PostHog/duckgres / executeShellQuery

Function executeShellQuery

server/shell.go:136–224  ·  view source on GitHub ↗

executeShellQuery runs a single SQL statement and prints results to stdout.

(ctx context.Context, db *sql.DB, query string)

Source from the content-addressed store, hash-verified

134
135// executeShellQuery runs a single SQL statement and prints results to stdout.
136func executeShellQuery(ctx context.Context, db *sql.DB, query string) {
137 rows, err := db.QueryContext(ctx, query)
138 if err != nil {
139 fmt.Fprintf(os.Stderr, "ERROR: %s\n", err)
140 return
141 }
142 defer func() { _ = rows.Close() }()
143
144 cols, err := rows.Columns()
145 if err != nil {
146 fmt.Fprintf(os.Stderr, "ERROR: %s\n", err)
147 return
148 }
149
150 if len(cols) == 0 {
151 // DDL/DML with no result columns
152 fmt.Println("OK")
153 return
154 }
155
156 // Collect all rows into string slices
157 var allRows [][]string
158 scanArgs := make([]any, len(cols))
159 scanPtrs := make([]sql.NullString, len(cols))
160 for i := range scanPtrs {
161 scanArgs[i] = &scanPtrs[i]
162 }
163
164 for rows.Next() {
165 if err := rows.Scan(scanArgs...); err != nil {
166 fmt.Fprintf(os.Stderr, "ERROR: %s\n", err)
167 return
168 }
169 row := make([]string, len(cols))
170 for i, ns := range scanPtrs {
171 if ns.Valid {
172 row[i] = ns.String
173 } else {
174 row[i] = "NULL"
175 }
176 }
177 allRows = append(allRows, row)
178 }
179 if err := rows.Err(); err != nil {
180 fmt.Fprintf(os.Stderr, "ERROR: %s\n", err)
181 return
182 }
183
184 // Compute column widths
185 widths := make([]int, len(cols))
186 for i, c := range cols {
187 widths[i] = len(c)
188 }
189 for _, row := range allRows {
190 for i, v := range row {
191 if len(v) > widths[i] {
192 widths[i] = len(v)
193 }

Callers 1

RunShellFunction · 0.85

Calls 8

pluralFunction · 0.85
QueryContextMethod · 0.65
CloseMethod · 0.65
ColumnsMethod · 0.65
NextMethod · 0.65
ScanMethod · 0.65
ErrMethod · 0.65
StringMethod · 0.45

Tested by

no test coverage detected