Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
115 commits
Select commit Hold shift + click to select a range
e47c99a
New GitHub Actions workflow.
fdcastel May 31, 2025
95b2edb
Remove old test suite.
fdcastel Feb 2, 2026
634c167
Add tmp folder to .gitignore.
fdcastel Feb 7, 2026
fdd1611
Remove old workflow.
fdcastel Feb 7, 2026
0fc01b3
Add new plan and agent instructions.
fdcastel Feb 7, 2026
8a58f11
Add CMake build system with multiplatform support and CI/CD
fdcastel Feb 7, 2026
139d381
Remove branch restrictions from CI workflow to run on all branches
fdcastel Feb 7, 2026
6c4f99c
Fix CI workflow: use pwsh for Windows and correct database paths for …
fdcastel Feb 7, 2026
c50f486
Use PSFirebird embedded mode instead of installing Firebird server
fdcastel Feb 7, 2026
560d96d
Add comprehensive master plan for Firebird ODBC driver improvements
fdcastel Feb 7, 2026
ad15e8e
Add AGENTS.md
fdcastel Feb 7, 2026
10c3d1e
feat: comprehensive ISC→SQLSTATE mapping with ODBC 2.x/3.x dual support
fdcastel Feb 7, 2026
8e53082
fix: complete Phase 1 ODBC spec compliance (1.3-1.14)
fdcastel Feb 7, 2026
ea262b5
fix: CI infrastructure - add Utf16Convert.cpp to CMake, fix nproc, re…
fdcastel Feb 7, 2026
b255cdf
fix: Linux build errors and CI dependencies
fdcastel Feb 7, 2026
28f02f7
fix: Linux CI - link libodbcinst, add jammy repo for libncurses5, add…
fdcastel Feb 7, 2026
c78b1db
fix: handle missing odbcinst command on Linux CI
fdcastel Feb 7, 2026
56dfb4b
docs: update FIREBIRD_ODBC_MASTER_PLAN.md with current status
fdcastel Feb 7, 2026
2cf72a7
feat: Phase 0 - Stabilize (fix crashes and data corruption)
fdcastel Feb 7, 2026
2e5c80c
fix: move test_null_handles.cpp to lowercase tests/ dir for Linux
fdcastel Feb 7, 2026
71471db
bye
fdcastel Feb 7, 2026
14bd0b9
Remove old Builds.
fdcastel Feb 7, 2026
3fa9756
fix: direct-DLL test loading, GTEST_SKIP for connection tests, remove…
fdcastel Feb 7, 2026
b1454d9
fix: SQLColAttribute signature on Linux, DllMainSetup linker error wi…
fdcastel Feb 7, 2026
3b0265f
fix: Windows ATL build (include windows.h before HAVE_ATL guard), Lin…
fdcastel Feb 7, 2026
5907cfa
Minor fix in AGENTS.md.
fdcastel Feb 7, 2026
941868e
refactor: remove ATL/DTC support entirely
fdcastel Feb 7, 2026
e83a949
fix: harden all ODBC entry points with clearErrors and try/catch (Pha…
fdcastel Feb 7, 2026
7dbd62c
Removes README.md.
fdcastel Feb 7, 2026
2580f24
feat: implement savepoint isolation, add comprehensive test suite, ad…
fdcastel Feb 7, 2026
409d36d
Remove.
fdcastel Feb 7, 2026
33efb0f
Update references in master plan.
fdcastel Feb 7, 2026
87ad8c1
Add Docs/firebird-driver-feature-map.md
fdcastel Feb 7, 2026
a3e7a48
feat: complete Phase 4 — feature completeness
fdcastel Feb 7, 2026
9a30fd6
docs: update Firebird driver feature map for version awareness and cl…
fdcastel Feb 7, 2026
589c8e6
feat: add Firebird OO API reference for driver authors
fdcastel Feb 7, 2026
8e84576
Update Docs/firebird-driver-feature-map.md
fdcastel Feb 7, 2026
1a9d7ac
refactor: complete Phase 5 — code quality and maintainability
fdcastel Feb 7, 2026
9f7e843
docs: update master plan to reflect changes in test strategy and impl…
fdcastel Feb 7, 2026
60dc10c
feat: remove ODBC escape sequences, add Phase 6 tests (253 tests)
fdcastel Feb 8, 2026
ec927ec
feat: add full ODBC Array of Parameter Values support
fdcastel Feb 8, 2026
03f6b40
build: Use Invoke-Build.
fdcastel Feb 8, 2026
f1cf570
docs: add ODBC Crusher analysis — 5 real bugs (Phase 7), 22 false rep…
fdcastel Feb 8, 2026
ddb5a00
fix: resolve all 5 ODBC Crusher-identified bugs (Phase 7)
fdcastel Feb 8, 2026
d2d1a3d
fix: SQLSetDescField(SQL_DESC_COUNT) now allocates records array (Pha…
fdcastel Feb 8, 2026
e608201
feat: ODBC 3.8 compliance, SQL_GUID support, and version-aware data t…
fdcastel Feb 8, 2026
d83592f
Remove old files.
fdcastel Feb 8, 2026
045a936
docs: dd Phase 9 details for OO API alignment and simplification
fdcastel Feb 8, 2026
db69e2f
feat: Phase 9 — IBatch for array params, remove dead ISC code, mark c…
fdcastel Feb 8, 2026
50ae5d8
feat: complete Phase 9 — OO API alignment & simplification
fdcastel Feb 8, 2026
a4e85eb
docs: remove outdated implementation guidelines and entry point examples
fdcastel Feb 8, 2026
d21e7d1
test: port 7 psqlodbc tests to Phase 6 (67 new tests, 385 total)
fdcastel Feb 8, 2026
f147c0b
fix: portable SQLWCHAR initialization for Linux (SQLWCHAR != wchar_t)
fdcastel Feb 8, 2026
8b92bdc
fix: make WCHAR per-char checks Windows-only (UCS-4 stride on Linux)
fdcastel Feb 8, 2026
b0fe72c
Remove old installer files.
fdcastel Feb 8, 2026
03da1a5
fix: use gtest_discover_tests to register all 385 test cases with CTest
fdcastel Feb 8, 2026
660c515
docs: update license information.
fdcastel Feb 8, 2026
065abb0
refactor: simplify CI workflow by moving logic to build script and pr…
fdcastel Feb 8, 2026
6640f9b
fix: remove unnecessary charset configuration for fbintl.conf
fdcastel Feb 8, 2026
5bc749d
refactor: replace vendored FBClient.Headers with CMake FetchContent
fdcastel Feb 9, 2026
c520805
docs: add Phase 11 — SQLGetTypeInfo fixes, statement timeout, connect…
fdcastel Feb 9, 2026
0750b00
feat: Phase 11 — SQLGetTypeInfo fixes, SQLCancel/timeout, connection …
fdcastel Feb 9, 2026
9b4616a
feat: complete Phase 11 — timer-based timeout, HYT00 mapping, attribu…
fdcastel Feb 9, 2026
b78b0e7
refactor: move all source to src/, remove Res/ i18n, remove .exp arti…
fdcastel Feb 9, 2026
bbd40ff
docs: update performance profiling section in master plan
fdcastel Feb 9, 2026
cce7b96
perf: Phase 10 performance engineering - benchmark harness, locking, …
fdcastel Feb 9, 2026
d146a66
perf: implement Phase 10 optimizations — 10.88ns/row fetch throughput
fdcastel Feb 9, 2026
67f9de8
docs: update benchmarks, fix all build warnings, complete Phase 11 st…
fdcastel Feb 9, 2026
1756044
docs: Add missing status columns.
fdcastel Feb 9, 2026
47d73b8
docs: add Phase 12 details on string conversion and encoding rational…
fdcastel Feb 10, 2026
d06e5e3
feat: Phase 12.1 + 12.4.1 — SQLWCHAR codec unification and CHARSET=UT…
fdcastel Feb 10, 2026
298ad0f
fix: add explicit casts for codec function pointers on Linux (GCC -fp…
fdcastel Feb 10, 2026
8ee9c6a
refactor: Phase 12.3 — remove System conversion variants, document co…
fdcastel Feb 10, 2026
eea9305
feat: Phase 12.2-12.4 — OdbcString, direct UTF-16 diagnostics, unify …
fdcastel Feb 10, 2026
fde85d0
feat: complete Phase 12.2 — native UTF-16 metadata caching and direct…
fdcastel Feb 10, 2026
aef44fe
feat: git-based versioning and WiX MSI installer
fdcastel Feb 10, 2026
8f87168
fix: remove release notes from workflow
fdcastel Feb 10, 2026
86ed656
feat: enhance release workflow to detect prereleases
fdcastel Feb 10, 2026
11921ff
feat: enhance build and release workflows with caching and artifact m…
fdcastel Feb 10, 2026
94b1995
feat: outline Phase 13 for code simplification and dead code removal
fdcastel Feb 10, 2026
01bd8f7
refactor: Phase 13 — dead code removal, test consolidation, build cle…
fdcastel Feb 10, 2026
67daaa4
feat: update master plan for Phase 14 and 15 — adopt fb-cpp and vcpkg…
fdcastel Feb 12, 2026
ec04928
refactor: reduce AGENTS.md.
fdcastel Mar 9, 2026
eeee14e
feat: adopt vcpkg and fb-cpp for dependency management
fdcastel Mar 10, 2026
e380c3b
docs: update master plan — Phase 14.1, 14.2, 15 progress
fdcastel Mar 10, 2026
a020323
fix: add Linux build dependencies for vcpkg Firebird builds
fdcastel Mar 10, 2026
587c845
fix: add autoconf-archive to Linux CI dependencies
fdcastel Mar 10, 2026
c9748d8
feat: migrate IscConnection to fbcpp::Attachment and fbcpp::Transacti…
fdcastel Mar 10, 2026
b295549
fix: use fb-cpp commit/rollback methods to prevent use-after-free
fdcastel Mar 10, 2026
5888f54
feat: Phase 14.4.1 — replace IscStatement handle with fbcpp::Statemen…
fdcastel Mar 10, 2026
205c210
feat: Phase 14.4.2-14.4.6 — migrate parameter binding, result fetchin…
fdcastel Mar 10, 2026
8ca3a09
feat: upgrade fb-cpp to v0.0.4; migrate batch execution and scrollabl…
fdcastel Apr 4, 2026
09997dd
ci: upgrade GitHub Actions to Node.js 24; update vcpkg to latest
fdcastel Apr 4, 2026
c0cc4c3
ci: fix vcpkg update step — use git reset instead of pull
fdcastel Apr 4, 2026
d7407ef
feat: eliminate duplicate Sqlda input buffer via fbcpp buffer remappi…
fdcastel Apr 4, 2026
2903cb6
Reduce plan file, removing the already completed phases.
fdcastel Apr 4, 2026
76601da
feat: complete Phase 14.4.7.2 (output buffer remap) and 14.4.6a (merg…
fdcastel Apr 4, 2026
09c4d77
refactor: decompose Sqlda God-class into data struct with free functi…
fdcastel Apr 4, 2026
7d206d0
refactor: Phase 14.5-14.6 — migrate IscBlob and IscUserEvents to fb-c…
fdcastel Apr 4, 2026
ddeb1bb
refactor: replace JString with std::string across ODBC and IscDbc lay…
fdcastel Apr 5, 2026
57fdf03
refactor: complete Phase 14.7-14.8 — JString removal, date/time conso…
fdcastel Apr 5, 2026
5419fd1
feat: add Phase 16 and 17 for test suite improvements and CI performa…
fdcastel Apr 5, 2026
8eae4a4
feat: complete Phase 15 — replace FetchContent with vcpkg for GTest a…
fdcastel Apr 5, 2026
05a74fd
docs: add instruction for using `gh` command to check CI workflows an…
fdcastel Apr 5, 2026
0209c1c
fix: guard metadata string returns against nullptr (std::string(nullp…
fdcastel Apr 5, 2026
421b84e
feat: Phase 15.4 — add vcpkg 2026.03.18 as git submodule with CMake a…
fdcastel Apr 5, 2026
c612718
test: Phase 16 test suite improvements - dedup, parameterize, expand …
fdcastel Apr 5, 2026
b2f6b5c
perf: switch vcpkg binary cache to x-gha provider for cross-branch sh…
fdcastel Apr 5, 2026
c0ffddc
fix: prevent CI hang from unbounded cancel/timeout tests
fdcastel Apr 5, 2026
f533364
fix: rewrite ConnectionIsolation test to avoid embedded-mode deadlock
fdcastel Apr 5, 2026
90aad97
perf: replace x-gha with two-level actions/cache vcpkg strategy
fdcastel Apr 5, 2026
0c4177d
fix: save vcpkg caches even on test failure + fix ConnectionIsolation…
fdcastel Apr 5, 2026
87fb777
docs: update master plan — Phase 15.3.2 CI caching strategy documented
fdcastel Apr 5, 2026
7f9f55f
fix: ensure builds run only on branches, not tags, to avoid redundant…
fdcastel Apr 5, 2026
0368365
Update Docs\FIREBIRD_ODBC_MASTER_PLAN.original.md.
fdcastel Apr 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
80 changes: 80 additions & 0 deletions .clang-format
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# Firebird ODBC Driver — clang-format configuration
#
# This configuration matches the existing codebase style as closely as possible.
# Apply to NEW or MODIFIED code only — do not reformat the entire codebase.
#
# Usage:
# clang-format -i <file> # Format a specific file
# clang-format --dry-run <file> # Preview changes without applying
#
# To exclude legacy files from formatting, add them to .clang-format-ignore.

Language: Cpp
BasedOnStyle: LLVM

# Indentation: tabs (matching existing codebase)
UseTab: ForIndentation
TabWidth: 4
IndentWidth: 4
ContinuationIndentWidth: 4

# Column limit: generous to match existing wide lines
ColumnLimit: 140

# Braces: Allman style for functions (next line), attach for control flow
# The codebase is inconsistent; Allman is the dominant pattern for functions.
BreakBeforeBraces: Custom
BraceWrapping:
AfterClass: true
AfterControlStatement: Never
AfterEnum: true
AfterFunction: true
AfterNamespace: true
AfterStruct: true
AfterUnion: true
BeforeCatch: false
BeforeElse: false
IndentBraces: false
SplitEmptyFunction: false
SplitEmptyRecord: false
SplitEmptyNamespace: false

# Pointer/reference alignment: left (e.g., char* ptr)
PointerAlignment: Left
ReferenceAlignment: Left

# Spaces
SpaceAfterCStyleCast: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: ControlStatements
SpacesInParentheses: false
SpacesInSquareBrackets: false
SpaceInEmptyBlock: false

# Includes: keep existing order (do not sort automatically)
SortIncludes: Never

# Alignment
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignConsecutiveMacros: true
AlignTrailingComments: true

# Short forms: allow short if/loops on one line
AllowShortBlocksOnASingleLine: Empty
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: Inline
AllowShortIfStatementsOnASingleLine: Never
AllowShortLoopsOnASingleLine: false

# Namespace indentation
NamespaceIndentation: All

# Other
AccessModifierOffset: -4
AllowAllParametersOfDeclarationOnNextLine: true
BinPackArguments: true
BinPackParameters: true
FixNamespaceComments: false
MaxEmptyLinesToKeep: 2
ReflowComments: false
205 changes: 205 additions & 0 deletions .github/workflows/build-and-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,205 @@
name: Build and Test

on:
push:
# Run only on branches, not tags, since release.yml handles tags. This ensures we don't run redundant builds for release tags.
branches:
- '**'
pull_request:
workflow_call:

env:
VCPKG_ROOT: ${{ github.workspace }}/vcpkg
# Store vcpkg binary archives in a workspace-relative path so actions/cache
# can restore them before cmake runs, eliminating recompilation of ICU,
# Firebird, etc. on every run.
VCPKG_DEFAULT_BINARY_CACHE: ${{ github.workspace }}/vcpkg-bincache

jobs:
build-and-test-windows:
runs-on: windows-latest
timeout-minutes: 30

steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
submodules: false

- name: Cache vcpkg submodule
id: cache-vcpkg-submodule-win
uses: actions/cache@v5
with:
path: vcpkg
key: vcpkg-submodule-windows-${{ hashFiles('.gitmodules') }}

- name: Cache PowerShell Modules
uses: actions/cache@v5
with:
path: |
~/Documents/PowerShell/Modules/PSFirebird
~/Documents/PowerShell/Modules/InvokeBuild
key: psmodules-windows-${{ hashFiles('install-prerequisites.ps1') }}
restore-keys: psmodules-windows-

- name: Fix cmd.exe AutoRun
shell: pwsh
run: |
# Some Windows images have a cmd.exe AutoRun that leaves ERRORLEVEL=1,
# which breaks Ninja builds (vcpkg uses Ninja internally).
Remove-ItemProperty -Path 'HKCU:\Software\Microsoft\Command Processor' -Name 'AutoRun' -ErrorAction SilentlyContinue
Remove-ItemProperty -Path 'HKLM:\Software\Microsoft\Command Processor' -Name 'AutoRun' -ErrorAction SilentlyContinue

- name: Initialize vcpkg submodule
if: steps.cache-vcpkg-submodule-win.outputs.cache-hit != 'true'
run: git submodule update --init vcpkg

- name: Create vcpkg binary cache directory
shell: pwsh
run: New-Item -ItemType Directory -Force "${{ github.workspace }}/vcpkg-bincache" | Out-Null

# Two-level vcpkg cache:
# Level 1 – binary archives: individual per-package .zip files used by vcpkg
# to reinstall without compilation. restore-keys ensures a partial hit when
# vcpkg.json changes; only the new/changed packages need compiling.
- name: Cache vcpkg binary archives
uses: actions/cache@v5
with:
path: ${{ github.workspace }}/vcpkg-bincache
key: vcpkg-bincache-windows-${{ hashFiles('vcpkg.json', 'vcpkg-configuration.json') }}
restore-keys: vcpkg-bincache-windows-
save-always: true

# Level 2 – installed tree: the fully-extracted build/vcpkg_installed directory.
# On an exact key hit vcpkg detects all packages are already installed and
# exits in under a second, making cmake configure nearly instantaneous.
- name: Cache vcpkg installed packages
uses: actions/cache@v5
with:
path: build/vcpkg_installed
key: vcpkg-installed-windows-${{ hashFiles('vcpkg.json', 'vcpkg-configuration.json') }}
restore-keys: vcpkg-installed-windows-
save-always: true

- name: Bootstrap vcpkg
shell: pwsh
run: |
if ($IsWindows) { & ./vcpkg/bootstrap-vcpkg.bat -disableMetrics }
else { & ./vcpkg/bootstrap-vcpkg.sh -disableMetrics }

- name: Install Prerequisites
shell: pwsh
run: ./install-prerequisites.ps1

- name: Build
shell: pwsh
run: Invoke-Build build -Configuration Release

- name: Run Tests
shell: pwsh
run: |
# Add DLL directories to PATH so test can find them
$env:PATH = "${{github.workspace}}/build/Release;${{github.workspace}}/build/bin/Release;$env:PATH"
Invoke-Build test -Configuration Release

- name: Upload Build Artifacts
uses: actions/upload-artifact@v7
if: success()
with:
name: windows-x64-binaries
path: |
${{github.workspace}}/build/Release/*.dll
${{github.workspace}}/build/Release/*.lib
${{github.workspace}}/build/Release/*.pdb

build-and-test-linux:
runs-on: ubuntu-latest
timeout-minutes: 30

steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
submodules: false

- name: Install Dependencies
run: |
sudo apt-get update
sudo apt-get install -y unixodbc unixodbc-dev odbcinst cmake g++ \
autoconf autoconf-archive automake libtool pkg-config \
libncurses-dev libtommath-dev libatomic1
# PSFirebird needs to 'apt-get download' libncurses5/libtinfo5 packages.
# These don't exist in Ubuntu 24.04+ repos, so add Ubuntu 22.04 (jammy) as a fallback source.
if ! apt-cache show libncurses5 > /dev/null 2>&1; then
ARCH=$(dpkg --print-architecture)
echo "deb [arch=${ARCH}] http://archive.ubuntu.com/ubuntu/ jammy main universe" | sudo tee /etc/apt/sources.list.d/jammy.list
# For ARM64, use ports.ubuntu.com
if [ "$ARCH" = "arm64" ]; then
echo "deb [arch=${ARCH}] http://ports.ubuntu.com/ubuntu-ports/ jammy main universe" | sudo tee /etc/apt/sources.list.d/jammy.list
fi
sudo apt-get update
fi

- name: Cache vcpkg submodule
id: cache-vcpkg-submodule-linux
uses: actions/cache@v5
with:
path: vcpkg
key: vcpkg-submodule-linux-${{ hashFiles('.gitmodules') }}

- name: Initialize vcpkg submodule
if: steps.cache-vcpkg-submodule-linux.outputs.cache-hit != 'true'
run: git submodule update --init vcpkg

- name: Cache PowerShell Modules
uses: actions/cache@v5
with:
path: |
~/.local/share/powershell/Modules/PSFirebird
~/.local/share/powershell/Modules/InvokeBuild
key: psmodules-linux-${{ hashFiles('install-prerequisites.ps1') }}
restore-keys: psmodules-linux-

- name: Create vcpkg binary cache directory
shell: pwsh
run: New-Item -ItemType Directory -Force "${{ github.workspace }}/vcpkg-bincache" | Out-Null

- name: Cache vcpkg binary archives
uses: actions/cache@v5
with:
path: ${{ github.workspace }}/vcpkg-bincache
key: vcpkg-bincache-linux-${{ hashFiles('vcpkg.json', 'vcpkg-configuration.json') }}
restore-keys: vcpkg-bincache-linux-
save-always: true

- name: Cache vcpkg installed packages
uses: actions/cache@v5
with:
path: build/vcpkg_installed
key: vcpkg-installed-linux-${{ hashFiles('vcpkg.json', 'vcpkg-configuration.json') }}
restore-keys: vcpkg-installed-linux-
save-always: true

- name: Bootstrap vcpkg
run: ./vcpkg/bootstrap-vcpkg.sh -disableMetrics

- name: Install Prerequisites
shell: pwsh
run: ./install-prerequisites.ps1

- name: Build
shell: pwsh
run: Invoke-Build build -Configuration Release

- name: Run Tests
shell: pwsh
run: Invoke-Build test -Configuration Release

- name: Upload Build Artifacts
uses: actions/upload-artifact@v7
if: success()
with:
name: linux-x64-binaries
path: |
${{github.workspace}}/build/*.so
${{github.workspace}}/build/**/*.so
33 changes: 0 additions & 33 deletions .github/workflows/linux.yml

This file was deleted.

Loading