Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
a5424e0
Delete the whole project to start refactoring, rename `_lib` to `_nat…
awolverp Sep 6, 2026
d4a326d
Add new pyerr proc-macro to rapidquery-macros
awolverp Sep 7, 2026
ff07807
Add internal helper functions and aiases
awolverp Sep 7, 2026
9ea9cd0
Bump rapidquery-macros version to 1.0.0-alpha1
awolverp Sep 7, 2026
e152786
Change license to MIT
awolverp Sep 7, 2026
22cd74b
Rename rapidquery._native to rapidquery._core
awolverp Sep 7, 2026
63aa876
Write dialects and statement prepare traits
awolverp Sep 7, 2026
8071a77
feat(native): Refactor and optimize dialects
awolverp Sep 7, 2026
ccbbb9c
Expand comments, write pybindings for dialects
awolverp Sep 7, 2026
6e33b4a
Expose dialect package API with marker equality and canonical names
awolverp Sep 7, 2026
ea0d465
Write tests for pybinding dialects
awolverp Sep 7, 2026
b31bfe5
Write native::data_type
awolverp Sep 7, 2026
3c07169
refactor(data_type): Refactor and optimize data types and serializers
awolverp Sep 7, 2026
2848bc6
Update docs
awolverp Sep 8, 2026
f4c7bd5
Write Ident
awolverp Sep 8, 2026
96c5a97
Fix docstrings
awolverp Sep 8, 2026
2d3f0ac
Optimize Ident
awolverp Sep 8, 2026
5d2e3b0
Clean code
awolverp Sep 9, 2026
a304c94
refactor prepare_statement, and move serializers to `native`
awolverp Sep 9, 2026
535777a
Optimize JSONSerializer
awolverp Sep 10, 2026
03c6a74
Move serializers to data_type
awolverp Sep 10, 2026
756fa03
Write value
awolverp Sep 10, 2026
0e6c461
Update ident/value file names
awolverp Sep 10, 2026
78cb3b6
Add new `nightly` feature to use nightly features for optimizing (dis…
awolverp Sep 10, 2026
88a2f2d
Colocate engine and pyclasses; drop native/pybindings split
awolverp Sep 10, 2026
37a3af7
Put pyclass on Ident, Value, and DataType
awolverp Sep 10, 2026
198185a
Restructure and minimize code
awolverp Sep 11, 2026
9219158
Add more generic types
awolverp Sep 11, 2026
9b1d257
Make Value generic
awolverp Sep 11, 2026
5183f84
Implement Expr (not optimized, not stable)
awolverp Sep 12, 2026
affe18d
Optimize and refactor expressions (not tested)
awolverp Sep 15, 2026
7ac9b68
Fix stub-files
awolverp Sep 16, 2026
ed013fd
Rewrite tests for data_type and serializers
awolverp Sep 16, 2026
fd3d20e
Update Function
awolverp Sep 16, 2026
6c97491
Fix some bugs, write tests for ident/value/function
awolverp Sep 17, 2026
b688307
Complete expr tests and use literal-priority extraction
awolverp Sep 20, 2026
3ee9f70
Refactor PyFunction
awolverp Sep 20, 2026
1d15a00
Split SimilarTo/RLike from Like/ILike, support ANY for LIKE/ILIKE
awolverp Sep 21, 2026
a8403e7
Support `AtDashAt`, `DoubleAt`, `Hash`, `PGAbs`, `PGCubeRoot`, `PGPos…
awolverp Sep 21, 2026
41fb3b3
Support TRY_CAST and SAFE_CAST
awolverp Sep 21, 2026
a0e1a1f
Support format and at_time_zone in CastExpr
awolverp Sep 21, 2026
0825dd0
Rewrite dialects and add a new dialect: GenericDialect
awolverp Sep 22, 2026
f60b2a1
Done 3 tasks
awolverp Sep 23, 2026
186f4c8
Use positional parameters instead of named parameters, so developers can
awolverp Sep 23, 2026
72d3cfc
Temporary remove GenericDialect, Fix FILTER WHERE conditions for
awolverp Sep 24, 2026
e148bc9
Rename ExprEnum to ExprInner and split nodes from it
awolverp Sep 25, 2026
875d4f1
Add ILikeExpressionOptions and move Like into enum_/like.rs
awolverp Sep 25, 2026
4ca3bd9
Fix SIMILAR TO and RLIKE expressions
awolverp Sep 26, 2026
f10cd46
Update .gitignore
awolverp Sep 28, 2026
6402be0
Remove dialect-specific unary operators. Use CustomExpr for this dial…
awolverp Sep 28, 2026
1738ac5
Do tasks 4
awolverp Sep 28, 2026
bde2046
Fix SIMILAR TO and RLIKE expressions
awolverp Sep 26, 2026
39970d6
Task 3
awolverp Sep 28, 2026
94473db
Clean code, remove some dead codes
awolverp Sep 29, 2026
28a9421
Make CAST, TRIM, and COLLATE rendering dialect-aware
awolverp Sep 29, 2026
37a0be9
Fix bugs and optimize dialects
awolverp Sep 30, 2026
2c7f5ed
Remove dialect-specific interned data types to remove magic behaviour
awolverp Sep 30, 2026
d080421
Refactor serializers, remove some dialect-specific keyword while seri…
awolverp Oct 1, 2026
352d6b7
Add rustfmt.toml; restore inet_format, macaddr_format, bytes_format, …
awolverp Oct 1, 2026
087bd24
Add timestamptz/timestamp with time zone to interned data types
awolverp Oct 1, 2026
f6c8d52
Expand data type name tests
awolverp Oct 1, 2026
97d82a2
Expand interned data type names
awolverp Oct 1, 2026
c1b48a9
Rewrite dialects with packed bits to save memory
awolverp Oct 2, 2026
32cf1d9
Remove `serializer` field from PyDataType
awolverp Oct 4, 2026
09ad395
Remove PyDataType
awolverp Oct 4, 2026
e55ae8e
Add pre-commit, Makefile, lint/format rules
awolverp Oct 4, 2026
b1a9985
Port dialect options to Python
awolverp Oct 4, 2026
93e189e
Accept anything instead of only conditions in Function.filter and Cas…
awolverp Oct 4, 2026
cef6f8a
Cover DialectFlags edge cases
awolverp Oct 5, 2026
c5423dd
Complete tests
awolverp Oct 5, 2026
14ecd24
Rename dialect format_* methods to write_*
awolverp Oct 5, 2026
2f1151a
Update docstrings and doccomments
awolverp Oct 6, 2026
eec90fa
Update lib.rs
awolverp Oct 7, 2026
7326327
Update lib.rs
awolverp Oct 7, 2026
556ff46
Update internal repr utils
awolverp Oct 9, 2026
a401465
Add CONTRIBUTING.md and SECURITY.md
awolverp Oct 9, 2026
71228b8
Complete PyExpr methods, such as `__add__`.
awolverp Oct 10, 2026
733b6a2
Update github workflows, add pytest-xdist dep
awolverp Oct 11, 2026
ef0d579
Support customization protocols: __serializer__, __ident__, __expr__
awolverp Oct 12, 2026
3e47ee3
Rename rapidquery_macros::customization_protocol to cust_protocol, an…
awolverp Oct 12, 2026
d4a1327
Optimize customization protocol on Python 3.13+
awolverp Oct 12, 2026
572056c
Change version from v1.0.0-alpha1 to 0.2.0-alpha1. Keep version low t…
awolverp Oct 13, 2026
a1e1af8
Update test workflow
awolverp Oct 14, 2026
8e2dcbe
Specify initial tasks for implementing ASTs
awolverp Oct 14, 2026
384a441
Update docstrings
awolverp Oct 15, 2026
4dc45f2
Add `dcl`, `ddl`, `dml`, and `tcl` modules
awolverp Oct 15, 2026
d093fdf
Update CONTRIBUTING.md
awolverp Oct 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
254 changes: 149 additions & 105 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,225 +4,269 @@ on:
push:
tags:
- "*"

