fix: symtab registers snake display column names + robot coverage for AWS e2e casing/walker behaviours (any-sdk v0.5.3-alpha11)#679
Merged
Conversation
…AWS e2e casing + walker behaviours
Companion to any-sdk feature/aws-e2e-casing-walker-fixes (requires the
matching any-sdk bump; go.mod update follows once the tag is cut).
Core fix:
- statement_analyzer: symbol table now registers the tabulated display
column names alongside the raw property keys, so a WHERE clause can
reference a snake alias when config.snake_case_aliases is on (was
"could not locate symbol vpc_id"). Without aliasing the tabulation
re-registers the same names - a no-op.
Robot coverage (native_test fixture provider + flask mock), all shaken
out by live AWS provider lifecycle testing:
- DESCRIBE EXTENDED renders snake aliases (ToDescriptionMap parity).
- SELECT * projects VALUES through snake-aliased star expansion
(GetAllColumns parity; previously values projected as column names via
SQLite's string-literal fallback for unknown quoted identifiers).
- A snake WHERE key satisfies a REQUIRED PascalCase wire parameter during
method routing and reaches the wire re-keyed (new echo_strict resource).
- request.base '{}' fallback body is sent verbatim when no body fields
exist (aws-json no-input pattern; new echo_post resource).
- schema_driven_xml: member-name properties with xml: name overrides
project values (the AWS provider Display shape, new volumes_alias
resource); nested wire elements JSON-stringify under string columns;
CreateVpc-style singleton unwrap projects (INSERT ... RETURNING); an
empty 200 body yields zero rows; a snake column WHERE post-filters via
the symtab fix.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The Windows CI runner installs sqlite with `choco install --force sqlite` and points SQLITE_EXE at the historical layout (C:\ProgramData\chocolatey\lib\SQLite\tools\sqlite3.exe). Newer versions of the chocolatey package nest the binary one level deeper, breaking the hardcoded path with FileNotFoundError in the four sqlite export tests (unrelated to this branch's changes; would fail on main identically). Resolution order: configured value when it exists (file or PATH-resolvable command name), then `sqlite3` on PATH, then a recursive search of the chocolatey SQLite lib tree (newest hit wins), falling back to the configured value so a genuine miss still surfaces the original error. Verified: resolver unit cases (nested choco layout, existing path kept, miss falls through) on Windows; Stackql Export robot suite 8/8 locally. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
general-kroll-4-life
approved these changes
Jul 3, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Companion to stackql/any-sdk#114, shaken out by live end-to-end lifecycle testing (INSERT / SELECT / UPDATE / DELETE) of the new native AWS provider across all four wire protocols (ec2, query, aws-json, rest-xml).
Core fix:
statement_analyzer: the symbol table now registers the tabulated display column names alongside the raw property keys. Underconfig.snake_case_aliases, a WHERE clause can reference the snake alias of a response column (previouslySELECT ... WHERE vpc_id = ...failed withcould not locate symbol vpc_idwhenevervpc_idwas a response column rather than a request parameter). Without aliasing, the tabulation re-registers the same names - a no-op.Bump:
any-sdk v0.5.3-alpha10 -> v0.5.3-alpha11, consuming the casing-surface parity and schema-driven XML walker fixes from stackql/any-sdk#114.Robot coverage (new fixture resources in the
stackql_native_testprovider + flask mock endpoints):stackql_casing.robot(4 new cases): DESCRIBE EXTENDED renders snake aliases; SELECT * projects values through snake-aliased star expansion (previously wire-cased identifiers resolved as string literals on a case-sensitive backend, so every value projected as its own column name); a snake WHERE key satisfies a REQUIRED PascalCase wire parameter during method routing and reaches the wire re-keyed;request.base: '{}'fallback body is sent verbatim when no body fields exist (the aws-json no-input pattern).stackql_xml_walker.robot(5 new cases): member-name schema properties withxml: nameoverrides project values (the AWS provider Display shape); nested wire elements JSON-stringify under string-typed columns; a snake response-column WHERE post-filters via the symtab fix; CreateVpc-style singleton unwrap projects (what makesINSERT ... RETURNINGwork); an empty 200 body yields zero rows.Type of change
Issues referenced.
Evidence
All verified locally (Linux/WSL, sqlite backend):
stackql_casing+stackql_xml_walkersuites - 22/22 pass (13 pre-existing + 9 new cases).go test -timeout 1200s --tags "sqlite_stackql" ./...- pass.DESCRIBEchecks, 20/20 liveSELECTshape checks, and full DML lifecycles on all four protocols -aws.ec2.vpcs(7 steps: INSERT+RETURNING, list, get, UPDATE via nested-struct attribute, verify, DELETE with snake key, confirm gone),aws.sns.topics(6 steps),aws.dynamodb.tables(6 steps incl. list-of-struct CreateTable body),aws.s3.buckets(4 steps) - 43/43, every created resource torn down by DELETE and its absence verified.Checklist:
Variations
statement_analyzer.go.Tech Debt
None accrued. The symtab change registers aliases through the existing tabulation path (no new naming scheme), and the robot fixtures reuse the established
stackql_native_testprovider + flask mock pattern. One upstream behavioural note is documented in any-sdk #114 rather than here:request.defaultdiverts supplied body params in the armoury flow, so the aws-json empty-body pattern usesrequest.base.