MCPcopy Index your code
hub / github.com/bytebase/bytebase / flattenNoSQLQueryResult

Function flattenNoSQLQueryResult

frontend/src/utils/sqlResult.ts:267–332  ·  view source on GitHub ↗
(
  result: QueryResult
)

Source from the content-addressed store, hash-verified

265};
266
267export const flattenNoSQLQueryResult = (
268 result: QueryResult
269): QueryResult | undefined => {
270 if (
271 result.columnNames.length !== 1 ||
272 result.columnNames[0] !== "result" ||
273 result.rows.length === 0
274 ) {
275 return undefined;
276 }
277
278 const { columns, columnIndexMap } = getNoSQLColumns(result.rows);
279 if (columns.length === 0) {
280 return undefined;
281 }
282
283 const rows: QueryRow[] = [];
284 const columnTypeNames: string[] = Array.from({ length: columns.length }).map(
285 () => "TEXT"
286 );
287
288 for (const row of result.rows) {
289 if (row.values.length !== 1 || row.values[0].kind.case !== "stringValue") {
290 return undefined;
291 }
292
293 // Use lossless-json to preserve precision for large integers (> 2^53-1)
294 const data = losslessParse(
295 row.values[0].kind.value,
296 null,
297 losslessReviver
298 ) as Record<string, unknown>;
299 const values: RowValue[] = Array.from({ length: columns.length }).map(() =>
300 createProto(RowValueSchema, {
301 kind: {
302 case: "nullValue",
303 value: NullValue.NULL_VALUE,
304 },
305 })
306 );
307
308 for (const [key, value] of Object.entries(data)) {
309 const index = columnIndexMap.get(key) ?? 0;
310 const { value: formatted, type } = convertAnyToRowValue(value, true);
311 values[index] = formatted;
312 columnTypeNames[index] = type;
313 }
314
315 rows.push(
316 createProto(QueryRowSchema, {
317 values,
318 })
319 );
320 }
321
322 return createProto(QueryResultSchema, {
323 columnNames: columns,
324 columnTypeNames,

Callers 3

SingleResultViewFunction · 0.90
sqlResult.test.tsFile · 0.90
flattenNoSQLResultFunction · 0.85

Calls 3

getNoSQLColumnsFunction · 0.85
convertAnyToRowValueFunction · 0.85
getMethod · 0.45

Tested by

no test coverage detected