workflow_dispatch:

permissions:
contents: read

env:
(^_^): &interpreters "3.10 3.11 3.12 3.13 3.14 3.14t 3.15 3.15t pypy3.11"
○_○: &interpreters_without_pypy "3.10 3.11 3.12 3.13 3.14 3.14t 3.15 3.15t"
(o_o): &interpreters_win_arm64 "3.11 3.12 3.13 3.14 3.14t 3.15 3.15t"

UV_FROZEN: true

jobs:
linux:
runs-on: ${{ matrix.platform.runner }}
build-linux:
runs-on: ubuntu-latest
strategy:
matrix:
platform:
- {
runner: ubuntu-latest,
target: x86_64,
interpreter: "3.10 3.11 3.12 3.13 3.14 3.14t pypy3.11 graalpy3.11 graalpy3.12",
target: x86_64-unknown-linux-gnu,
arch: x86_64,
interpreter: *interpreters,
}
- {
runner: ubuntu-latest,
target: i686,
interpreter: "3.10 3.11 3.12 3.13 3.14 3.14t pypy3.11",
target: i686-unknown-linux-gnu,
arch: x86,
interpreter: *interpreters,
}
- {
runner: ubuntu-latest,
target: aarch64,
interpreter: "3.10 3.11 3.12 3.13 3.14 3.14t pypy3.11 graalpy3.11 graalpy3.12",
target: aarch64-unknown-linux-gnu,
arch: aarch64,
interpreter: *interpreters,
}
- {
runner: ubuntu-latest,
target: armv7,
interpreter: "3.10 3.11 3.12 3.13 3.14 3.14t",
target: armv7-unknown-linux-gnueabihf,
arch: armv7,
interpreter: *interpreters,
}
- {
runner: ubuntu-latest,
target: s390x,
interpreter: "3.10 3.11 3.12 3.13 3.14 3.14t",
target: s390x-unknown-linux-gnu,
arch: s390x,
interpreter: *interpreters,
}
- {
runner: ubuntu-latest,
target: ppc64le,
interpreter: "3.10 3.11 3.12 3.13 3.14 3.14t",
target: powerpc64le-unknown-linux-gnu,
arch: ppc64le,
interpreter: *interpreters,
}
- {
runner: ubuntu-latest,
target: riscv64gc-unknown-linux-gnu,
interpreter: "3.10 3.11 3.12 3.13 3.14 3.14t",
arch: riscv64,
interpreter: *interpreters,
}

