-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathworkshop-changelog.bbcode
More file actions
135 lines (115 loc) · 6.95 KB
/
Copy pathworkshop-changelog.bbcode
File metadata and controls
135 lines (115 loc) · 6.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
[h1]Version 1.1.1[/h1]
[quote]Patch release fixing two engine defects found by the expanded release test suite.[/quote]
[b]Fixed[/b]
[list]
[*]NOT MATCH produced a parse error (match_search(NOT, ...)); it now rewrites to NOT match_search(left, right), including quoted string operands
[*]CREATE TABLE AS SELECT failed with "no columns" when the SELECT returned zero rows; a zero-row CTAS now creates the empty table
[*]Preprocessor no longer panics on a trailing backslash before a missing closing quote (MATCH 'abc\); the escaped-char skip clamps at the input end in both the MATCH and %% rewriters
[/list]
[b]Tests[/b]
[list]
[*]44 new unit tests for REGEXP, MATCH (incl. NOT), NULLIF, CEIL/FLOOR, CTAS, aggregate FILTER, MIN/MAX NULL semantics
[*]Docker smoke test expanded to 99 tests, all passing in an Arma 3 server
[/list]
[hr][/hr]
[h1]Version 1.1.0[/h1]
[quote]Runtime engine generalisation, full CBA integration, built-in apply functions, and SQL-compatibility fixes verified in a live Arma 3 dedicated server.[/quote]
[b]Added[/b]
[list]
[*]Runtime engine: [b]apply_function[/b] column makes the event-driven override engine domain-agnostic
[*]Built-in apply functions: applyDamage, applyVelocity, applyWeather, applyAccuracy, applySpeed
[*]CBA event interface: reload, toggle, query, status, ruleApplied, rulesLoaded, ready events for cross-mod control
[*]CBA keybinds: Reload Rules (Ctrl+F5), Toggle Engine (Ctrl+F6), Query Status (Ctrl+F7)
[*]CBA versioning: VERSIONING macro registers A3SQL with CBA's version checker
[*]Binary format v0x03: column flags (auto_increment, not_null, unique, defaults) and next_auto_inc persisted across save/load
[*]NULLIF(a, b) builtin: returns NULL when the two arguments are equal, else the first
[*]match_search(haystack, needle) builtin: case-insensitive substring test backing the MATCH operator
[*]REGEXP operator: wildcard pattern matching ([b]*[/b] any sequence, [b]?[/b] single char)
[*]CEIL() / FLOOR(): sqlparser emits dedicated AST nodes for these; the evaluator now handles them (previously fell through as unknown functions)
[*]CREATE TABLE AS SELECT (CTAS): the handler existed but was never wired into statement dispatch
[*]FILTER (WHERE ...) aggregate clause: COUNT(*) FILTER (WHERE ...) now parses
[*]sqllogictest harness: engine implements the sqllogictest DB trait (same harness as DuckDB and DataFusion); corpora cover core CRUD, type behaviour, grouping, views, transactions, and constraints
[*]SQLite differential tests: side-by-side behaviour checks against a real SQLite engine
[*]Math verification suite: ABS, CEIL, FLOOR, ROUND, POW, SQRT, SIGN against known-good reference values
[*]Runtime-Engine.qmd: full architecture doc with schema, CBA events, keybinds, worked examples, and limitations
[/list]
[b]Changed[/b]
[list]
[*]Runtime engine: fnc_apply.sqf dispatches to apply_function via missionNamespace instead of hardcoded damage/velocity cases
[*]DB init deferred with CBA_fnc_waitUntilAndExecute until mission start (time > 0)
[*]Master switch (a3sql_runtime_toggle) overrides the CBA setting per mission; all handlers gate on it
[*]requiredAddons: cba_common, cba_events, cba_keybinding, cba_settings declared; defensive version guard in postInit
[*]CfgPatches names use COMPONENT_NAME; COMPONENT_BEAUTIFIED cleaned to un-prefixed names
[*]Auto-save interval reduced from 30s to 5s for better data durability
[*]ColumnNotFoundInTable error now explains SQL double-quote vs single-quote convention
[*]MATCH operator rewritten to match_search(left, right) in the SQL preprocessor (sqlparser's GenericDialect has no infix MATCH)
[/list]
[b]Fixed[/b]
[list]
[*]Logging: 47 calls to nonexistent CBA_fnc_info / CBA_fnc_error replaced with CBA INFO_N / ERROR_N macros (all INFO logging was silently dead)
[*]Binary format: column auto_increment, not_null, unique, default, default_expr flags now survive save/load (previously hardcoded to false)
[*]Binary format: next_auto_inc counter now persisted (previously lost on restart)
[*]fnc_handleFired.sqf: removed unused _log_level variable, moved Fired from addMissionEventHandler to per-object attachment
[*]MIN / MAX aggregates now ignore NULL values (NULL previously compared as greater than every number via the string fallback, so MAX could return NULL)
[*]REGEXP returned a parse error for every query because sqlparser 0.62 parses it as Expr::RLike, not a binary operator; the evaluator now handles Expr::RLike
[*]Boolean-typed expressions (comparisons, AND/OR/NOT, REGEXP, MATCH, EXISTS) previously surfaced as integers; corrected to true/false
[/list]
[hr][/hr]
[h1]Version 1.0.0[/h1]
[quote]First stable release.[/quote]
[b]Added[/b]
[list]
[*]SQL cheat sheet with copy-paste patterns for schema, DML, joins, aggregates, window functions, CTEs, transactions, and control commands
[*]Quarto documentation book with dark mode, full-text search, and six-part structure
[*]SBOM attached to GitHub releases (Def Stan 05-138 supply-chain evidence)
[*]i686 cross-compile jobs for Linux and Windows
[/list]
[b]Changed[/b]
[list]
[*]CI deduplicated: removed clippy and cargo test jobs already covered by org reusable workflow
[*]All CI actions SHA-pinned (supply-chain hardening)
[*]cargo-deny: added GPL-2.0 (deprecated form) and LicenseRef-Arma-Public-License-Share-Alike to allow list
[*]cargo-deny: removed broken license clarify entries for hemtt crates
[*]Documentation reorganised into six parts: Getting Started, SQL Reference, Integration, Networking, Operations, Development
[/list]
[b]Fixed[/b]
[list]
[*]GitHub Pages deployment now uses GitHub Actions source (not branch deploy)
[*]Quarto build: removed PDF/epub formats requiring lualatex (HTML only)
[/list]
[hr][/hr]
[h1]Version 0.2.0[/h1]
[b]Added[/b]
[list]
[*]Plugin system: Rust trait, C ABI dynamic, SQF registration
[*]RETURNING clause for INSERT/UPDATE/DELETE
[*]EXPLAIN command (JSON query plan)
[*]CREATE/DROP VIEW + transparent view resolution
[*]CHECK and FOREIGN KEY constraint enforcement
[*]Window frame specs (ROWS BETWEEN)
[*]EXCEPT/INTERSECT set operations
[*]FULL OUTER JOIN, NATURAL JOIN, JOIN USING
[*]COUNT(DISTINCT col)
[*]VACUUM / REINDEX commands
[*]CLI interactive REPL mode (a3sql-server --interactive)
[*]Graceful shutdown with auto-save on SIGTERM
[*]Full-text search via trigram index
[*]SQL compatibility corpus (7 SQL files, 150+ statements)
[/list]
[b]Changed[/b]
[list]
[*]Database renamed from a3db to a3sql
[*]Standalone server now shares full code path with extension (PING, LOGIN, etc.)
[*]Pre-commit hooks enforce clippy + fmt + HEMTT check
[*]CI validates SQF syntax, config style, BOM, and runs CodeQL
[*]Dependabot configured for weekly Cargo + Actions updates
[/list]
[b]Fixed[/b]
[list]
[*]ROLLBACK is no-op when no transaction is active (matches PostgreSQL)
[*]BOOL type supports both BOOL and BOOLEAN keywords
[*]All custom commands are case-insensitive
[*]has_aggregate() detects aggregates inside ExprWithAlias
[*]SQF fn_execute now passes $1/$2 params through callExtension
[*]SQL injection: removed unsafe "already quoted" bypass in substitute_params
[/list]