MCPcopy Create free account
hub / github.com/outerbase/studio / QueryWindow

Function QueryWindow

src/components/gui/tabs/query-tab.tsx:67–485  ·  view source on GitHub ↗
({
  initialCode,
  initialName,
  initialSavedKey,
  initialNamespace,
}: QueryWindowProps)

Source from the content-addressed store, hash-verified

65}
66
67export default function QueryWindow({
68 initialCode,
69 initialName,
70 initialSavedKey,
71 initialNamespace,
72}: QueryWindowProps) {
73 const { databaseDriver, docDriver, agentDriver } = useStudioContext();
74 const { refresh: refreshSchema, autoCompleteSchema } = useSchema();
75 const [code, setCode] = useState(initialCode ?? "");
76 const editorRef = useRef<ReactCodeMirrorRef>(null);
77
78 const [fontSize, setFontSize] = useState(0.875);
79 const [lineNumber, setLineNumber] = useState(0);
80 const [columnNumber, setColumnNumber] = useState(0);
81
82 const [queryTabIndex, setQueryTabIndex] = useState(0);
83 const [progress, setProgress] = useState<MultipleQueryProgress>();
84 const [data, setData] = useState<MultipleQueryResult[]>();
85 const [name, setName] = useState(initialName);
86 const { changeCurrentTab } = useTabsContext();
87
88 const [namespaceName, setNamespaceName] = useState(
89 initialNamespace ?? "Unsaved Query"
90 );
91 const [savedKey, setSavedKey] = useState<string | undefined>(initialSavedKey);
92 const [placeholders, setPlaceholders] = useState<Record<string, string>>({});
93 const { schema } = useSchema();
94
95 useEffect(() => {
96 const timer = setTimeout(() => {
97 setPlaceholders((prev) => {
98 const newPlaceholders: Record<string, string> = {};
99 const token = tokenizeSql(code, databaseDriver.getFlags().dialect);
100
101 const foundPlaceholders = token
102 .filter((t) => t.type === "PLACEHOLDER")
103 .map((t) => t.value.slice(1));
104
105 for (const foundPlaceholder of foundPlaceholders) {
106 newPlaceholders[foundPlaceholder] = prev[foundPlaceholder] ?? "";
107 }
108
109 return newPlaceholders;
110 });
111 }, 1000);
112
113 return () => clearTimeout(timer);
114 }, [code, databaseDriver]);
115
116 const onFormatClicked = () => {
117 try {
118 setCode(
119 format(code, {
120 language: "sqlite",
121 tabWidth: 2,
122 })
123 );
124 } catch (e) {

Callers

nothing calls this directly

Calls 12

useStudioContextFunction · 0.90
useSchemaFunction · 0.90
useTabsContextFunction · 0.90
isExplainQueryPlanFunction · 0.90
cnFunction · 0.90
getSingleTableNameFunction · 0.85
onRunClickedFunction · 0.85
onFormatClickedFunction · 0.85
runMethod · 0.80
getFlagsMethod · 0.45
matchMethod · 0.45
toStringMethod · 0.45

Tested by

no test coverage detected