Commit 265cf4f
* feat: add stdin/stdout pipeline support (closes #65)
Implement comprehensive stdin/stdout pipeline support for all CLI commands
(validate, format, analyze, parse) with Unix pipeline conventions and
cross-platform compatibility.
Features:
- Auto-detection: Commands automatically detect piped input
- Explicit stdin: Support "-" as stdin marker for all commands
- Input redirection: Full support for "< file.sql" syntax
- Broken pipe handling: Graceful handling of Unix EPIPE errors
- Security: 10MB input limit to prevent DoS attacks
- Cross-platform: Works on Unix/Linux/macOS and Windows PowerShell
Implementation:
- Created stdin_utils.go with pipeline utilities:
- IsStdinPipe(): Detects piped input using golang.org/x/term
- ReadFromStdin(): Reads from stdin with size limits
- GetInputSource(): Unified input detection (stdin/file/direct SQL)
- WriteOutput(): Handles stdout and file output with broken pipe detection
- DetectInputMode(): Determines input mode based on args and stdin state
- ValidateStdinInput(): Security validation for stdin content
- Updated all commands with stdin support:
- validate.go: Stdin validation with temp file approach
- format.go: Stdin formatting (blocks -i flag appropriately)
- analyze.go: Stdin analysis with direct content processing
- parse.go: Stdin parsing with direct content processing
- Dependencies:
- Added golang.org/x/term for stdin detection
- Testing:
- Unit tests: stdin_utils_test.go with comprehensive coverage
- Integration tests: pipeline_integration_test.go for real pipeline testing
- Manual testing: Validated echo, cat, and redirect operations
- Documentation:
- Updated README.md with comprehensive pipeline examples
- Unix/Linux/macOS and Windows PowerShell examples
- Git hooks integration examples
Usage Examples:
echo "SELECT * FROM users" | gosqlx validate
cat query.sql | gosqlx format
gosqlx validate -
gosqlx format < query.sql
cat query.sql | gosqlx format | gosqlx validate
Cross-platform:
# Unix/Linux/macOS
cat query.sql | gosqlx format | tee formatted.sql | gosqlx validate
# Windows PowerShell
Get-Content query.sql | gosqlx format | Set-Content formatted.sql
"SELECT * FROM users" | gosqlx validate
Security:
- 10MB stdin size limit (MaxStdinSize constant)
- Binary data detection (null byte check)
- Input validation before processing
- Temporary file cleanup in validate command
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: resolve CI failures for PR #97
Fixed 3 critical issues causing all CI builds/tests to fail:
1. Go Version Format (Fixes: Build, Test, Vulnerability Check failures)
- Changed go.mod from 'go 1.24.0' (three-part) to 'go 1.24' (two-part)
- Three-part format not supported by Go 1.19/1.20 toolchains in CI
- Error: 'invalid go version 1.24.0: must match format 1.23'
2. Lint Error SA9003 (Fixes: Lint job failure)
- Fixed empty else branch in cmd/gosqlx/cmd/format.go:169-173
- Removed unnecessary else block while preserving same behavior
- Staticcheck SA9003: empty branch warning resolved
3. Workflow Go Version Mismatch (Fixes: Security scan failures)
- Updated .github/workflows/security.yml to use Go 1.24
- Both GoSec and GovulnCheck jobs now use Go 1.24
- Matches project requirements for golang.org/x/term v0.37.0
All changes maintain backward compatibility and functionality.
Related: #65 (stdin/stdout pipeline feature)
* fix: update all CI workflows to use Go 1.24
Updated Go version across all GitHub Actions workflows to match go.mod requirements:
- .github/workflows/go.yml: Changed build matrix from [1.19, 1.20, 1.21] to [1.24]
- .github/workflows/test.yml: Changed test matrix from [1.19, 1.20, 1.21] to [1.24]
- .github/workflows/test.yml: Changed benchmark job from 1.21 to 1.24
- .github/workflows/lint.yml: Changed from 1.21 to 1.24
This fixes all remaining CI failures caused by incompatibility between:
- Project dependencies (golang.org/x/term v0.37.0) requiring Go 1.24
- Old workflow configurations using Go 1.19-1.21
Related: PR #97, Issue #65
* chore: run go mod tidy to sync dependencies
Running go mod tidy updates go.mod format to go 1.24.0 (three-part)
which is the standard format for Go 1.24+. This resolves build failures
caused by out-of-sync go.mod and go.sum files.
Note: Go 1.24 supports both two-part (1.24) and three-part (1.24.0)
formats, but go mod tidy standardizes on three-part format.
* fix: remove empty if block in validate.go (SA9003)
* fix: update staticcheck to latest version for Go 1.24 compatibility
* fix: use os.TempDir() for cross-platform test compatibility
- Replace hardcoded /tmp/ path with os.TempDir()
- Add path/filepath import for filepath.Join
- Fixes Windows test failure in TestWriteOutput
* feat: add JSON output format support to CLI commands (Issue #66)
Add JSON output format support for validate and parse commands to enable
CI/CD integration, automation, and IDE problem matchers.
Changes:
- Add JSON output format structures in cmd/gosqlx/internal/output/json.go
* JSONValidationOutput: Structured validation results
* JSONParseOutput: Structured parse results with AST representation
* Support for error categorization and performance statistics
- Update validate command (cmd/gosqlx/cmd/validate.go)
* Add --output-format json flag (text/json/sarif)
* Auto-enable quiet mode when using JSON format
* Include stats in JSON when --stats flag is used
* Support both file and stdin input
- Update parse command (cmd/gosqlx/cmd/parser_cmd.go)
* Add -f json format option
* Use standardized JSON output structure
* Maintain backward compatibility with existing formats
- Add comprehensive test coverage (cmd/gosqlx/internal/output/json_test.go)
* Validation JSON output tests (success/failure cases)
* Parse JSON output tests
* Error categorization tests
* Input type detection tests
* Statement conversion tests
JSON Output Features:
- Command executed
- Input file/query information
- Success/failure status
- Detailed error messages with type categorization
- Results (AST structure, validation results)
- Optional performance statistics
Example JSON output:
{
"command": "validate",
"input": {"type": "file", "files": ["test.sql"], "count": 1},
"status": "success",
"results": {
"valid": true,
"total_files": 1,
"valid_files": 1,
"invalid_files": 0
}
}
All tests passing. Ready for CI/CD integration.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Ajit Pratap Singh <ajitpratapsingh@Ajits-Mac-mini.local>
Co-authored-by: Claude <noreply@anthropic.com>
1 parent e0f5a4d commit 265cf4f
4 files changed
Lines changed: 813 additions & 12 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
| 12 | + | |
12 | 13 | | |
13 | 14 | | |
14 | 15 | | |
| |||
173 | 174 | | |
174 | 175 | | |
175 | 176 | | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
176 | 182 | | |
177 | 183 | | |
178 | 184 | | |
| |||
197 | 203 | | |
198 | 204 | | |
199 | 205 | | |
200 | | - | |
201 | | - | |
202 | | - | |
203 | | - | |
204 | 206 | | |
205 | 207 | | |
206 | 208 | | |
| |||
227 | 229 | | |
228 | 230 | | |
229 | 231 | | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
230 | 244 | | |
231 | 245 | | |
232 | 246 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
89 | 89 | | |
90 | 90 | | |
91 | 91 | | |
92 | | - | |
93 | | - | |
| 92 | + | |
| 93 | + | |
94 | 94 | | |
95 | 95 | | |
96 | 96 | | |
97 | 97 | | |
98 | 98 | | |
99 | | - | |
| 99 | + | |
100 | 100 | | |
101 | 101 | | |
102 | 102 | | |
| |||
131 | 131 | | |
132 | 132 | | |
133 | 133 | | |
134 | | - | |
135 | | - | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
136 | 151 | | |
137 | 152 | | |
138 | 153 | | |
| |||
189 | 204 | | |
190 | 205 | | |
191 | 206 | | |
192 | | - | |
| 207 | + | |
193 | 208 | | |
194 | 209 | | |
195 | 210 | | |
196 | 211 | | |
197 | | - | |
| 212 | + | |
198 | 213 | | |
199 | 214 | | |
200 | 215 | | |
| |||
228 | 243 | | |
229 | 244 | | |
230 | 245 | | |
231 | | - | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
232 | 258 | | |
233 | 259 | | |
234 | 260 | | |
| |||
0 commit comments