Releases: abstra-app/json-sql
v0.0.15 - Atomic file writes
Bug Fix
- Replaced Path.write_text() with atomic writes across all FileSystemJsonTables operations (_insert, _update, _delete, add_table, add_column, remove_column, _save_table_metadata, _remove_table_metadata, _ensure_metadata_table)
- Writes now go to a temporary file first, then os.replace() atomically swaps it into place
- Prevents file corruption caused by non-atomic truncate-and-write under concurrent I/O load
- Fixes an issue where JSON data files could end up with null bytes or partial content when multiple operations write to the same file rapidly
Full Changelog: v0.0.14...v0.0.15
Accepting global permissions
Full Changelog: v0.0.13...v0.0.14
Adding Permissions
Now you can use our library to statically check permissions from SQL queries:
from abstra_json_sql.authorization import Permissions
p = Permissions(default=False)
p.grant("SELECT", "orders", "status = 'completed' AND total > 100")
p.allowed("select * from orders where status = 'pending'") # False
p.allowed("select * from orders where total <= 100") # False
p.allowed("select * from orders where status = 'completed' AND total > 100") # True
p.revoke("SELECT", "orders", "customer_id = 42")
p.allowed("select * from orders where customer_id = 42 AND status = 'completed' AND total > 100") # Falsev0.0.12 - Parser Fixes and CI/CD Pipeline
🐛 Bug Fixes
Parser and Lexer Improvements
-
Fixed lexer keyword matching: Keywords are no longer incorrectly identified within valid identifiers
- Example:
inventoryis now correctly parsed instead of being split intoIN+ventory - This resolves parsing errors for table/column names containing SQL keywords
- Example:
-
Fixed operator precedence: Expression parsing now correctly respects operator precedence
- Logical operators (AND, OR) now have lower precedence than comparison operators
price > 10 AND stock > 0is now correctly parsed as(price > 10) AND (stock > 0)- Fixes "Unsupported types for AND" errors
-
Added pydantic to requirements.txt: Resolves missing dependency for Pydantic model support
✨ New Features
CI/CD Pipeline
- GitHub Actions workflow with automated quality checks on every PR
- Multi-version testing: Tests run on Python 3.9, 3.10, 3.11, and 3.12
- Code linting: Ruff enforces consistent code style and PEP 8 compliance
- Type checking: Pyright catches type-related bugs
- Coverage reporting: Optional Codecov integration
Development Tools
- Added
requirements-dev.txtwith pytest, pytest-cov, ruff, and pyright - Added
ruff.tomlconfiguration for linting and formatting - Added
pyrightconfig.jsonfor type checking
🔧 Configuration Changes
-
Minimum Python version: Set to 3.9+ (was 3.8+)
- Required due to modern type hint syntax in the codebase
-
Branch protection: Configured for
mainbranch- Blocks direct pushes (PRs only)
- Requires 7 status checks to pass before merge
- Auto-deletes branches after merge
📊 Test Coverage
- ✅ 190 tests passing across 4 Python versions
- ✅ All code passes linting (Ruff)
- ✅ All code passes type checking (Pyright)
🔗 Related PRs
- #1 - Fix operator precedence and lexer keyword matching
- #2 - Add CI/CD pipeline with pytest, ruff, and pyright
📦 Installation
pip install abstra-json-sql==0.0.12🙏 Credits
🤖 Generated with Claude Code
Co-Authored-By: Claude noreply@anthropic.com
Test build 11
Full Changelog: v0.0.10...v0.0.11
Test build 10
Full Changelog: v0.0.9...v0.0.10
Test build 9
Full Changelog: v0.0.8...v0.0.9
Test build 8
Full Changelog: v0.0.7...v0.0.8
Test build 7
Full Changelog: v0.0.6...v0.0.7
Test build 6
Full Changelog: v0.0.5...v0.0.6