• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

orneryd / NornicDB / 28568655266
89%

Build:
DEFAULT BRANCH: main
Ran 02 Jul 2026 06:03AM UTC
Jobs 1
Files 479
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

02 Jul 2026 05:52AM UTC coverage: 89.08% (-0.01%) from 89.09%
28568655266

push

github

orneryd
fix(cypher): parse fulltext queries with full Lucene-classic grammar
  `db.index.fulltext.queryNodes` / `queryRelationships` tokenized the query
  with `strings.Fields` and had no notion of parenthesized groups, field-
  scoped clauses, or Lucene escape sequences. The Graphiti integration
  shape `group_id:"g" AND (<terms>)` silently discarded the parenthesized
  default-field clause: a real term and a nonsense term returned the
  identical result set, making the lexical arm of hybrid search
  term-blind. Backslash-escaped ASCII letters (`Cloud\Trail`) matched
  zero docs because `\T` was not decoded to literal `T`.
  Replace the ad-hoc splitter with a proper Lucene-classic recursive-
  descent parser (`pkg/cypher/fulltext_query.go`) plus per-document
  evaluator, matching the behavior of Neo4j's `MultiFieldQueryParser` with
  `setAllowLeadingWildcard(true)` (community/fulltext-index/.../
  FulltextIndexReader.java:207-215).
  Grammar supported:
  - Boolean AND / OR / NOT / && / || with parens and unlimited nesting.
  - Mandatory / prohibited clause prefixes (`+`, `-`).
  - Field-scoped clauses: `field:value`, `field:"phrase"`, `field:*`
    presence, `field:(a OR b)` group with field rebind.
  - Phrase queries and proximity (`"a b"~n`).
  - Fuzzy (`term~`, `term~n`, Levenshtein).
  - Range (`[a TO b]`, `{a TO b}` with mixed inclusivity, `*` endpoints).
  - Boost (`^n`).
  - Wildcards (`?`, `*` including leading and mid-token).
  - Regex (`/re/`).
  - Lucene escape rules (`\X` → literal `X` for any X).
  Also add `decodeCypherStringLiteral` in `call_fulltext.go` so backslash
  escapes survive round-trip through Cypher parameter substitution (which
  doubles `\` to `\\` when building the substituted query string).
  Rewire both procedure call sites to build an `ftDoc` per candidate,
  compute `docFreq` for the parser's `PrimaryTerms()`, and evaluate via
  `q.Match(ctx, doc)`. Whole-query fast paths for `*`, `*:*`, and
  `<field>:*` are preserved so emp... (continued)

847 of 962 new or added lines in 3 files covered. (88.05%)

42 existing lines in 7 files now uncovered.

145411 of 163237 relevant lines covered (89.08%)

1.04 hits per line

Uncovered Changes

Lines Coverage ∆ File
96
87.8
pkg/cypher/fulltext_query.go
11
85.35
-4.86% pkg/cypher/call_fulltext.go
8
92.35
0.78% pkg/cypher/call_compat.go

Coverage Regressions

Lines Coverage ∆ File
25
85.35
-4.86% pkg/cypher/call_fulltext.go
6
91.67
-0.52% pkg/nornicdb/db_admin.go
4
84.38
-0.61% pkg/server/server_nornicdb.go
3
81.39
-0.02% pkg/search/search.go
2
92.35
0.78% pkg/cypher/call_compat.go
1
88.3
-0.06% pkg/cypher/traversal.go
1
91.8
-0.33% pkg/temporal/query_load.go
Jobs
ID Job ID Ran Files Coverage
1 28568655266.1 02 Jul 2026 06:03AM UTC 479
89.08
GitHub Action Run
Source Files on build 28568655266
  • Tree
  • List 479
  • Changed 16
  • Source Changed 0
  • Coverage Changed 16
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • e090df01 on github
  • Prev Build on main (#28558772711)
  • Next Build on main (#28606905607)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc