Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
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
5 changes: 0 additions & 5 deletions .github/workflows/code-quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,6 @@ jobs:
java-version: '25'
- name: Build with coverage
run: mvn --batch-mode clean verify
- name: Upload JaCoCo coverage report
uses: actions/upload-artifact@v7
with:
name: jacoco-report
path: target/site/jacoco/
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
with:
Expand Down
42 changes: 42 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Documentation

on:
release:
types: [published]
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: "pages"
cancel-in-progress: false

jobs:
build-and-deploy:
name: Build and Deploy
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Pages
uses: actions/configure-pages@v5

- name: Build with Jekyll
uses: actions/jekyll-build-pages@v1
with:
source: ./docs
destination: ./_site

- name: Upload artifact
uses: actions/upload-pages-artifact@v3

- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
21 changes: 21 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
name: Lint

on:
pull_request:
paths:
- "docs/**/*.md"
- ".markdownlint.yml"

jobs:
markdown:
name: Validate Markdown
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Lint Markdown
uses: DavidAnson/markdownlint-cli2-action@v16
with:
globs: "docs/**/*.md"
config: ".markdownlint.yml"
12 changes: 0 additions & 12 deletions .github/workflows/unit-tests.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
name: Unit Tests

permissions:
checks: write
pull-requests: write
contents: read

