@@ -5,6 +5,134 @@ All notable changes to SQL CLI will be documented in this file.
55The format is based on [ Keep a Changelog] ( https://keepachangelog.com/en/1.0.0/ ) ,
66and this project adheres to [ Semantic Versioning] ( https://semver.org/spec/v2.0.0.html ) .
77
8+ ## [ 1.66.0] - 2025-11-02
9+
10+ ### ✨ Major Features
11+
12+ #### ** SELECT * EXCLUDE - DuckDB-Compatible Column Exclusion**
13+ Implements DuckDB-style ` SELECT * EXCLUDE (columns...) ` syntax for cleaner queries when you want most columns but not all.
14+
15+ ** New Syntax** :
16+ ``` sql
17+ -- Exclude sensitive columns
18+ SELECT * EXCLUDE (password, ssn, credit_card) FROM users WHERE active = true;
19+
20+ -- Exclude multiple columns for cleaner output
21+ SELECT * EXCLUDE (created_at, updated_at, deleted_at, internal_id) FROM products;
22+
23+ -- Works with all SQL clauses
24+ SELECT * EXCLUDE (eccentricity, albedo)
25+ FROM solar_system
26+ WHERE type = ' Planet'
27+ ORDER BY mean_distance_au;
28+ ```
29+
30+ ** Benefits** :
31+ - ** Security** - Easy to exclude sensitive columns (passwords, SSNs, tokens)
32+ - ** Performance** - Skip large BLOB/TEXT columns when not needed
33+ - ** Maintainability** - New columns auto-included without query updates
34+ - ** Readability** - Clearer intent than listing 50+ columns manually
35+
36+ ** Implementation** :
37+ - Parser support for ` * EXCLUDE (column_list) ` syntax
38+ - AST extension with ` SelectItem::StarExclude ` variant
39+ - Query engine expansion at execution time (no transformer needed)
40+ - Case-insensitive column matching
41+ - Comprehensive example file: ` examples/select_star_exclude.sql `
42+ - Formal test with 16 query validations
43+
44+ #### ** Comprehensive Line Geometry Toolkit**
45+ Extended vector math with complete line analysis functions for collision detection, CAD, graphics, and geometric computations.
46+
47+ ** New Functions** :
48+ - ** ` LINE_INTERSECT(p1, p2, p3, p4) ` ** - Find exact intersection of two infinite 2D lines
49+ - Returns intersection point as vector, or NULL if parallel
50+ - Example: ` LINE_INTERSECT(VEC(0,0), VEC(4,4), VEC(0,4), VEC(4,0)) ` → ` (2,2) `
51+
52+ - ** ` SEGMENT_INTERSECT(p1, p2, p3, p4) ` ** - Check if bounded line segments intersect
53+ - Returns intersection point if segments cross, NULL otherwise
54+ - Crucial for collision detection - checks actual segment overlap, not extended lines
55+
56+ - ** ` CLOSEST_POINT_ON_LINE(point, line_point, line_dir) ` ** - Project point onto line
57+ - Returns closest point on line to given point
58+ - Works in 2D and 3D
59+ - Example: ` CLOSEST_POINT_ON_LINE(VEC(2,2), VEC(0,0), VEC(1,0)) ` → ` (2,0) `
60+
61+ - ** ` POINT_LINE_DISTANCE(point, line_point, line_dir) ` ** - Perpendicular distance
62+ - Calculate shortest distance from point to line
63+ - Works in 2D and 3D
64+
65+ - ** ` LINE_REFLECT_POINT(point, line_point, line_dir) ` ** - Mirror point across line
66+ - Reflect point across a line (mirror transformation)
67+ - Useful for graphics, physics, symmetry operations
68+
69+ ** Use Cases** :
70+ - ** Collision Detection** - Check if moving objects intersect
71+ - ** Snap-to-Grid** - Find closest point on grid lines
72+ - ** CAD/Graphics** - Mirror images, project points
73+ - ** Mapping** - Calculate building-to-road distances
74+
75+ ** Example File** : ` examples/complete_line_analysis.sql ` with 18+ demonstrations
76+
77+ #### ** Enhanced Vector Mathematics**
78+ Comprehensive vector operations for 2D/3D calculations.
79+
80+ ** Existing Functions** (documented):
81+ - ` VEC(x, y) ` or ` VEC(x, y, z) ` - Create 2D/3D vectors
82+ - ` VEC_DOT(v1, v2) ` - Dot product
83+ - ` VEC_CROSS(v1, v2) ` - Cross product
84+ - ` VEC_LENGTH(v) ` - Magnitude/length
85+ - ` VEC_NORMALIZE(v) ` - Unit vector
86+ - ` VEC_DISTANCE(v1, v2) ` - Distance between points
87+ - ` VEC_ADD(v1, v2) ` - Vector addition
88+ - ` VEC_SUB(v1, v2) ` - Vector subtraction
89+ - ` VEC_SCALE(v, scalar) ` - Scalar multiplication
90+
91+ ### 🔧 Improvements
92+
93+ ** PostgreSQL Compatibility (v1.65.0)** :
94+ - ** ILIKE operator** - Case-insensitive LIKE with transformer
95+ - ` SELECT * FROM users WHERE email ILIKE '%@gmail.com' `
96+ - Rewrites to ` UPPER(email) LIKE UPPER('%@gmail.com') `
97+ - Full pattern matching with ` % ` and ` _ ` wildcards
98+
99+ ** CI/CD Enhancements** :
100+ - ** Performance benchmarking** in GitHub Actions
101+ - Tracks query performance trends across pushes
102+ - Uploads benchmark results as artifacts (30-day retention)
103+ - Non-blocking - doesn't fail builds
104+
105+ ** Test Infrastructure** :
106+ - ** Fixed capture bug** in ` test_examples.py `
107+ - Line-by-line JSON parser now skips empty arrays
108+ - Multi-statement script capture works correctly
109+ - All 28 formal tests passing
110+
111+ ### 🐛 Bug Fixes
112+
113+ - ** REPLACE keyword conflict** - Removed REPLACE as keyword to avoid conflict with REPLACE() function
114+ - ** Temp table persistence** - Restored in ` --execute-statement ` mode
115+ - ** Test capture** - Fixed normalize_json for multi-statement output
116+
117+ ### 📚 Documentation
118+
119+ - ** Roadmap updated** - SELECT * EXCLUDE marked complete
120+ - ** Examples enhanced** - New geometry demonstrations
121+ - ** Function documentation** - Complete line analysis toolkit guide
122+
123+ ### 🎯 Summary
124+
125+ ** New in this release** :
126+ - ✅ SELECT * EXCLUDE (DuckDB compatibility)
127+ - ✅ 5 line geometry functions (CAD/graphics/collision detection)
128+ - ✅ ILIKE operator (PostgreSQL compatibility)
129+ - ✅ Performance benchmarking CI
130+ - ✅ Test infrastructure improvements
131+
132+ ** Total functions** : 100+ SQL functions including geometry, vector math, astronomy, chemistry, physics, and more!
133+
134+ ---
135+
8136## [ 1.64.0] - 2025-11-01
9137
10138### ✨ Major Features
0 commit comments