Skip to content

Commit

Permalink
Fix copying results in query editor when implicit limit is disabled (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
jaclarke authored Jan 20, 2025
1 parent 08e1008 commit b3b2a29
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 44 deletions.
19 changes: 19 additions & 0 deletions shared/inspector/state.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,25 @@ export type NestedDataGetter = (
fieldName: string
) => Promise<{data: any; codec: _ICodec}>;

export function createInspector(
result: any[] & {_codec: _ICodec},
implicitLimit: number | null,
extendedViewerIds: Set<string>,
openExtendedView: (item: Item) => void
) {
const inspector = new InspectorState({
implicitLimit:
implicitLimit != null && !Number.isNaN(implicitLimit)
? implicitLimit
: null,
noMultiline: true,
});
inspector.extendedViewIds = extendedViewerIds;
inspector.openExtendedView = openExtendedView;
inspector.initData({data: result, codec: result._codec});
return inspector;
}

@model("edb/Inspector")
export class InspectorState extends Model({
$modelId: idProp,
Expand Down
38 changes: 17 additions & 21 deletions shared/studio/tabs/queryEditor/state/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import {

import {Text} from "@codemirror/state";

import {InspectorState, Item} from "@edgedb/inspector/state";
import {createInspector, InspectorState, Item} from "@edgedb/inspector/state";

import {
storeQueryHistoryItem,
Expand Down Expand Up @@ -110,7 +110,7 @@ export const explainStateCache = new ObservableLRU<string, ExplainState>(10);
export class QueryHistoryResultItem extends ExtendedModel(QueryHistoryItem, {
status: prop<string>(),
hasResult: prop<boolean>(),
implicitLimit: prop<number>(),
implicitLimit: prop<number | null>(),
}) {
get queryEditor() {
return queryEditorCtx.get(this)!;
Expand All @@ -121,8 +121,11 @@ export class QueryHistoryResultItem extends ExtendedModel(QueryHistoryItem, {

let state = resultInspectorCache.get(this.$modelId);
if (!state) {
state = createInspector(data, this.implicitLimit, (item) =>
queryEditor.setExtendedViewerItem(item)
state = createInspector(
data,
this.implicitLimit,
extendedViewerIds,
(item) => queryEditor.setExtendedViewerItem(item)
);
resultInspectorCache.set(this.$modelId, state);
}
Expand Down Expand Up @@ -156,18 +159,6 @@ export class QueryHistoryErrorItem extends ExtendedModel(QueryHistoryItem, {
error: prop<Frozen<ErrorDetails>>(),
}) {}

function createInspector(
result: EdgeDBSet,
implicitLimit: number,
openExtendedView: (item: Item) => void
) {
const inspector = new InspectorState({implicitLimit, noMultiline: true});
inspector.extendedViewIds = extendedViewerIds;
inspector.openExtendedView = openExtendedView;
inspector.initData({data: result, codec: result._codec});
return inspector;
}

type QueryData = {
[EditorKind.EdgeQL]: Text;
[EditorKind.SQL]: Text;
Expand Down Expand Up @@ -641,7 +632,7 @@ export class QueryEditor extends Model({
resultBuf: Uint8Array;
protoVer: ProtocolVersion;
status: string;
implicitLimit: number;
implicitLimit: number | null;
}
| {
error: ErrorDetails;
Expand Down Expand Up @@ -781,9 +772,10 @@ export class QueryEditor extends Model({
};
const timestamp = Date.now();
const thumbnailData = getThumbnailData({query});
const implicitLimit = sessionStateCtx
const implicitLimitConfig = sessionStateCtx
.get(this)!
.activeState.options.find((opt) => opt.name === "Implicit Limit")?.value;
.activeState.options.find((opt) => opt.name === "Implicit Limit")
?.value as bigint | undefined;

try {
const {result, outCodecBuf, resultBuf, protoVer, capabilities, status} =
Expand All @@ -796,7 +788,9 @@ export class QueryEditor extends Model({
: undefined,
{
implicitLimit:
implicitLimit != null ? implicitLimit + BigInt(1) : undefined,
implicitLimitConfig != null
? implicitLimitConfig + BigInt(1)
: undefined,
replQueryTag: true,
},
this.runningQueryAbort?.signal,
Expand All @@ -806,6 +800,8 @@ export class QueryEditor extends Model({
)
);

const implicitLimit =
implicitLimitConfig != null ? Number(implicitLimitConfig) : null;
this.addHistoryCell({
queryData,
timestamp,
Expand All @@ -815,7 +811,7 @@ export class QueryEditor extends Model({
resultBuf,
protoVer,
status,
implicitLimit: Number(implicitLimit),
implicitLimit,
});
return {success: true, capabilities, status};
} catch (e: any) {
Expand Down
40 changes: 17 additions & 23 deletions shared/studio/tabs/repl/state/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import {
ErrorDetails,
extractErrorDetails,
} from "../../../utils/extractErrorDetails";
import {InspectorState, Item} from "@edgedb/inspector/state";
import {createInspector, InspectorState, Item} from "@edgedb/inspector/state";
import {baseOptions, decode, EdgeDBSet} from "../../../utils/decodeRawBuffer";
import {CommandResult, handleSlashCommand} from "./commands";
import {
Expand Down Expand Up @@ -54,18 +54,6 @@ import {Language} from "edgedb/dist/ifaces";

export const defaultItemHeight = 85;

function createInspector(
result: EdgeDBSet,
implicitLimit: number | null,
openExtendedView: (item: Item) => void
) {
const inspector = new InspectorState({implicitLimit, noMultiline: true});
inspector.extendedViewIds = extendedViewerIds;
inspector.openExtendedView = openExtendedView;
inspector.initData({data: result, codec: result._codec});
return inspector;
}

export enum ReplLang {
EdgeQL,
SQL,
Expand Down Expand Up @@ -150,11 +138,15 @@ export class ReplHistoryItem extends Model({
const cache = cachesCtx.get(this)!.inspector;
let state = cache.get(this.$modelId);
if (!state) {
state = createInspector(data, this.implicitLimit, (item) =>
findParent<Repl>(
this,
(p) => p instanceof Repl
)!.setExtendedViewerItem(item)
state = createInspector(
data,
this.implicitLimit,
extendedViewerIds,
(item) =>
findParent<Repl>(
this,
(p) => p instanceof Repl
)!.setExtendedViewerItem(item)
);
cache.set(this.$modelId, state);
}
Expand Down Expand Up @@ -486,9 +478,8 @@ export class Repl extends Model({
} else {
const implicitLimitConfig = sessionStateCtx
.get(this)!
.activeState.options.find(
(opt) => opt.name === "Implicit Limit"
)?.value;
.activeState.options.find((opt) => opt.name === "Implicit Limit")
?.value as bigint | undefined;

const {
result,
Expand Down Expand Up @@ -534,8 +525,11 @@ export class Repl extends Model({
} else {
this.resultInspectorCache.set(
historyItem.$modelId,
createInspector(result, implicitLimit, (item) =>
this.setExtendedViewerItem(item)
createInspector(
result,
implicitLimit,
extendedViewerIds,
(item) => this.setExtendedViewerItem(item)
)
);
}
Expand Down

0 comments on commit b3b2a29

Please sign in to comment.