feat(writer): 🎉 Enhance script execution order and add symlink skipping
All checks were successful
All checks were successful
* Update script execution to sort by Priority, Sequence, and Name. * Add functionality to skip symbolic links during directory scanning. * Improve documentation to reflect changes in execution order and features. * Add tests for symlink skipping and ensure correct script sorting.
This commit is contained in:
@@ -4,7 +4,7 @@ The SQL Executor Writer (`sqlexec`) executes SQL scripts from `models.Script` ob
|
||||
|
||||
## Features
|
||||
|
||||
- **Ordered Execution**: Scripts execute in Priority→Sequence order
|
||||
- **Ordered Execution**: Scripts execute in Priority→Sequence→Name order
|
||||
- **PostgreSQL Support**: Uses `pgx/v5` driver for robust PostgreSQL connectivity
|
||||
- **Stop on Error**: Execution halts immediately on first error (default behavior)
|
||||
- **Progress Reporting**: Prints execution status to stdout
|
||||
@@ -103,19 +103,40 @@ Scripts are sorted and executed based on:
|
||||
|
||||
1. **Priority** (ascending): Lower priority values execute first
|
||||
2. **Sequence** (ascending): Within same priority, lower sequence values execute first
|
||||
3. **Name** (ascending): Within same priority and sequence, alphabetical order by name
|
||||
|
||||
### Example Execution Order
|
||||
|
||||
Given these scripts:
|
||||
```
|
||||
Script A: Priority=2, Sequence=1
|
||||
Script B: Priority=1, Sequence=3
|
||||
Script C: Priority=1, Sequence=1
|
||||
Script D: Priority=1, Sequence=2
|
||||
Script E: Priority=3, Sequence=1
|
||||
Script A: Priority=2, Sequence=1, Name="zebra"
|
||||
Script B: Priority=1, Sequence=3, Name="script"
|
||||
Script C: Priority=1, Sequence=1, Name="apple"
|
||||
Script D: Priority=1, Sequence=1, Name="beta"
|
||||
Script E: Priority=3, Sequence=1, Name="script"
|
||||
```
|
||||
|
||||
Execution order: **C → D → B → A → E**
|
||||
Execution order: **C (apple) → D (beta) → B → A → E**
|
||||
|
||||
### Directory-based Sorting Example
|
||||
|
||||
Given these files:
|
||||
```
|
||||
1_001_create_schema.sql
|
||||
1_001_create_users.sql ← Alphabetically before "drop_tables"
|
||||
1_001_drop_tables.sql
|
||||
1_002_add_indexes.sql
|
||||
2_001_constraints.sql
|
||||
```
|
||||
|
||||
Execution order (note alphabetical sorting at same priority/sequence):
|
||||
```
|
||||
1_001_create_schema.sql
|
||||
1_001_create_users.sql
|
||||
1_001_drop_tables.sql
|
||||
1_002_add_indexes.sql
|
||||
2_001_constraints.sql
|
||||
```
|
||||
|
||||
## Output
|
||||
|
||||
|
||||
Reference in New Issue
Block a user