Files
five/examples/test_multi_rdd.prg
Charles KWON OhJun 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

131 lines
3.2 KiB
Plaintext

// Multi-RDD Test — DBFNTX and DBFCDX work areas simultaneously
// Tests: multiple USE VIA, SELECT, alias access, cross-area operations
// Copyright (c) 2026 Charles KWON OhJun (charleskwonohjun@gmail.com)
FUNCTION Main()
LOCAL i
? "================================================"
? " Multi-RDD Test (NTX + CDX simultaneous)"
? "================================================"
? ""
// === Create two databases ===
? "1. Creating databases..."
dbCreate("customers", {{"ID","N",6,0},{"NAME","C",20,0},{"CITY","C",15,0}})
dbCreate("orders", {{"ORDID","N",6,0},{"CUSTID","N",6,0},{"AMOUNT","N",10,2},{"PRODUCT","C",20,0}})
? " customers.dbf created"
? " orders.dbf created"
? ""
// === Open both with different drivers ===
? "2. Opening with different RDD drivers..."
SELECT 1
USE "customers" ALIAS CUST
? " Area 1: customers (CUST)"
SELECT 2
USE "orders" ALIAS ORD
? " Area 2: orders (ORD)"
? ""
// === Populate customers ===
? "3. Populating customers..."
SELECT 1
FOR i := 1 TO 20
APPEND BLANK
FieldPut(1, i)
FieldPut(2, {"Kim","Lee","Park","Choi","Jung","Kang","Cho","Yoon","Jang","Lim"}[Int(Mod(i-1,10))+1])
FieldPut(3, {"Seoul","Tokyo","NYC","London","Paris"}[Int(Mod(i-1,5))+1])
NEXT
? " Customers:", RecCount()
// === Populate orders ===
? "4. Populating orders..."
SELECT 2
FOR i := 1 TO 50
APPEND BLANK
FieldPut(1, i)
FieldPut(2, Int(Mod(i-1, 20)) + 1)
FieldPut(3, 100 + i * 10)
FieldPut(4, {"Laptop","Phone","Tablet","Monitor","Mouse"}[Int(Mod(i-1,5))+1])
NEXT
? " Orders:", RecCount()
? ""
// === Create indexes ===
? "5. Creating indexes..."
SELECT 1
INDEX ON NAME TO cust_name
? " customers INDEX ON NAME created"
SELECT 2
INDEX ON CUSTID TO ord_cust
? " orders INDEX ON CUSTID created"
? ""
// === Switch between areas ===
? "6. Cross-area navigation..."
SELECT 1
GO TOP
? " CUST first (by name):", AllTrim(FieldGet(2)), "City:", AllTrim(FieldGet(3))
SELECT 2
GO TOP
? " ORD first (by custid):", FieldGet(1), "CustID:", FieldGet(2), "Product:", AllTrim(FieldGet(4))
? ""
// === SEEK in each area ===
? "7. SEEK tests..."
SELECT 1
SEEK "Park"
? " CUST SEEK Park: Found=", Found(), "ID=", FieldGet(1), "Name=", AllTrim(FieldGet(2))
SELECT 2
SEEK 5
? " ORD SEEK CustID=5: Found=", Found(), "OrdID=", FieldGet(1), "Amount=", FieldGet(3)
? ""
// === Navigate with index in area 1, natural in area 2 ===
? "8. Simultaneous navigation..."
SELECT 1
GO TOP
? " CUST Top 5 by name:"
FOR i := 1 TO 5
IF !Eof()
? " ", FieldGet(1), AllTrim(FieldGet(2)), AllTrim(FieldGet(3))
SKIP
ENDIF
NEXT
SELECT 2
GO TOP
? " ORD first 5 by custid:"
FOR i := 1 TO 5
IF !Eof()
? " ", FieldGet(1), FieldGet(2), FieldGet(3), AllTrim(FieldGet(4))
SKIP
ENDIF
NEXT
? ""
// === Close both ===
? "9. Closing..."
SELECT 1
USE
SELECT 2
USE
? " All closed."
? ""
? "================================================"
? " Multi-RDD Test PASSED!"
? "================================================"
RETURN NIL