Files
openobserve/web
Amey PawarandHengfei Yang 3d06ed0423 fix(logs): reject LIMIT in filter mode instead of building an invalid query (#13773)
Closes #6915.

Without SQL mode the search bar's contents become the WHERE body of a
generated `select [FIELD_LIST][QUERY_FUNCTIONS] from "[INDEX_NAME]"
[WHERE_CLAUSE]`, and `handleNonSqlMode` splices the input in verbatim
after stripping comments and quoting known field names. Nothing checks
that the input is actually a predicate, so `k8s_namespace_name =
'nginx-ingress' LIMIT 10` produces valid SQL. The results grid runs it
and returns rows, while the histogram query built from the same input is
rejected by `is_eligible_for_histogram` and surfaces
`SearchHistogramNotAvailable`. That is the split described in the issue
— the log list works, the histogram errors.

The server side of this already exists, so the guard belongs in the UI,
before either request goes out.

## What changed

| | |
|---|---|
| `utils/query/nonSqlLimit.ts` | new — `hasLimitClause()` |
| `useSearchQuery.ts` | the guard in `handleNonSqlMode`, using the
file's existing `notificationMsg` + `return null` path |

Placement note: `hasLimitClause` lives in `utils/query/` rather than in
the composable because it holds no state and touches no reactivity — the
same split `doubleQuoteWarnings.ts` and `colorizeQuery.ts` already use.

The check is deliberately narrow. `LIMIT` matches only when followed by
a number, so `limit = 5` and `rate_limit >= 100` pass through. String
literals are blanked first, so `msg = 'rate limit 500 exceeded'` is
unaffected. Line and block comments are stripped after that, so `code =
200 -- limit 10` — which works today — keeps working.

## Tests

- **17** on the derivation — the issue's own query, case variants,
whitespace and newlines before the number, a bare `LIMIT 100`, a field
named `limit`, `rate_limit >= 100`, the word inside a literal, a literal
with a doubled quote, `limit = 'none'`, leading / trailing / block
comments, a real LIMIT alongside a comment, and a dash sequence inside a
literal.
- **6** on `buildSearch` — rejects the reported query and sets the
message, still builds without a LIMIT, allows `limit = 5`, ignores
commented-out LIMITs, and does not fire in SQL mode.

Each rejection test was checked to fail when the guard is reverted. The
negative cases stay green either way, which is what separates them from
tests that merely restate the implementation.

## Verification

- `npx vitest run --root src/ composables/useLogs utils/query` — **1965
passed**, 33 files, 0 failed
- `npx vue-tsc --noEmit -p tsconfig.vitest.json` — clean, and identical
to `main`
- `npx eslint` on all four files — clean
- `npx prettier --check` — clean

## Caveats

- Not exercised in a running app; covered by unit tests only.
- `ORDER BY`, `GROUP BY` and `HAVING` reach the same splice and are
**not** handled here. Happy to extend if you want them, but the issue
asked about `LIMIT` and I didn't want to widen it uninvited.
- `plugins/logs/IndexList.vue` holds an independent copy of the same
`[WHERE_CLAUSE]` splice for field-value lookups. It is reached by
clicking a field rather than running a search, so it sits outside this
path — flagging it rather than changing it.

---------

Co-authored-by: Hengfei Yang <hengfei.yang@gmail.com>
2026-08-12 06:44:44 +00:00
..
2023-02-02 09:03:11 +05:30
2025-12-04 13:58:09 +05:30
2026-08-07 11:45:59 +00:00
2026-05-28 11:00:49 +00:00
2026-08-07 11:45:59 +00:00
2023-02-02 09:03:11 +05:30

web

This template should help get you started developing with Vue 3 in Vite.

VSCode + Volar (and disable Vetur) + TypeScript Vue Plugin (Volar).

Type Support for .vue Imports in TS

TypeScript cannot handle type information for .vue imports by default, so we replace the tsc CLI with vue-tsc for type checking. In editors, we need TypeScript Vue Plugin (Volar) to make the TypeScript language service aware of .vue types.

If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a Take Over Mode that is more performant. You can enable it by the following steps:

  1. Disable the built-in TypeScript Extension
    1. Run Extensions: Show Built-in Extensions from VSCode's command palette
    2. Find TypeScript and JavaScript Language Features, right click and select Disable (Workspace)
  2. Reload the VSCode window by running Developer: Reload Window from the command palette.

Customize configuration

See Vite Configuration Reference.

Project Setup

npm install

Compile and Hot-Reload for Development

For stand-alone UI development environment, create .env file and which contains below environment variable

VITE_OPENOBSERVE_ENDPOINT=http://localhost:5080/
npm run dev

Type-Check, Compile and Minify for Production

npm run build

Run Unit Tests with Vitest

npm run test:unit

Run End-to-End Tests with Cypress

npm run test:e2e:dev

This runs the end-to-end tests against the Vite development server. It is much faster than the production build.

But it's still recommended to test the production build with test:e2e before deploying (e.g. in CI environments):

npm run build
npm run test:e2e

Lint with ESLint

npm run lint