MCPcopy
hub / github.com/electric-sql/pglite / parseResults

Function parseResults

packages/pglite/src/parse.ts:15–87  ·  view source on GitHub ↗
(
  messages: Array<BackendMessage>,
  defaultParsers: Record<number | string, Parser>,
  options?: QueryOptions,
  blob?: Blob,
)

Source from the content-addressed store, hash-verified

13 * https://www.postgresql.org/docs/current/protocol-flow.html#PROTOCOL-FLOW-SIMPLE-QUERY
14 */
15export function parseResults(
16 messages: Array<BackendMessage>,
17 defaultParsers: Record<number | string, Parser>,
18 options?: QueryOptions,
19 blob?: Blob,
20): Array<Results> {
21 const resultSets: Results[] = []
22 let currentResultSet: Results = { rows: [], fields: [] }
23 let affectedRows = 0
24 const parsers = { ...defaultParsers, ...options?.parsers }
25
26 messages.forEach((message) => {
27 switch (message.name) {
28 case 'rowDescription': {
29 const msg = message as RowDescriptionMessage
30 currentResultSet.fields = msg.fields.map((field) => ({
31 name: field.name,
32 dataTypeID: field.dataTypeID,
33 }))
34 break
35 }
36 case 'dataRow': {
37 if (!currentResultSet) break
38 const msg = message as DataRowMessage
39 if (options?.rowMode === 'array') {
40 currentResultSet.rows.push(
41 msg.fields.map((field, i) =>
42 parseType(field, currentResultSet!.fields[i].dataTypeID, parsers),
43 ),
44 )
45 } else {
46 // rowMode === "object"
47 currentResultSet.rows.push(
48 Object.fromEntries(
49 msg.fields.map((field, i) => [
50 currentResultSet!.fields[i].name,
51 parseType(
52 field,
53 currentResultSet!.fields[i].dataTypeID,
54 parsers,
55 ),
56 ]),
57 ),
58 )
59 }
60 break
61 }
62 case 'commandComplete': {
63 const msg = message as CommandCompleteMessage
64 affectedRows += retrieveRowCount(msg)
65
66 resultSets.push({
67 ...currentResultSet,
68 affectedRows,
69 ...(blob ? { blob } : {}),
70 })
71
72 currentResultSet = { rows: [], fields: [] }

Callers 2

#runQueryFunction · 0.85
#runExecFunction · 0.85

Calls 2

parseTypeFunction · 0.85
retrieveRowCountFunction · 0.85

Tested by

no test coverage detected