Files
five/_FiveSql2/test/test_simple_sql.prg
Charles KWON OhJun 486e466592 feat: FiveSql2 43/43, @byref, mutable closure, RTL 479, DateTime fix
Major changes since last commit:
- FiveSql2 SQL:1999 engine (10,458 LOC) — 43/43 ALL PASS
- 21 compiler/runtime bugs fixed (short-circuit AND/OR, FOR LOOP, etc.)
- @byref pass-by-reference via RefCell pattern
- Mutable closure capture (EnsureLocalRef + RefCell sharing)
- RTL: 400 → 479 functions (+79: file, string, datetime, hash, UTF-8)
- DateTime/Timestamp fully working (hb_DateTime, hb_Hour/Min/Sec, display)
- Reserved word guard (39 keywords blocked from function calls)
- AEval arg order fix (element before index)
- Closure capture redecl fix (unique _cap_ names per block)
- Hash/string indexing in ArrayPush/ArrayPop
- Harbour compat test suite: 51/51
- 4 docs: Porting Report, Implementation Plan, Optimization Plan, Commercialization

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 11:35:37 +09:00

51 lines
1.2 KiB
Plaintext

// Simplest possible SQL test with error handling
#include "FiveSqlDef.ch"
FUNCTION Main()
LOCAL aResult, oErr
// Create test table
dbCreate("simple_test", { {"ID","N",4,0}, {"NAME","C",20,0} })
USE "simple_test" NEW EXCLUSIVE
APPEND BLANK
REPLACE ID WITH 1, NAME WITH "Alice"
APPEND BLANK
REPLACE ID WITH 2, NAME WITH "Bob"
CLOSE ALL
? "=== Simple SQL Test ==="
? "Table created with 2 rows"
// Quick sanity check: open and iterate
USE "simple_test" NEW SHARED ALIAS "SANITY"
? "Sanity check - RecCount:", RecCount()
dbGoTop()
LOCAL nRowCount := 0
DO WHILE ! Eof()
nRowCount++
? " Row:", nRowCount, "ID:", FieldGet(1), "EOF:", Eof()
dbSkip()
IF nRowCount > 5
? " BREAK: too many rows"
EXIT
ENDIF
ENDDO
? " After loop EOF:", Eof()
CLOSE ALL
BEGIN SEQUENCE
? "Calling five_SQL..."
aResult := five_SQL("SELECT * FROM simple_test")
? "Result type:", ValType(aResult)
IF ValType(aResult) == "A" .AND. Len(aResult) >= 2
? "Fields:", Len(aResult[1])
? "Rows:", Len(aResult[2])
ENDIF
RECOVER USING oErr
? "SQL Exception:", oErr
END SEQUENCE
FErase("simple_test.dbf")
? "=== DONE ==="
RETURN NIL