Features
- feat: use
@frappe.concurrent_limitonexecutemethod (@nextchamp-saqib) - feat: add statistics for Insights Table v3 (@nextchamp-saqib)
- feat: add incremental sync for warehouse table imports (@nextchamp-saqib)
- feat: improve description for sync cursor column (@nextchamp-saqib)
- feat: support data store for native SQL queries (@nextchamp-saqib)
- feat: implement lineage graph for queries & chart (@nextchamp-saqib)
- feat: add server busy state and show refresh button (@nextchamp-saqib)
- feat: add view sql option to chart actions (@nextchamp-saqib)
- feat: add
useShortcutcomposable with platform-aware label formatting (@nextchamp-saqib) - feat: flag numeric columns from aggregated SQL queries as measures (@nextchamp-saqib)
- feat: add explain plan button to query editor (@nextchamp-saqib)
- feat: sync query references for native SQL operations (@nextchamp-saqib)
- feat: add permission tests (@nextchamp-saqib)
- feat: add action to delete team (@nextchamp-saqib)
- feat: add
upsertstrategy for incremental sync (#1121) (@nextchamp-saqib) - feat: add test cases for time column aggregation (@nextchamp-saqib)
- feat: add
Allow Data Downloadsetting to prevent non-admins from downloading data (#1138) (@nextchamp-saqib) - feat: add test for replace mode (@nextchamp-saqib)
- feat: add export image to dashboard builder (#1146) (@nextchamp-saqib)
- feat: format first day of fiscal year in table headers (#1150) (@nextchamp-saqib)
- feat: workbook folders (@nextchamp-saqib)
- feat: normalize_json function (#1173) (@nextchamp-saqib)
Bug Fixes
- fix: ensure force parameter is a boolean in query execution (#1069) (@nextchamp-saqib)
- fix: ensure force parameter is a boolean in query execution (#1069) (#1070) (@mergify[bot])
- fix: disable statement timeout for long-running import jobs (#1072) (@nextchamp-saqib)
- fix: allow datatable to render when query is local (#1075) (@nextchamp-saqib)
- fix: allow datatable to render when query is local (#1075) (#1076) (@mergify[bot])
- fix: correct loading indicator placement in DataTable component (#1078) (@nextchamp-saqib)
- fix: handle specific TableNotFound exception (@nextchamp-saqib)
- fix: suppress all errors when disconnecting open connections (@nextchamp-saqib)
- fix: skip permission check for public dashboards & charts (@nextchamp-saqib)
- fix: set name before bulk_insert (@nextchamp-saqib)
- fix: use
truncateinstead ofstrftimefor date granularity (@nextchamp-saqib) - fix: ignore expections for optional flag (@nextchamp-saqib)
- fix: cannot access shared dashboard with fy formatted dates (@nextchamp-saqib)
- fix: parse sql with correct dialect (@nextchamp-saqib)
- fix: decimals are exported as string (@nextchamp-saqib)
- fix: handle falsy values (#1089) (@srujan00123)
- fix: disable statement timeout for long-running import jobs (#1072) (#1074) (@mergify[bot])
- fix: correct loading indicator placement in DataTable component (#1078) (#1079) (@mergify[bot])
- fix: handle falsy values (#1089) (#1090) (@mergify[bot])
- fix: ignore perms when importing table (@nextchamp-saqib)
- fix: add
idxto meta fields list (@nextchamp-saqib) - fix: invalid
db_typefield (@nextchamp-saqib) - fix: ensure rollback after script query execution (@nextchamp-saqib)
- fix: bypass pagination in download_results to prevent truncated exports (#1096) (@Copilot)
- fix: use
frappe.db.get_single_valuefor compatibility with older fw versions (#1101) (@shahzeelahmed) - fix:
AttributeError: module 'frappe' has no attribute 'get_single_value'in older fw versions <16 (backport #1101) (#1102) (@mergify[bot]) - fix:
is_not_setfilter should match empty strings (@nextchamp-saqib) - fix: handle local DuckDB write connections safely (@nextchamp-saqib)
- fix: maximize button position (@nextchamp-saqib)
- fix: preserve custom measure names and reset removed measures (@nextchamp-saqib)
- fix: normalize upload paths for file imports (@nextchamp-saqib)
- fix: excel uploads (#1125) (@nextchamp-saqib)
- fix: handle time field granularities in query builder (@nextchamp-saqib)
- fix: handle time grouping with string operations (@nextchamp-saqib)
- fix: incorrect where clause identification logic (#1129) (@nextchamp-saqib)
- fix: migration failure when unable to parse sql (#1131) (@shahzeelahmed)
- fix: enable server script (@nextchamp-saqib)
- fix: group by time column (#1128) (@nextchamp-saqib)
- fix: remove duplicate method (@nextchamp-saqib)
- fix: table import in replace mode (@nextchamp-saqib)
- fix: handle NULL-typed columns in DuckDB and improve DataFrame creation (#1145) (@nextchamp-saqib)
- fix: do not drop optional fields when applying permissions (@nextchamp-saqib)
- fix: add tests (@nextchamp-saqib)
- fix: remove invalid import (@nextchamp-saqib)
- fix: avoid test record creation failures (@nextchamp-saqib)
- fix: clear stale workbooks on navigation (@nextchamp-saqib)
- fix: restore workbook list fetch limit to 100 (#1157) (@Copilot)
- fix:
is_admincheck (#1159) (@nextchamp-saqib) - fix: conflicts between
version-3andversion-3-hotfix(#1165) (@nextchamp-saqib) - fix: add psycopg2-binary dependency (#1176) (@nextchamp-saqib)
- fix: add psycopg2-binary dependency (#1176) (#1178) (@mergify[bot])
- fix: prevent double quoting of database name in get_table_list (#1179) (@AdnanQuazi)
- fix: filters not loading on public dashboards for guests (#1174) (@nextchamp-saqib)
- fix: merge conflicts (@nextchamp-saqib)