steps:
- uses: actions/checkout@v5
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- uses: actions/setup-python@v6
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
with:
python-version: "3.x"
activate-environment: true
enable-cache: false
python-version: "3"

- uses: PyO3/maturin-action@v1.51.0
- uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0
with:
target: ${{ matrix.platform.target }}
args: --release --out dist --interpreter ${{ matrix.platform.interpreter }}
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
sccache: ${{ github.ref_type != 'tag' }}
manylinux: auto
rust-toolchain: nightly
args: >-
--release
--out dist
--interpreter ${{ matrix.platform.interpreter }}
--compatibility pypi

- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: wheels-linux-${{ matrix.platform.target }}
name: wheels-linux-${{ matrix.platform.arch }}
path: dist

musllinux:
runs-on: ${{ matrix.platform.runner }}
build-musllinux:
runs-on: ubuntu-latest
strategy:
matrix:
platform:
- {
runner: ubuntu-latest,
target: x86_64,
interpreter: "3.10 3.11 3.12 3.13 3.14 3.14t pypy3.11",
target: x86_64-unknown-linux-musl,
arch: x86_64,
interpreter: *interpreters,
}
- {
runner: ubuntu-latest,
target: aarch64,
interpreter: "3.10 3.11 3.12 3.13 3.14 3.14t pypy3.11",
target: i686-unknown-linux-musl,
arch: x86,
interpreter: *interpreters,
}
- {
runner: ubuntu-latest,
target: armv7,
interpreter: "3.10 3.11 3.12 3.13 3.14 3.14t pypy3.11",
target: aarch64-unknown-linux-musl,
arch: aarch64,
interpreter: *interpreters,
}
- {
target: armv7-unknown-linux-musleabihf,
arch: armv7,
interpreter: *interpreters,
}
- {
target: riscv64gc-unknown-linux-musl,
arch: riscv64,
interpreter: *interpreters,
}

steps:
- uses: actions/checkout@v5
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- uses: actions/setup-python@v6
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
with:
python-version: "3.x"
activate-environment: true
enable-cache: false
python-version: "3"

