f4ed42556b
checkpoint: season-wide bug fix campaign + infra
...
Cumulative season's silent-bug hunting (~62 fixes) across the FiveSql2
SQL engine, the Five compiler/runtime, and the hbrdd RDD layer. Saved
as a single checkpoint before refactoring the parser to delegate xBase
command translation to the preprocessor.
Highlights:
FiveSql2 engine (_FiveSql2/src/)
- prefix-glob index attach -> explicit convention (<table>_pk.ntx,
<table>_uq.ntx, <table>.cdx) — fixes silent multi-row INSERT row-drop
- DROP/CREATE TABLE FErase chain extended (.cdx, .fsc, .fsv, .dbt, .fpt)
- COUNT(DISTINCT col) parsed + aggregated via hSeen hash
- UNION column-count mismatch returns SQL_ERR_GRAMMAR (was silent)
- DISTINCT + ORDER BY hidden-col leak fixed (trim before DISTINCT)
- Derived table FROM (SELECT...) + JOIN right-side derived
- Self-FK CASCADE depth 2+ via SqlGetSingleColPK pre-collect
- LAG/LEAD default arg uses SqlEvalRowExpr (handles -N const exprs)
- DATE literal round-trip validation (Feb 29 non-leap rejected)
- CREATE OR REPLACE VIEW; CREATE VIEW errors on already-exists
- AlterTable type dispatcher comma-wrapped (1-char type "A" no longer
matches CHARACTER)
Compiler / runtime
- gengo: HB_ -> FV_ prefix on emitted Go function names (Five identity)
- gengo split: emit_block.go, emit_stmt.go, folding.go extracted
- parser/stmtreg.go nudges
- hbrt: debug TUI/CLI restructure (debugcmd, debugkey, termios_*),
windows debug stubs collapsed
- thread/vm/value/class/pcinterp tightening from panic traces
RDD layer (hbrdd/)
- dbf: null bitmap support (null.go + null_test.go), mmap split
(mmap_posix.go / mmap_windows.go), byte-level numeric parse
- ntx/cdx: windows mmap parity
- workarea + mem RDD: cross-area state-bleed fixes
RTL (hbrtl/)
- errorlog rewrite with platform-specific FD (errorlog_fd_unix /
errorlog_fd_other)
- sqlscan, sqlhelpers, indexrtl, datetime extensions
Gates green at checkpoint:
- go test ./... : PASS
- FiveSql2 SQL:1999 : 43/43
- Harbour compat : 56/56
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-30 09:26:25 +09:00
21fd9dc65c
feat: SET DELETED filtering, SEEK/LOCATE/CONTINUE, SET command codegen
...
- skipFilter: skip deleted records in GoTop/GoBottom/Skip when SET DELETED ON
- hbrdd.IsSetDeleted callback: avoids circular import hbrdd→hbrtl
- Parser: capture ON/OFF for boolean SET commands (DELETED, EXACT, SOFTSEEK, etc.)
- Parser: capture TO expr for SET DATE/DECIMALS/EPOCH
- Gengo: emit proper t.Do() calls for 11 SET toggles + 3 value SETs
- stmtSet: was stub (skipToEOL), now calls parseSet()
- RTL: register 11 SET toggle functions (SETDELETED, SETEXACT, etc.)
- RTL: DBLOCATE/DBCONTINUE for sequential search
- RTL: DBSETFILTER/DBCLEARFILTER/DBFILTER
- PadL/PadR: support 3rd param fill character
- Area interface: added SetFound, SetLocate, LocateBlock, filter methods
- MemRDD: implements new Area interface methods
- Comprehensive PRG test: test_search.prg (7 test suites all pass)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-02 22:33:59 +09:00
48a471bb1d
fix: Phase 5 — MEDIUM #27,30,31 + LOW #25,41 complete cleanup
...
Files modified (6):
compiler/parser/parser.go — #27 : Add currentUpper() helper
Replaces 30 strings.ToUpper(p.current.Literal) calls
compiler/parser/stmtreg.go — Remove now-unused strings import
compiler/parser/expr.go — #30 : Document comma expr Harbour semantics
compiler/gengo/gengo.go — #31 : Replace 8 TODO comments with WARN
Macro expr now emits MacroPush() instead of TODO
compiler/token/token.go — #25 : Replace itoa with strconv.Itoa
#41 : Add 50+ missing kindNames entries for complete String()
Issues resolved: #25,27,30,31,41
Total fixed: 39/53
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-01 21:00:44 +09:00
6ffcf77dd8
fix: Phase 3 — #25,28,29,41 token/AST/parser cleanup
...
Files modified (4):
compiler/token/token.go — #25 : Replace hand-rolled itoa with strconv.Itoa
Fixes math.MinInt overflow bug in original implementation
compiler/ast/ast.go — #29 : Fix VarDecl.End() returning last var position
Was returning Pos() (useless span info)
compiler/parser/stmtreg.go — #28 : Eliminate all 7 token array mutations
rewriteAsIdent() modifies p.current only, not the token array
Prevents backtracking corruption and improves safety
compiler/lexer/lexer.go — Already clean from Phase 2
Issues resolved : #25 (MEDIUM), #28 (MEDIUM), #29 (MEDIUM), #41 partial (LOW)
Total fixed: 29/53
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-01 11:58:20 +09:00
59568f3301
Five v0.9 — Harbour + Go fusion language
...
- Compiler: PP → Lexer → Parser → Analyzer → Gengo pipeline
- Parser: 232/236 (98%) Harbour compatibility, registry-based dispatch
- RTL: 351 Harbour-compatible functions
- RDD: DBF/NTX/CDX engines with Rushmore bitmap optimization
- Go Interop: IMPORT + pkg.Func() + obj:Method() with FastPath (15M calls/sec)
- HB_FUNC API: Full Harbour C API compatible Go bridge
- Concurrency: SPAWN/LAUNCH/GOROUTINE, <-, WATCH, PARALLEL FOR, ASYNC/AWAIT
- Extensions: Multi-return, DEFER, Slice, f-string, Nil-safe ?:, CONST
- Macro Compiler: Runtime AST parsing and evaluation
- Debugger: TUI debugger with source display, breakpoints, stepping
- FRB: Native + Pcode dual mode runtime binary
- Tests: 13 packages ALL PASS
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-31 09:41:50 +09:00