on:
Expand Down Expand Up @@ -32,11 +30,6 @@ jobs:
with:
name: java-query-builder-jar
path: target/*.jar
- name: Publish JUnit test results
uses: EnricoMi/publish-unit-test-result-action@v2
if: (!cancelled())
with:
files: target/surefire-reports/*.xml

feature-tests:
runs-on: ubuntu-latest
Expand All @@ -53,8 +46,3 @@ jobs:
java-version: ${{ matrix.java-version }}
- name: Run feature tests
run: mvn --batch-mode -Dtest='feature.**.*Test' test
- name: Publish Feature Test Results
uses: EnricoMi/publish-unit-test-result-action@v2
if: (!cancelled())
with:
files: target/surefire-reports/*.xml
12 changes: 12 additions & 0 deletions .markdownlint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
default: true
MD013: false
MD022: false
MD025:
front_matter_title: ""
MD033: false
MD036: false
MD041: false
MD024:
siblings_only: true
MD007:
indent: 2
50 changes: 49 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
# JavaQueryBuilder

[![JitPack](https://jitpack.io/v/EzFramework/JavaQueryBuilder.svg)](https://jitpack.io/#EzFramework/JavaQueryBuilder)
[![GitHub Packages](https://img.shields.io/github/v/release/EzFramework/JavaQueryBuilder?label=GitHub%20Packages&logo=github)](https://github.com/EzFramework/JavaQueryBuilder/packages)
[![codecov](https://codecov.io/gh/EzFramework/JavaQueryBuilder/branch/main/graph/badge.svg)](https://codecov.io/gh/EzFramework/JavaQueryBuilder)

A lightweight, fluent Java library for building parameterized SQL queries and filtering in-memory data, no runtime dependencies required.


## Features

- Fluent, readable builder API for SELECT, INSERT, UPDATE, DELETE, and CREATE TABLE
Expand All @@ -10,6 +15,7 @@ A lightweight, fluent Java library for building parameterized SQL queries and fi
- Subquery support: `WHERE col IN (SELECT ...)`, `WHERE EXISTS (SELECT ...)`, `WHERE NOT EXISTS`, derived-table `FROM (SELECT ...) AS alias`, JOIN subqueries, and scalar `(SELECT ...) AS alias` in SELECT
- Column selection, `DISTINCT`, `GROUP BY`, `ORDER BY`, `LIMIT`, and `OFFSET`
- SQL dialect support: Standard, MySQL, SQLite
- **Global and per-query configuration of defaults (e.g., dialect, columns, limit, LIKE wrapping) via `QueryBuilderDefaults`**
- In-memory filtering via `QueryableStorage`
- Zero runtime dependencies, pure Java 21+

Expand All @@ -21,7 +27,7 @@ Add the dependency to your `pom.xml`:
<dependency>
<groupId>com.github.EzFramework</groupId>
<artifactId>JavaQueryBuilder</artifactId>
<version>1.0.4</version>
<version>1.0.5</version>
</dependency>
```

Expand Down Expand Up @@ -387,6 +393,48 @@ new SelectBuilder()
.build(); // → SqlResult
```


## Global and Per-Query Configuration

You can preset the default SQL dialect, default columns, limit, offset, and LIKE wrapping for all queries using `QueryBuilderDefaults`. This is useful for enforcing a project-wide dialect (e.g., always use SQLite) or customizing builder defaults.

### Set SQLite as the default dialect for all queries

```java
import com.github.ezframework.javaquerybuilder.query.QueryBuilderDefaults;
import com.github.ezframework.javaquerybuilder.query.sql.SqlDialect;

// Set at application startup:
QueryBuilderDefaults.setGlobal(
QueryBuilderDefaults.builder()
.dialect(SqlDialect.SQLITE)
.build()
);

// All new QueryBuilder, SelectBuilder, and DeleteBuilder instances will use SQLite quoting by default:
SqlResult result = new QueryBuilder()
.select("id", "name")
.from("users")
.buildSql();
// → SELECT id, name FROM "users"
```

### Override per query

You can override the defaults for a single query using `.withDefaults()`:

```java
SqlResult result = new QueryBuilder()
.withDefaults(QueryBuilderDefaults.builder(QueryBuilderDefaults.global())
.dialect(SqlDialect.MYSQL)
.build())
.from("users")
.buildSql();
// → SELECT * FROM `users`
```

See the Javadoc for [`QueryBuilderDefaults`](src/main/java/com/github/ezframework/javaquerybuilder/query/QueryBuilderDefaults.java) for all configurable options.

## SQL Dialects

By default, `buildSql(table)` uses `SqlDialect.STANDARD` (no identifier quoting). Pass a second argument to use a different dialect:
Expand Down
4 changes: 4 additions & 0 deletions docs/Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
source "https://rubygems.org"

gem "github-pages", group: :jekyll_plugins
gem "just-the-docs"
63 changes: 63 additions & 0 deletions docs/_config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
title: JavaQueryBuilder
description: >-
A lightweight, fluent Java library for building parameterized SQL queries
and filtering in-memory data. No runtime dependencies required.

url: "https://ezframework.github.io"
baseurl: "/JavaQueryBuilder"

# ── Appearance ────────────────────────────────────────────────────────────────
color_scheme: javaquerybuilder
heading_anchors: true

# ── Header links ──────────────────────────────────────────────────────────────
aux_links:
"GitHub":
- "https://github.com/EzFramework/JavaQueryBuilder"
"JitPack":
- "https://jitpack.io/#EzFramework/JavaQueryBuilder"

aux_links_new_tab: true

# ── Navigation ────────────────────────────────────────────────────────────────
nav_sort: case_insensitive
nav_external_links:
- title: Changelog
url: "https://github.com/EzFramework/JavaQueryBuilder/releases"
hide_icon: false

# ── Search ────────────────────────────────────────────────────────────────────
search_enabled: true
search:
heading_level: 2
previews: 3
preview_words_before: 5
preview_words_after: 10
tokenizer_separator: /[\s/]+/

# ── Footer ────────────────────────────────────────────────────────────────────
back_to_top: true
back_to_top_text: "Back to top"

footer_content: >-
Copyright &copy; 2024&ndash;2026 Gyvex.
Distributed under the
<a href="https://github.com/EzFramework/JavaQueryBuilder/blob/main/LICENSE">MIT License</a>.

# ── Kramdown ──────────────────────────────────────────────────────────────────
kramdown:
syntax_highlighter_opts:
block:
line_numbers: false

# ── Plugins ───────────────────────────────────────────────────────────────────
plugins:
- jekyll-remote-theme
- jekyll-seo-tag

# ── Build exclusions ──────────────────────────────────────────────────────────
exclude:
- Gemfile
- Gemfile.lock

remote_theme: just-the-docs/just-the-docs
42 changes: 42 additions & 0 deletions docs/_sass/color_schemes/javaquerybuilder.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// JavaQueryBuilder — dark/blue/white color scheme for just-the-docs
//
// Palette:
// Background #141414 (body)
// Surface #1c1c1c (sidebar, cards)
// Elevated #222222 (code blocks, search, table rows)
// Border #2e2e2e
// Text #d0d0d0 (body) / #ffffff (headings)
// Accent #4d9de0 (blue — links, nav highlight, buttons)
// Accent dim #3a7bbf (hover state)

$color-scheme: dark;

// ── Surfaces ─────────────────────────────────────────────────────────────────
$body-background-color: #141414;
$sidebar-color: #1c1c1c;
$feedback-color: #181818;

// ── Typography ────────────────────────────────────────────────────────────────
$body-text-color: #d0d0d0;
$body-heading-color: #ffffff;

// ── Links & accent ───────────────────────────────────────────────────────────
$link-color: #4d9de0;
$btn-primary-color: #4d9de0;

// ── Borders ───────────────────────────────────────────────────────────────────
$border-color: #2e2e2e;

// ── Code ──────────────────────────────────────────────────────────────────────
$code-background-color: #222222;

// ── Tables ────────────────────────────────────────────────────────────────────
$table-background-color: #1a1a1a;

// ── Search ────────────────────────────────────────────────────────────────────
$search-background-color: #222222;
$search-foreground-color: #c0c0c0;
$search-border-color: #333333;

// ── Buttons ───────────────────────────────────────────────────────────────────
$base-button-color: #252525;
Loading
Loading