# GSoC

## Google Summer of Code 2025 – Work Report

**Contributor:** Alex Jia\
**Project:** SQLancer – PostgreSQL Testing Enhancements\
**Organization:** SQLancer Project

***

### Overview

My GSoC 2025 project focused on extending SQLancer’s PostgreSQL module to better support features introduced in PostgreSQL versions 13 through 16. The work ranged from analyzing version-specific grammar changes to implementing support for newly introduced SQL constructs such as `MERGE`, new CTE functions, and updates to `EXTRACT`.

***

### Contributions

#### PostgreSQL 13

For PostgreSQL 13, I performed a detailed analysis of new SQL features and their relevance to SQLancer’s grammar. Most of the constructs introduced in this version are **not yet supported in SQLancer’s base grammar** and were therefore marked as *not applicable* for implementation in this cycle. Examples include:

* `ALTER NO DEPENDS ON`
* `ALTER STATISTICS SET STATISTICS`
* `ALTER TYPE`
* `ALTER VIEW RENAME COLUMN`
* `CREATE DATABASE WITH LOCALE`
* `CREATE TABLESPACE`
* `DROP DATABASE FORCE`
* `EXPLAIN ANALYSE`
* `ROW`
* `SELECT WITH TIES`

Additionally, I confirmed that certain changes required **no modification** in SQLancer, such as:

* `ALTER TABLE SET STORAGE`
* `CREATE INDEX deduplication`

This gave SQLancer maintainers a clear mapping of what v13 introduced and which parts do not affect current grammar support.

***

#### PostgreSQL 14

* **EXTRACT function updates:**
  * Added grammar support for the new EXTRACT fields that return **numeric results**.
  * Changed the return type of `EXTRACT()` from `FLOAT8` to **NUMERIC**, matching the PostgreSQL v14 update.

***

#### PostgreSQL 15

* **New CTE Function Support:**
  * Implemented generation of the new CTE functionality introduced in v15.
  * Extended SQLancer’s AST to capture additional recursive/non-recursive structures.
* **MERGE Statement Generator:**
  * Added a generator for the `MERGE` statement introduced in PostgreSQL 15.
  * Supported `WHEN MATCHED` and `WHEN NOT MATCHED` branches to fuzz-test conditional updates and inserts.

***

#### PostgreSQL 16 (Partial)

* **Generic Plan in EXPLAIN:**
  * Added grammar support for PostgreSQL 16’s generic plan option in `EXPLAIN`.
* **Renaming `force_parallel_mode`:**
  * Updated SQLancer references to reflect the renamed parameter in PostgreSQL 16, ensuring compatibility.

***

### Skills and Learning Outcomes

* **SQL grammar evolution:** Learned how to adapt SQLancer’s query generator to account for Postgres version-specific changes.
* **AST/grammar implementation:** Implemented new constructs (`MERGE`, EXTRACT numeric, CTEs) within SQLancer’s existing framework.
* **Code quality and review:** Improved maintainability and consistency through mentor feedback and iterative pull requests.

***

### Future Work

* Extend PostgreSQL 16 support further (beyond EXPLAIN and parameter renames).
* Continue reviewing new Postgres versions to keep SQLancer aligned with grammar changes.
* Improve documentation around version-specific features for future contributors.

***

### Acknowledgments

I’d like to thank my mentor **Robins** and the SQLancer community for their detailed reviews, helpful guidance, and encouragement throughout the program.

### PR Merged:

* <https://github.com/sqlancer/sqlancer/pull/1227>
* <https://github.com/sqlancer/sqlancer/pull/1228>
* <https://github.com/sqlancer/sqlancer/pull/1229>
* <https://github.com/sqlancer/sqlancer/pull/1232>
* <https://github.com/sqlancer/sqlancer/pull/1233>
* <https://github.com/sqlancer/sqlancer/pull/1234>
* <https://github.com/sqlancer/sqlancer/pull/1236>
* <https://github.com/sqlancer/sqlancer/pull/1237>

### PR In Progress

* <https://github.com/sqlancer/sqlancer/pull/1230>
* <https://github.com/sqlancer/sqlancer/pull/1231>
* <https://github.com/sqlancer/sqlancer/pull/1243>
* <https://github.com/sqlancer/sqlancer/pull/1253>
* <https://github.com/sqlancer/sqlancer/pull/1255>
* <https://github.com/sqlancer/sqlancer/pull/1264>
* <https://github.com/sqlancer/sqlancer/pull/1265>
* <https://github.com/sqlancer/sqlancer/pull/1266>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://alex-25.gitbook.io/welcome/gsoc.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
