node-mysql-query-utils
Version:
A simple MySQL query utils for Node.js
122 lines (97 loc) • 6.36 kB
Markdown
# Changelog
## [1.0.8] - 2025-11-17
### Added
- **TableModel**: Added `enablePrimaryKey` option to allow tables without primary keys (useful for junction tables)
- Defaults to `true` for backward compatibility
- When `false`, primary key validation is skipped
- Example: `new TableModel({ enablePrimaryKey: false, ... })`
- **TableModel**: Added shallow data cloning to prevent mutation of input data
- All update and insert methods now clone data before processing
- Uses native JavaScript spread operator (no dependencies)
- Prevents accidental side effects from data mutation
- **SQLBuilder**: Added support for `IncrementDecrementValue` in `onDuplicateKeyUpdate`
- Can now use `{ points: { increment: 10 } }` syntax in `onDuplicateKeyUpdate`
- Supports increment, decrement, and regular values
- Example: `insertRecord(data, { onDuplicateKeyUpdate: { views: { increment: 1 }, email: 'new@example.com' } })`
- **Types**: Improved type hints for `WhereCondition`
- `.AND` and `.OR` properties now show proper type hints even when using `RAW` conditions
- Better autocomplete support for nested conditions
- **Types**: Made `InsertOptions` generic with `ColumnKeys` parameter
- `onDuplicateKeyUpdate` now has proper type hints based on column keys
- Better autocomplete and type safety for `onDuplicateKeyUpdate` values
### Changed
- **TableModel**: Updated type signatures for update methods
- `createUpdate()`, `updateOne()`, and `updateAll()` now accept `UpdateValue<ColumnKeys>` instead of `Omit<UpdateValue<ColumnKeys>, PrimaryKey>`
- Primary key can be included in data and will be automatically removed
- Better type safety and accuracy
- **SQLBuilder**: Refactored increment/decrement logic into reusable methods
- Extracted `validateIncrementDecrement()` helper method
- Extracted `buildUpdateClausesAndParams()` helper method
- Eliminated code duplication between `set()` and `onDuplicateKeyUpdate`
- Improved maintainability and consistency
### Removed
- **TableModel**: Removed `createOrderbyObject()` method (breaking change)
- Use `createOrderByObject()` instead (correct spelling)
- The typo method name has been completely removed for consistency
### Fixed
- **Types**: Fixed type hints for `WhereCondition.AND` and `WhereCondition.OR`
- Type hints now work correctly even when `RawWhereCondition` is present
- Improved developer experience with better autocomplete
## [1.0.7] - 2025-05-19
### Added
- **Enhanced Type System:**
- Updated `LimitOffset` type to support more flexible limit and offset combinations
- Added `RawWhereCondition` type to support raw SQL conditions in where clauses
- Added `OrderByField` type to support both regular field ordering and raw SQL expressions
- **SQL Builder Improvements:**
- Added support for raw SQL conditions in where clauses using the `RAW` operator
- Enhanced order by functionality to support raw SQL expressions
- **Table Model Helper Functions:**
- Added `createOrderByObject` helper function to create order by objects with default values
- Added `createOrderByArray` helper function to create empty order by arrays
## [1.0.6] - 2024-12-06
### Added
- **Enhanced `SQLBuilder` Class:**
- Added logic to determine if the value is an array for `IN` condition in the `buildWhereClause` method.
- Example: `{ user_id: [1, 2, 3] }` translates to `user_id IN (1, 2, 3)`.
- Improved handling of `ctime` and `utime` values to avoid caching the value when the server starts.
- Ensured that `ctimeValue` and `utimeValue` are functions and called them for each row to set the current time if not provided.
## [1.0.5] - 2024-11-28
### Added
- **Raw SQL Support in Fields:**
- Introduced the ability to include raw SQL expressions within the `fields` parameter of the `SQLBuilder` class.
- Allows users to specify complex SQL snippets using the `RawField` type, enabling greater flexibility in query construction.
- Supports adding aliases and custom parameters for raw SQL expressions.
- **Default Table Alias in `TableModel` Class:**
- Introduced the `tableNameAlias` property in the `TableModel` constructor to set a default alias for the table.
### Fixed
- **`createXXXXXX()` Methods in `TableModel` Class:**
- Resolved an issue where all `createXXXXXX()` methods (`createSelect`, `createUpdate`, `createInsert`, etc.) were using the same instance of `SQLBuilder`.
- Ensured that each method initializes a new instance of `SQLBuilder`, preventing SQL query misconstruction and ensuring thread safety.
- Improved reliability of SQL query generation by isolating builder instances per operation.
## [1.0.4] - 2024-10-07
### Added
- Support for increment and decrement operations in the `update` method of the `SQLBuilder` class.
- Allows specifying `{ increment: number }` or `{ decrement: number }` for fields to increment or decrement their values.
- Throws an error if both `increment` and `decrement` are provided for the same field.
- Enhanced `LIKE` and `NOT LIKE` operators handling in the `SQLBuilder` class.
- Throws an error if more than one of `contains`, `startsWith`, or `endsWith` are provided for the same field.
## [1.0.3] - 2024-10-01
### Improved
- Enhanced parameter checking and error messages for `TableModel` class return methods.
### Added
- Added `NOT IN`, `NOT LIKE`, and `REGEXP` operators to the `where` condition parameter in the `SQLBuilder` class.
- For `LIKE` and `NOT LIKE` operators, previously only accepted strings. Now added support for `contains`, `startsWith`, and `endsWith` for more flexible use cases.
## [1.0.2] - 2024-09-30
### Added
- Added `options` parameter to `buildQuery` method to support query formatting.
- Made `queryParts` private to prevent accidental exposure. `queryParts` is an internal structure used to build SQL queries and should not be accessed directly.
## [1.0.1] - 2024-09-27
### Fixed
- Fixed dist folder not aligned with the source code.
## [1.0.0] - 2024-09-27
### Added
- Initial release of `node-mysql-query-utils`.
### Known Issues
- There was an issue with the dist folder not being aligned with the source code, causing discrepancies between the source and the built files.
- The `patchSingleField` function was not working as expected due to the misalignment between the dist folder and the source code.