Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions resources/evaluate.q
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@
text
};
generateColumns:{[removeTrailingNewline; toString; originalType; isAtomic; isKey; data; name]
attributes: attr data;
types: $[
isAtomic;
originalType;
Expand Down
10 changes: 7 additions & 3 deletions src/models/queryResult.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,14 @@ export const queryConstants = {
export interface StructuredTextColumns {
name: string;
type: string;
values: any[];
order: any[];
values: string[] | string;
order:
| number[] /* ascending indexes if the column is sorted */
| string /* error message if sorting is not possible */;
}

export interface StructuredTextResults {
columns: StructuredTextColumns[];
columns: StructuredTextColumns[] | StructuredTextColumns;
/* note: values array length may differ */
count: number;
}
7 changes: 4 additions & 3 deletions src/services/resultsPanelProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,8 @@ export class KdbResultsViewProvider implements WebviewViewProvider {

columnsArray.forEach((column) => {
const { name, values } = column;
values.forEach((value, index) => {
const valuesArray = Array.isArray(values) ? values : [values];
valuesArray.forEach((value, index) => {
rowData[index][name] = decodeQUTF(value);
});
});
Expand All @@ -226,7 +227,7 @@ export class KdbResultsViewProvider implements WebviewViewProvider {

const columnDefs = columnsArray.map((column) => {
const sanitizedKey = this.sanitizeString(column.name);
const cellDataType = this.kdbToAgGridCellType(column.type);
const cellDataType = "text";
const headerName = column.type
? `${sanitizedKey} [${column.type}]`
: sanitizedKey;
Expand All @@ -235,7 +236,7 @@ export class KdbResultsViewProvider implements WebviewViewProvider {
field: column.name,
headerName: headerName,
cellDataType: cellDataType,
cellRendererParams: { disabled: cellDataType === "boolean" },
cellRendererParams: { disabled: false },
};
});

Expand Down
4 changes: 3 additions & 1 deletion src/utils/queryUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -400,7 +400,9 @@ const PNG = ["0x89", "0x50", "0x4e", "0x47", "0x0d", "0x0a", "0x1a", "0x0a"];

export function resultToBase64(result: any): string | undefined {
const bytes =
result?.columns?.type === "bytes" ? result.columns.values : result;
(Array.isArray(result?.columns) && result.columns[0]?.values) ||
result?.columns?.values ||
result;
if (Array.isArray(bytes) && bytes.length > 66) {
for (let i = 0; i < PNG.length; i++) {
if (bytes[i] !== PNG[i] && bytes[i] !== parseInt(PNG[i], 16)) {
Expand Down
16 changes: 14 additions & 2 deletions test/suite/utils.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2017,13 +2017,25 @@ describe("Utils", () => {
});
it("should return base64 for minimum img str for structuredText", () => {
const result = queryUtils.resultToBase64({
columns: { type: "bytes", values: [...png, ...img] },
columns: { values: [...png, ...img] },
});
assert.ok(result.startsWith("data:image/png;base64"));
});
it("should return base64 for minimum img str for structuredText v2", () => {
const result = queryUtils.resultToBase64({
columns: [{ values: [...png, ...img] }],
});
assert.ok(result.startsWith("data:image/png;base64"));
});
it("should return undefined for bogus structuredText", () => {
const result = queryUtils.resultToBase64({
columns: { type: "bytes" },
columns: {},
});
assert.strictEqual(result, undefined);
});
it("should return undefined for bogus structuredText v2", () => {
const result = queryUtils.resultToBase64({
columns: [],
});
assert.strictEqual(result, undefined);
});
Expand Down
Loading