Skip to content

Commit ca3f309

Browse files
ajitpratap0Ajit Pratap Singhclaude
authored
docs: comprehensive package READMEs and API_REFERENCE.md expansion (2,360+ lines) (#116)
* docs: add comprehensive package READMEs for core packages Created detailed README documentation for 5 core packages: - pkg/sql/parser: Parser architecture, features, usage patterns - pkg/sql/tokenizer: Zero-copy tokenization, Unicode support, performance - pkg/sql/ast: AST node types, visitor pattern, object pooling - pkg/sql/keywords: Multi-dialect keyword system, categorization - pkg/linter: Rule system, Phase 1a status, CLI usage Each README includes: - Overview and key features - Usage examples (basic and advanced) - Architecture and component breakdown - Best practices and common pitfalls - Testing instructions - Performance characteristics - Related packages and documentation links - Version history Impact: - Addresses 70%+ of documentation gaps identified in exploration - Provides package-level documentation for developers - Improves onboarding for contributors - Complements existing API_REFERENCE.md Related: #57 (DOC-001: Complete Comprehensive API Reference) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * docs: add comprehensive High-Level API section to API_REFERENCE.md Added complete documentation for pkg/gosqlx high-level convenience API: **Parsing Functions** (7 functions): - Parse(), ParseWithContext(), ParseWithTimeout() - ParseBytes(), MustParse(), ParseMultiple() - Validate() **Metadata Extraction** (6 functions): - ExtractTables(), ExtractTablesQualified() - ExtractColumns(), ExtractColumnsQualified() - ExtractFunctions() **Types**: - QualifiedName with String() and FullName() methods **Documentation Includes**: - Function signatures with parameters and returns - Usage examples for each function - Use case descriptions - Known parser limitations - Performance comparison vs low-level API - Complete working example Content: 338 lines Coverage: 100% of public gosqlx API Related: #57 (DOC-001) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * docs: add comprehensive Keywords package section to API_REFERENCE.md Added extensive documentation for pkg/sql/keywords package (631 lines): Core Types: - Keywords type with dialect support - SQLDialect enum (PostgreSQL, MySQL, SQLServer, Oracle, SQLite, Generic) - KeywordCategory enum (Reserved, DML, DDL, Function, Operator, DataType) Functions Documented: - New() - Create keyword registry for dialect - IsKeyword() - Check if word is keyword (case-insensitive) - IsReserved() - Check if keyword is reserved - GetKeyword() - Get detailed keyword information - GetTokenType() - Get token type for keyword - IsCompoundKeyword() - Check for compound keywords (GROUP BY, NULLS FIRST, etc.) - GetCompoundKeywordType() - Get compound keyword token type - AddKeyword() - Add custom keywords Keyword Categories: - Reserved keywords (SELECT, FROM, WHERE, JOIN, etc.) - DML keywords (DISTINCT, ALL, LIMIT, OFFSET, etc.) - Compound keywords (GROUP BY, ORDER BY, LEFT JOIN, NULLS FIRST/LAST) - Window function keywords (ROW_NUMBER, RANK, LAG, LEAD, etc.) Dialect-Specific Keywords: - PostgreSQL (ILIKE, MATERIALIZED, RETURNING, CONCURRENTLY, etc.) - MySQL (UNSIGNED, ZEROFILL, FORCE, IGNORE, etc.) - SQLite (AUTOINCREMENT, CONFLICT, REPLACE, VACUUM, etc.) Usage Examples: - Basic keyword recognition and validation - Compound keyword detection - Identifier validation and quoting - SQL formatting and syntax highlighting - Dialect switching - Integration with tokenizer/parser Performance: - O(1) hash map lookups - Pre-allocated keyword maps (~10KB per dialect) - Thread-safe with no synchronization overhead - Cache-friendly memory layout Best Practices: - Create once, reuse (singleton pattern) - Use appropriate dialect for database - Check reserved keywords for identifiers - Common patterns for syntax highlighting, normalization, quoting 🤖 Generated with Claude Code (https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * docs: add comprehensive Errors package section to API_REFERENCE.md Added extensive documentation for pkg/errors package (670 lines): Core Types: - ErrorCode - Unique error identifiers (E1xxx, E2xxx, E3xxx, E4xxx) - Error - Structured error with rich context and hints - ErrorContext - SQL source context with line/column highlighting Error Codes (36 codes across 4 categories): - E1xxx: Tokenizer errors (8 codes) - E1001-E1008 (unexpected char, unterminated string, invalid number, etc.) - E2xxx: Parser syntax errors (12 codes) - E2001-E2012 (unexpected token, missing clause, invalid syntax, etc.) - E3xxx: Semantic errors (4 codes) - E3001-E3004 (undefined table/column, type mismatch, ambiguous column) - E4xxx: Unsupported features (2 codes) - E4001-E4002 (unsupported feature, unsupported dialect) Error Builder Functions: - NewError() - Create structured error with auto-generated help URL - WithContext() - Add SQL source context with highlighting (chainable) - WithHint() - Add actionable suggestions (chainable) - WithCause() - Add underlying cause error for wrapping (chainable) Helper Functions: - IsCode() - Check if error has specific code - GetCode() - Extract error code from error Error Formatting Features: - Multi-line context visualization with line numbers - Position indicators (^) highlighting error location - 3-line context window (1 before, error line, 1 after) - Auto-generated documentation links (https://docs.gosqlx.dev/errors/{code}) Usage Examples: - Basic error creation - Error with full context (SQL highlighting) - Multi-line SQL context visualization - Error code checking with IsCode() - Error code extraction with GetCode() - Programmatic error handling - Chaining error context (WithContext, WithHint, WithCause) - Error recovery patterns Best Practices: - Always add context for user-facing errors - Use error codes for programmatic handling (not string matching) - Provide actionable hints (specific, not vague) - Chain error context in libraries (enhance lower-layer errors) Common Error Patterns: - Pattern 1: Tokenizer error with recovery - Pattern 2: Parser error with user-friendly message mapping - Pattern 3: Error logging with structured fields Error Categories Quick Reference Table: - E1xxx: Tokenizer errors (lexical analysis) - E2xxx: Parser syntax errors (parsing) - E3xxx: Semantic errors (validation) - E4xxx: Unsupported features (not implemented) 🤖 Generated with Claude Code (https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * docs: add comprehensive Metrics package section to API_REFERENCE.md Added extensive documentation for pkg/metrics package (721 lines): Core Types: - Metrics - Internal metrics collector (not exported) - Stats - Performance statistics snapshot with 16 fields Stats Fields (16 total): - Basic counts: TokenizeOperations, TokenizeErrors, ErrorRate - Performance: AverageDuration, OperationsPerSecond - Pool metrics: PoolGets, PoolPuts, PoolBalance, PoolMissRate - Query size: MinQuerySize, MaxQuerySize, AverageQuerySize, TotalBytesProcessed - Timing: Uptime, LastOperationTime - Errors: ErrorsByType map Configuration Functions: - Enable() - Activate metrics collection - Disable() - Deactivate metrics collection - IsEnabled() - Check if collection is active Recording Functions (automatic): - RecordTokenization() - Record tokenization operation - RecordPoolGet() - Record pool retrieval - RecordPoolPut() - Record pool return Query Functions: - GetStats() - Get current performance statistics - LogStats() - Alias for GetStats (logging convenience) - Reset() - Clear all metrics (testing) Usage Examples: - Basic metrics collection - Production monitoring with periodic reporting - Error tracking and analysis - Pool efficiency monitoring - Query size analysis - JSON export for APIs - HTTP metrics endpoint - Prometheus integration - Performance alerting with SLOs Integration Patterns: - Pattern 1: Application startup (enable early, disable late) - Pattern 2: Periodic reporting (ticker-based) - Pattern 3: Testing with metrics (reset before test) Performance Characteristics: - Thread Safety: Lock-free atomic operations, RWMutex for error map - Memory Overhead: ~200 bytes + error map (fixed footprint) - Performance Impact: ~50ns enabled, ~1ns disabled, O(n) GetStats Best Practices: - Enable at application startup (not per-operation) - Use periodic reporting (1min intervals) - Monitor pool efficiency (>95% hit rate target) - Set performance SLOs (error rate, throughput, latency, pool efficiency) Production Monitoring: - HTTP /metrics endpoint - Prometheus integration - Alert on: high error rate (>1%), slow duration (>1ms), low pool hit rate (<90%), low throughput (<1k ops/sec) - Metrics dashboard example with formatted output JSON Export Support: - All Stats fields have json tags - Direct marshaling to JSON - Ready for monitoring systems Completes API_REFERENCE.md expansion with: - High-Level API (338 lines) - Keywords Package (631 lines) - Errors Package (670 lines) - Metrics Package (721 lines) Total new documentation: 2,360 lines across 4 major sections 🤖 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 0914ece commit ca3f309

6 files changed

Lines changed: 4415 additions & 1 deletion

File tree

0 commit comments

Comments
 (0)