**Clean URLs:**
Now, you can access your pages without the extra “.sql” suffix. For example, if you’ve got a file called `page.sql`, simply use:
```
https://example.com/page
```
The previous behavior is preserved, so adding “.sql” still works. A big shout‑out to [@guspower](https://github.com/guspower) for their contributions!
**Complete Routing Rewrite:**
We’ve reworked our request routing system from top to bottom to make things smoother and more predictable for every request.
---
**HTTP Basic Authentication in fetch:**
SQLPage’s `sqlpage.fetch` function now supports HTTP Basic Authentication. Quickly call external APIs that require a username and password. For example:
```sql
SELECT sqlpage.fetch(
'https://api.example.com/data',
JSON_OBJECT(
'auth', JSON_OBJECT('username', 'user', 'password', 'pass')
)
);
```
Learn more in the [fetch documentation](https://sql-page.com/documentation.sql?component=fetch#component).
**Smarter fetch errors & Headers Defaults:**
When your HTTP request definition is off, you’ll now get clearer error messages—especially if there are unknown fields. Plus, the `headers` parameter is now optional: if omitted, SQLPage sends a default User‑Agent header that includes the SQLPage version.
---
- **Table CSS Fixes:**
We fixed a bug that prevented proper CSS classes from being added to table cells. Your tables now look as polished as you expect.
- **Native Number Formatting:**
Numeric values in tables are automatically formatted to your visitor’s locale. That means thousands separators, correct decimal points, and sorting that respects numeric order—without any extra work from you.
*Example:*
```sql
SELECT 'table' AS component, 'Sales Data' AS title;
SELECT amount AS 'Total Sales' FROM sales;
```
Not a formatted string in the database—just pure, locale‑sensitive output.
- **Enhanced Card Layouts:**
Creating custom layouts with the `card` component is now easier:
- The `embed` property automatically appends the `_sqlpage_embed` parameter to render your page as an embeddable fragment.
- When an embedded page is rendered, the `shell` component is replaced by `shell-empty` to avoid duplicate headers and metadata.
- **Auto‑Submit Forms:**
Add the new `auto_submit` parameter to your forms, and watch them auto‑submit on any field change—perfect for instant filters on dashboards.
*Example:*
```sql
SELECT 'form' AS component, 'Filter Results' AS title, true AS auto_submit;
SELECT 'date' AS name;
```
- **Dynamic Options for Dropdowns:**
Use the new `options_source` parameter to load dropdown options dynamically from another SQL file. Great for autocomplete on huge option lists!
*Example:*
```sql
SELECT 'form' AS component, 'Select Country' AS title, 'countries.sql' AS options_source;
SELECT 'country' AS name;
```
- **Markdown in Field Descriptions:**
With the new `description_md` property, you can now render markdown in form field descriptions to better guide your users.
- **Improved Header Error Messages:**
If you accidentally use a header component (like `json` or `cookie`) after sending data, you’ll now see a more helpful error message.
---
- **ApexCharts Upgrade:**
We’ve updated ApexCharts to [v4.4.0](https://github.com/apexcharts/apexcharts.js/releases/tag/v4.4.0). Expect smoother charts with bug fixes for your visualizations.
- **Tabler Icons & CSS:**
Enjoy a refreshed look with Tabler Icons updated to [v3.30.0](https://tabler.io/changelog#/changelog/tabler-icons-3.30) and the CSS framework upgraded to [Tabler 1.0.0](https://github.com/tabler/tabler/releases/tag/v1.0.0). More icons, better consistency, and a sleeker interface.
---
- **Enhanced CSV Error Messages:**
We improved error messages when a CSV import fails (using a `copy` statement and file upload).
- **Postgres CSV Bug Fix:**
A pesky bug causing subsequent requests to fail after a CSV import error on PostgreSQL is now fixed. (See [Issue #788](https://github.com/sqlpage/SQLPage/issues/788) for details.)
---
**Upgraded SQL Parser (v0.54):**
Our sqlparser is now at [v0.54](https://github.com/apache/datafusion-sqlparser-rs/blob/main/changelog/0.54.0.md), offering enhanced support for advanced SQL syntax. New additions include:
- **INSERT...SELECT...RETURNING:**
```sql
INSERT INTO users (name, email)
SELECT :name, :email
WHERE :name IS NOT NULL
RETURNING 'redirect' AS component, 'user.sql?id=' || id AS link;
```
- **PostgreSQL’s overlaps operator:**
```sql
SELECT 'card' AS component;
SELECT event_name AS title, start_time || ' - ' || end_time AS description
FROM events
WHERE (start_time, end_time) overlaps ($start_filter::timestamp, $end_filter::timestamp);
```
- **MySQL’s INSERT...SET syntax:**
```sql
INSERT INTO users
SET name = :name, email = :email;
```
---
**New Function: sqlpage.headers**
Easily manage and inspect HTTP headers with the brand‑new [`sqlpage.headers`](https://sql-page.com/functions.sql?function=headers) function.