SUM()aggregate function for SELECT queries, with optional alias andGROUP BYsupportDB::hasTable(<tableName>)method for checking whether a table exists
- Added
sum()toSelectInterfaceandhasTable()toTableInterface hasTable()resolves againstinformation_schema.TABLESwith the database and table name bound as parameters, scoped byTABLE_SCHEMAand matched exactly, so prefixes containing_cannot produce false positiveshasTable()supports both thepdoandwpdbdrivers- Added feature tests for
SUMwith and withoutGROUP BY, and forhasTable()against existing, missing, dropped, truncated, and invalid-wildcard table names
DB::truncate(<tableName>)method for clearing all data from a table
wpdbdriver failing on DELETE without WHERE clause- Exception handler printing HTML in CLI/terminal environments
- Consolidated
Statement\DropintoStatement\Tableclass for better extensibility - Added
TableInterfacefor consistent table operation API - Renamed
QueryFactory::dropQuery()totableQuery() - Added feature tests for truncate, drop, dropIfExists, delete-all, and update-all
- Added wpdb driver test coverage for delete and update operations
AVG(),MIN(),MAX()aggregate functions for SELECT queries- SQL operator validation via
IdentifierValidator::validateOperator() - INSERT...SELECT support with aggregate functions
- All WHERE methods now validate operators against a strict whitelist
- Extracted WHERE clause logic into dedicated
WhereClausetrait - Extracted JOIN clause logic into dedicated
JoinClausetrait - Renamed
src/Expression/tosrc/Clause/ - Added
WhereClauseInterfacefor consistent WHERE API across statements - Added
addAggregate()shared helper for aggregate function building - Comprehensive test coverage for aggregates and operator validation