| name | remove-sql-fields |
| description | TRIGGER when user asks to remove, drop, or delete fields, properties, or columns from a SQL CRUD microservice's object. |
CRITICAL: Read and analyze this microservice before starting. Do NOT explore or analyze other microservices unless explicitly instructed to do so. The instructions in this skill are self-contained to this microservice.
IMPORTANT: MyNoun, MyNounKey, mynoun, and mynounapi are placeholders for the actual object, its key, directory, and API package of the microservice.
Workflow
Copy this checklist and track your progress:
Removing fields of the object:
- [ ] Step 1: Read Local CLAUDE.md File
- [ ] Step 2: Update the Type Definition of the Object
- [ ] Step 3: Update the Type Definition of the Query
- [ ] Step 4: Update Database Schema
- [ ] Step 5: Remove Mappings of Column Names to Object Fields
- [ ] Step 6: Remove Query Conditions
- [ ] Step 7: Update Integration Tests
- [ ] Step 8: Housekeeping
Step 1: Read Local CLAUDE.md File
Read the local CLAUDE.md file in the microservice's directory. It contains microservice-specific instructions that should take precedence over global instructions.
Step 2: Update the Type Definition of the Object
Find the type definition of the object in mynounapi/object.go.
Remove the appropriate fields from the type definition of the struct.
Remove the irrelevant code from the object's Validate method.
Clean up any unused imports.
Step 3: Update the Type Definition of the Query
Find the type definition of the query in mynounapi/query.go.
Remove the appropriate fields from the type definition of the struct.
Remove the irrelevant code from the query's Validate method.
Clean up any unused imports.
Step 4: Update Database Schema
Create a new migration script file in resources/sql with an incremental file name. IMPORTANT: Do not edit an existing migration file.
Refer to the older .sql migration files to identify what if any constraints were associated with the deprecated columns. Use ALTER TABLE statements to drop these constraints, if applicable.
ALTER TABLE my_table DROP CONSTRAINT my_table_constraint_name;
ALTER TABLE my_table DROP CONSTRAINT my_table_constraint_name;
ALTER TABLE my_table DROP CONSTRAINT my_table_constraint_name;
Refer to the older .sql migration files to identify what if any indices were associated with the deprecated columns. Use DROP INDEX statements to drop these indices, if applicable.
DROP INDEX my_table_idx_deprecated_field ON my_table;
DROP INDEX my_table_idx_deprecated_field;
DROP INDEX my_table_idx_deprecated_field ON my_table;
Append ALTER TABLE statements to drop the columns.
ALTER TABLE my_table
DROP COLUMN deprecated_field,
DROP COLUMN unused_field;
ALTER TABLE my_table
DROP COLUMN deprecated_field,
DROP COLUMN unused_field;
ALTER TABLE my_table DROP COLUMN
deprecated_field,
unused_field;
ALTER TABLE my_table DROP COLUMN deprecated_field;
ALTER TABLE my_table DROP COLUMN unused_field;
IMPORTANT: SQLite only supports dropping one column per ALTER TABLE statement. Each column must be a separate statement prefixed with -- DRIVER: sqlite.
Step 5: Remove Mappings of Column Names to Object Fields
Update the mappings of the database column names to their corresponding object fields in mapColumnsOnInsert, mapColumnsOnUpdate and mapColumnsOnSelect in service.go. Remove mappings of deprecated columns to deprecated object fields.
Step 6: Remove Query Conditions
Remove the query conditions and searchable columns in prepareWhereClauses in service.go that correspond to the removed fields or columns.
Step 7: Update Integration Tests
Remove references to the deprecated fields in service_test.go, including in the NewObject constructor and TestMyNoun_ColumnMappings.
Remove references to the deprecated fields in mynounapi/object_test.go and mynounapi/query_test.go.
Step 8: Housekeeping
Follow the housekeeping skill. Removing fields changes only the hand-written domain code (object.go, query.go, service.go, resources/sql), not definition.go, so the boilerplate regeneration is a no-op; the Version bump and go vet still apply.