- uses: PyO3/maturin-action@v1.51.0
- uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0
with:
target: ${{ matrix.platform.target }}
args: --release --out dist --interpreter ${{ matrix.platform.interpreter }}
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
manylinux: musllinux_1_1
rust-toolchain: nightly
sccache: ${{ github.ref_type != 'tag' }}
manylinux: musllinux_1_2
args: >-
--release
--out dist
--interpreter ${{ matrix.platform.interpreter }}
--compatibility pypi

- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: wheels-musllinux-${{ matrix.platform.target }}
name: wheels-musllinux-${{ matrix.platform.arch }}
path: dist

windows:
build-windows:
runs-on: ${{ matrix.platform.runner }}
strategy:
matrix:
platform:
- {
runner: windows-latest,
target: x64,
interpreter: "3.10 3.11 3.12 3.13 3.14 3.14t",
arch: x64,
interpreter: *interpreters,
}
- {
runner: windows-latest,
target: x86,
interpreter: "3.10 3.11 3.12 3.13 3.14 3.14t",
arch: x86,
interpreter: *interpreters_without_pypy,
}
- {
runner: windows-11-arm,
target: aarch64,
arch: arm64,
interpreter: *interpreters_win_arm64,
}

steps:
- uses: actions/checkout@v5.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: actions/setup-python@v6.0.0

- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: 3.x
architecture: ${{ matrix.platform.target }}
- uses: PyO3/maturin-action@v1.49.4
python-version: "3.x"
architecture: ${{ matrix.platform.arch }}

- uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0
with:
target: ${{ matrix.platform.target }}
args: --release --out dist --interpreter ${{ matrix.platform.interpreter }}
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
rust-toolchain: nightly
sccache: ${{ github.ref_type != 'tag' }}
args: >-
--release
--out dist
--interpreter ${{ matrix.platform.interpreter }}
--compatibility pypi

- uses: actions/upload-artifact@v4.6.2
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: wheels-windows-${{ matrix.platform.target }}
path: dist

macos:
runs-on: ${{ matrix.platform.runner }}
build-macos:
runs-on: macos-latest
strategy:
matrix:
platform:
- {
runner: macos-latest,
target: x86_64,
interpreter: "3.10 3.11 3.12 3.13 3.13t 3.14 3.14t pypy3.11",
}
- {
runner: macos-latest,
target: aarch64,
interpreter: "3.10 3.11 3.12 3.13 3.13t 3.14 3.14t pypy3.11",
}
- { target: x86_64, interpreter: *interpreters }
- { target: aarch64, interpreter: *interpreters }

steps:
- uses: actions/checkout@v5.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- uses: actions/setup-python@v6.0.0
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: 3.x
python-version: "3.x"

- uses: PyO3/maturin-action@v1.49.4
- uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0
with:
target: ${{ matrix.platform.target }}
args: --release --out dist --interpreter ${{ matrix.platform.interpreter }}
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
rust-toolchain: nightly
sccache: ${{ github.ref_type != 'tag' }}
args: >-
--release
--out dist
--interpreter ${{ matrix.platform.interpreter }}
--compatibility pypi

- uses: actions/upload-artifact@v4.6.2
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: wheels-macos-${{ matrix.platform.target }}
path: dist

build-sdist:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- uses: PyO3/maturin-action@v1.51.0
- name: Build sdist
uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0
with:
command: sdist
args: --out dist
rust-toolchain: nightly

- uses: actions/upload-artifact@v4
- name: Upload sdist
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: wheels-sdist
path: dist

release:
runs-on: ubuntu-latest
if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }}
needs: [linux, musllinux, windows, macos, build-sdist]
if: github.ref_type == 'tag' || github.event_name == 'workflow_dispatch'
needs:
- build-linux
- build-musllinux
- build-windows
- build-macos
- build-sdist

permissions:
id-token: write # signing release artifacts
contents: write # uploading release artifacts
attestations: write
id-token: write
contents: write

steps:
- uses: actions/download-artifact@v5

- uses: actions/attest-build-provenance@v3
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
subject-path: "wheels-*/*"
pattern: wheels-*
merge-multiple: true
path: dist

- name: Publish to PyPI
if: ${{ startsWith(github.ref, 'refs/tags/') }}
uses: PyO3/maturin-action@v1.51.0
env:
MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
with:
command: upload
args: --non-interactive --skip-existing wheels-*/*
rust-toolchain: nightly
if: github.ref_type == 'tag'
uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
with:
packages-dir: dist
Loading