Skip to content

fix: symtab registers snake display column names + robot coverage for AWS e2e casing/walker behaviours (any-sdk v0.5.3-alpha11)#679

Merged
jeffreyaven merged 3 commits into
mainfrom
feature/aws-e2e-casing-fixes
Jul 3, 2026
Merged

fix: symtab registers snake display column names + robot coverage for AWS e2e casing/walker behaviours (any-sdk v0.5.3-alpha11)#679
jeffreyaven merged 3 commits into
mainfrom
feature/aws-e2e-casing-fixes

Conversation

@jeffreyaven

Copy link
Copy Markdown
Member

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. Under config.snake_case_aliases, a WHERE clause can reference the snake alias of a response column (previously SELECT ... WHERE vpc_id = ... failed with could not locate symbol vpc_id whenever vpc_id was 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_test provider + 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 with xml: name overrides 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 makes INSERT ... RETURNING work); an empty 200 body yields zero rows.

Type of change

  • Bug fix (non-breaking change to fix a bug).
  • Feature (non-breaking change to add functionality).
  • Breaking change.
  • Other (eg: documentation change). Please explain.

Issues referenced.

Evidence

All verified locally (Linux/WSL, sqlite backend):

  • Robot functional: stackql_casing + stackql_xml_walker suites - 22/22 pass (13 pre-existing + 9 new cases).
  • Unit: go test -timeout 1200s --tags "sqlite_stackql" ./... - pass.
  • Live end-to-end against real AWS with the provider under development: 20/20 offline DESCRIBE checks, 20/20 live SELECT shape 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:

  • A full round of testing has been completed, and there are no test failures as a result of these changes.
  • The changes are covered with functional and/or integration robot testing.
  • The changes work on all supported platforms.
  • Unit tests pass locally, as per the developer guide.
  • Robot tests pass locally, as per the developer guide.
  • Linter passes locally, as per the developer guide.

Variations

  • Platform coverage: verified locally on Linux (WSL) only; relying on CI matrix builds (Windows / macOS / macOS ARM) for the remaining platforms - the change surface is platform-independent Go and test assets.
  • Linter: not run locally; relying on the CI lint gate. The non-test source delta is one bounded block in 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_test provider + flask mock pattern. One upstream behavioural note is documented in any-sdk #114 rather than here: request.default diverts supplied body params in the armoury flow, so the aws-json empty-body pattern uses request.base.

jeffreyaven and others added 3 commits July 2, 2026 15:04
…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>
@jeffreyaven jeffreyaven merged commit 902c151 into main Jul 3, 2026
21 checks passed
@jeffreyaven jeffreyaven deleted the feature/aws-e2e-casing-fixes branch July 3, 2026 02:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants