| name | modify-sql-fields |
| description | TRIGGER when user asks to change, rename, or retype fields, properties, or columns of 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:
Changing 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: Update Mappings of Column Names to Object Fields
- [ ] Step 6: Update 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 in the API directory of the microservice.
Change the fields in the type definition of the struct appropriately.
Change the code in the object's Validate method appropriately.
Step 3: Update the Type Definition of the Query
Find the type definition of the query in mynounapi/query.go in the API directory of the microservice.
Change the fields in the type definition of the struct appropriately.
Change the code in the query's Validate method appropriately.
Step 4: Update Database Schema
Skip this step if the changes do not necessitate a database schema change. For example, renaming only a Go field or JSON tag without changing the database column name does not require a schema change.
Create a new migration script file in resources/sql with an incremental file name. IMPORTANT: Do not edit an existing migration file.
Append ALTER TABLE statements to change the type, size or constraints of columns, if applicable. For pgx, each aspect of the column (type, nullability, default) requires a separate statement - only include the statements relevant to the change. For mssql, if the column already has a default constraint from a prior migration, drop it before adding the new one.
ALTER TABLE my_table
MODIFY COLUMN modified_column VARCHAR(384) NOT NULL DEFAULT '',
MODIFY COLUMN changed_column BIGINT NOT NULL DEFAULT 0;
ALTER TABLE my_table ALTER COLUMN modified_column TYPE VARCHAR(384);
ALTER TABLE my_table ALTER COLUMN modified_column SET NOT NULL;
ALTER TABLE my_table ALTER COLUMN modified_column SET DEFAULT '';
ALTER TABLE my_table ALTER COLUMN changed_column TYPE BIGINT;
ALTER TABLE my_table ALTER COLUMN changed_column SET NOT NULL;
ALTER TABLE my_table ALTER COLUMN changed_column SET DEFAULT 0;
ALTER TABLE my_table DROP CONSTRAINT my_table_df_modified_column;
ALTER TABLE my_table DROP CONSTRAINT my_table_df_changed_column;
ALTER TABLE my_table ALTER COLUMN modified_column NVARCHAR(384) NOT NULL;
ALTER TABLE my_table ALTER COLUMN changed_column BIGINT NOT NULL;
ALTER TABLE my_table ADD CONSTRAINT my_table_df_modified_column DEFAULT '' FOR modified_column;
ALTER TABLE my_table ADD CONSTRAINT my_table_df_changed_column DEFAULT 0 FOR changed_column;
Append ALTER TABLE or EXEC statements to rename columns, if applicable. For mysql, prefer using the new RENAME COLUMN syntax over the old CHANGE COLUMN syntax.
ALTER TABLE my_table
RENAME COLUMN old_column TO new_column;
ALTER TABLE my_table
RENAME COLUMN old_column TO new_column;
EXEC sp_rename 'my_table.old_column', 'new_column', 'COLUMN';
Refer to the older .sql migration files to identify what if any indices were associated with renamed columns. Append statements to the migration script to rename these indices, if applicable.
ALTER TABLE my_table RENAME INDEX my_table_idx_old_column TO my_table_idx_new_column;
ALTER INDEX my_table_idx_old_column RENAME TO my_table_idx_new_column;
EXEC sp_rename 'my_table_idx_old_column', 'my_table_idx_new_column', 'INDEX';
Step 5: Update Mappings of Column Names to Object Fields
Update the mappings of the modified database column names to their corresponding object fields in mapColumnsOnInsert, mapColumnsOnUpdate and mapColumnsOnSelect in service.go.
Step 6: Update Query Conditions
Adjust the query conditions and searchable columns in prepareWhereClauses in service.go that correspond to the changed fields or columns.
Step 7: Update Integration Tests
Adjust references to the changed fields in service_test.go, including in the NewObject constructor and TestMyNoun_ColumnMappings.
Adjust references to the changed fields in mynounapi/object_test.go and mynounapi/query_test.go.
Step 8: Housekeeping
Follow the housekeeping skill. Modifying 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.