Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
94 commits
Select commit Hold shift + click to select a range
636eda8
started work
Gazizonoki Apr 18, 2025
68be8f6
C API
Gazizonoki May 10, 2025
0bbafaa
ODBC MVP
Gazizonoki May 16, 2025
1a88c7e
Revert C API
Gazizonoki May 16, 2025
5c6528a
Parameter bind
Gazizonoki May 26, 2025
f1afec2
Add unit test
Gazizonoki May 26, 2025
46a70de
fix
Gazizonoki May 26, 2025
18ed9eb
added tx support
Gazizonoki May 26, 2025
5a31fd0
step
Gazizonoki May 30, 2025
b6953ab
step
Gazizonoki Jun 2, 2025
80985d6
step
Gazizonoki Jun 3, 2025
44a53ee
Error handlig
Gazizonoki Jul 11, 2025
f405ec1
some fixes
Apr 7, 2026
32ea94a
env features
Apr 7, 2026
069ad81
attributes
Apr 8, 2026
14aa9f1
fix
Apr 9, 2026
c5de516
driver pool
Ylonies Apr 17, 2026
5792672
conn attributes
Ylonies Apr 17, 2026
4119fc5
stmt attr
Ylonies Apr 18, 2026
4ce6cbd
retry qyery for autocommit
Ylonies Apr 18, 2026
5e248c1
getdiagfield + fixes
Ylonies Apr 27, 2026
7473228
review fixes
Ylonies May 5, 2026
c4def37
full core api tests
Ylonies May 6, 2026
3215ee6
some metadata functions
Ylonies May 7, 2026
81c3d41
erlang odbc client
Ylonies May 7, 2026
cbac688
fixes
Ylonies May 12, 2026
7dc8dc9
fix odbc covert for chrono
Ylonies May 16, 2026
0484d5d
fix
Ylonies May 18, 2026
1a66ffa
review fixes
Ylonies May 20, 2026
9e9b2e0
refactor exec cursor prefetch and test CMake
Ylonies May 23, 2026
05e8a8e
mv examples odbc
Ylonies May 23, 2026
8e2db31
odbcinst.ini on build and install
Ylonies May 24, 2026
3089bae
fix PIC for .so builds
Jun 8, 2026
959f77d
fix odbc driver binding behaviour
Jun 10, 2026
d0713b4
fix build
Jun 10, 2026
eb0b2f3
fix the bind param feature
Jun 11, 2026
d9ca258
fix cmake pr regression
Jun 11, 2026
bcc5bac
remove useless driver pool
Jun 17, 2026
3abb0d4
driver::Stop(true):)
Jun 17, 2026
b78d101
fully core-odbc compliant driver
Jun 17, 2026
da6fa30
fix the tests
Jun 18, 2026
2d52154
fix odbc core conformance
Jul 14, 2026
bbbbdec
work in progress
Jul 28, 2026
8d36e51
performance is not an acceptance criteria
Jul 29, 2026
e7e32f8
document actual odbc limitations
Jul 30, 2026
8817ac5
create a doc with goals and restrictions
Jul 31, 2026
1d9a41a
fix qt odbc
Jul 31, 2026
6ece58b
add odbc deb package
Jul 31, 2026
580c267
run tests for odbc pull requests
Jul 31, 2026
f2ca143
run only odbc tests for feature pull requests
Jul 31, 2026
8a53b85
fix driver ownership
Aug 3, 2026
1b223c8
implemented connection string authentification
Aug 4, 2026
683b7b3
remove useless stats conditional
Aug 4, 2026
e03e8ce
fix SQL_DIAG_ROW_COUNT
Aug 4, 2026
6a7d9b7
fix issues and ci
Aug 4, 2026
732b041
Align ODBC packaging with CPack workflow
Aug 11, 2026
f0cf17f
Fix ODBC integration runtime dependencies
Aug 12, 2026
df0e99b
add qt test
Aug 13, 2026
9aee23b
Simplify ODBC integration workflow
Aug 13, 2026
2767dea
Publish ODBC integration reports
Aug 13, 2026
bd65fd8
Publish ODBC Allure report on Pages
Aug 13, 2026
c5c26fd
Run upstream Qt ODBC integration suite
Aug 13, 2026
0cea806
Preserve Qt errors in Allure reports
Aug 14, 2026
fa7d8c8
Report expected Qt failures in Allure
Aug 14, 2026
0d74c12
Isolate upstream Qt ODBC conformance runs
Aug 14, 2026
6be7b06
Fix Qt fixture patching in CI
Aug 14, 2026
3a39307
Stabilize Qt ODBC conformance results
Aug 14, 2026
81b62ad
Reclassify Qt ODBC expected failures
Aug 17, 2026
9aa12aa
Complete Qt ODBC integration coverage
Aug 17, 2026
8adda8a
Fix ODBC compatibility across YDB versions
Aug 18, 2026
1ededed
refactor driver
Aug 18, 2026
4122dab
Refactor ODBC internals to reduce duplication
Aug 18, 2026
4cb5fa7
Fix standalone ODBC unit build dependencies
Aug 19, 2026
80ef272
Fix ODBC parser and API edge cases
Aug 20, 2026
55050a0
Narrow ODBC binding proposal
Aug 20, 2026
80533c7
Define final ODBC result and concurrency contract
Aug 20, 2026
40121cc
SQLNativeSql
Aug 20, 2026
88aa0b7
Implement static ODBC cursors
Aug 21, 2026
e8cf4f1
Simplify static ODBC cursor storage
Aug 21, 2026
a4f7642
Fix ODBC CI classification and cursor test build
Aug 21, 2026
4f71b7b
Fix Qt static cursor navigation
Aug 21, 2026
4414cab
Classify remaining Qt limitations
Aug 24, 2026
81eac29
Fix qt untyped null to null conversions
Aug 24, 2026
542777f
simplify rowset resolving
Aug 24, 2026
0a8fea3
fix review issues
Aug 24, 2026
2deabda
more detailed errors
Aug 24, 2026
3b0bb03
fix cursor state handling
Aug 24, 2026
cdd463b
Cap forward cursor rowset reservation
Shfdis Aug 24, 2026
f9b851a
Fix ODBC interoperability and packaging
Aug 27, 2026
a1ef0e6
Fix ODBC prepared metadata lifecycle
Aug 28, 2026
8fa5c26
Fix ODBC escape clause parsing
Aug 28, 2026
ab168fd
Fix macOS registration and ODBC database identity
Aug 31, 2026
e49ffb1
Expose complete ODBC database identity
Aug 31, 2026
21a9d26
Handle legacy YDB DBMS version metadata
Sep 1, 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
4 changes: 2 additions & 2 deletions .github/actions/prepare_vm/action.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ runs:
if [[ '${{ inputs.mode }}' == 'build' ]]; then
sudo apt-get -y install \
ccache clang g++ gcc git libidn11-dev libssl-dev lld ninja-build \
pkg-config python3 ragel yasm
pkg-config python3 ragel unixodbc-dev yasm
ccache --set-config=base_dir="$(realpath ..)"
ccache --set-config=cache_dir="$HOME/.ccache"
ccache --zero-stats
else
sudo apt-get -y install libidn12 libssl3 libstdc++6
sudo apt-get -y install libidn12 libodbc2 libodbcinst2 libssl3 libstdc++6
fi
18 changes: 15 additions & 3 deletions .github/scripts/run_iam_integration_tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

set -euo pipefail

IAM_REGEX='^(DriverAuth|TMetadataFixture|TJwtIamFixture|TOAuthIamFixture|OAuth_WithFacility)\.'
IAM_REGEX='^(DriverAuth|TMetadataFixture|TJwtIamFixture|TOAuthIamFixture|OAuth_WithFacility|OdbcAuthentication)\.'
IAM_CONTAINER_NAME="${IAM_CONTAINER_NAME:-ydb-iam}"
IAM_CTEST_JOBS="${IAM_CTEST_JOBS:-2}"
IAM_READY_ATTEMPTS="${IAM_READY_ATTEMPTS:-60}"
Expand All @@ -16,7 +16,7 @@ cleanup_iam() {
wait_for_iam_ydb() {
for _ in $(seq 1 "${IAM_READY_ATTEMPTS}"); do
if docker exec -e "YDB_TOKEN=${IAM_TOKEN}" "${IAM_CONTAINER_NAME}" /ydb \
--endpoint grpc://localhost:2136 \
--endpoint grpc://localhost:2236 \
--database /local \
sql -s 'select 1' >/dev/null 2>&1; then
return 0
Expand All @@ -29,19 +29,31 @@ wait_for_iam_ydb() {
return 1
}

provision_odbc_static_user() {
docker exec -e "YDB_TOKEN=${IAM_TOKEN}" "${IAM_CONTAINER_NAME}" /ydb \
--endpoint grpc://localhost:2236 \
--database /local \
sql -s "CREATE USER odbcauth PASSWORD '12345678'"
}

trap cleanup_iam EXIT
cleanup_iam

docker run -d --name "${IAM_CONTAINER_NAME}" --hostname localhost \
-p 2235:2135 -p 2236:2136 -p 28765:8765 \
-p 2235:2235 -p 2236:2236 -p 28765:28765 \
-v /tmp/ydb_iam_certs:/ydb_certs \
-e GRPC_TLS_PORT=2235 \
-e GRPC_PORT=2236 \
-e MON_PORT=28765 \
-e YDB_USE_IN_MEMORY_PDISKS=true \
-e YDB_TABLE_ENABLE_PREPARED_DDL=true \
-e YDB_ENFORCE_USER_TOKEN_REQUIREMENT=true \
-e YDB_DEFAULT_CLUSTERADMIN=root@builtin \
ghcr.io/ydb-platform/local-ydb:trunk

wait_for_iam_ydb
provision_odbc_static_user

YDB_ENDPOINT=localhost:2236 YDB_DATABASE=/local \
YDB_ODBC_STATIC_USER=odbcauth YDB_ODBC_STATIC_PASSWORD=12345678 \
ctest -j"${IAM_CTEST_JOBS}" --test-dir build -R "${IAM_REGEX}" --output-on-failure
2 changes: 1 addition & 1 deletion .github/workflows/coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ jobs:
run: |
set -euo pipefail

IAM_REGEX='^(DriverAuth|TMetadataFixture|TJwtIamFixture|TOAuthIamFixture|OAuth_WithFacility)\.'
IAM_REGEX='^(DriverAuth|TMetadataFixture|TJwtIamFixture|TOAuthIamFixture|OAuth_WithFacility|OdbcAuthentication)\.'
FLAKY_REGEX='(ManyMessages|DiscoveryHang|DescribeHang)'
EXCLUDE_REGEX="${IAM_REGEX}|${FLAKY_REGEX}"

Expand Down
216 changes: 216 additions & 0 deletions .github/workflows/odbc-integration.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,216 @@
name: ODBC consumer integration
on:
pull_request:
branches: [odbc-driver-feature]
types: [labeled, synchronize, reopened, ready_for_review, closed]
permissions: {contents: read}
concurrency: {group: "odbc-integration-${{ github.event.pull_request.number }}-${{ github.event.action == 'closed' && 'merged' || 'pr' }}", cancel-in-progress: true}
jobs:
build:
name: Build and validate ydb-odbc package
if: >-
(github.event.action == 'closed' && github.event.pull_request.merged == true) ||
(github.event.action != 'closed' &&
contains(github.event.pull_request.labels.*.name, 'ODBC full matrix'))
runs-on: ubuntu-24.04
outputs:
matrix: ${{ steps.registry.outputs.matrix }}
config: ${{ steps.registry.outputs.config }}
target_sha: ${{ steps.target.outputs.sha }}
env:
CPM_SOURCE_CACHE: ${{ github.workspace }}/.cache/cpm
CCACHE_DIR: ${{ github.workspace }}/.cache/ccache
steps:
- name: Resolve tested commit
id: target
run: echo 'sha=${{ github.event.action == 'closed' && github.event.pull_request.merge_commit_sha || github.event.pull_request.head.sha }}' >> "$GITHUB_OUTPUT"
- uses: actions/checkout@v4
with:
ref: ${{ steps.target.outputs.sha }}
- name: Validate harness and create matrix
id: registry
run: |
python3 -m pip install --user --break-system-packages 'PyYAML==6.0.2'
harness=odbc/tests/frameworks/harness.py
python3 "$harness" registry
python3 -m unittest odbc.tests.test_integration_harness
echo "matrix=$(python3 "$harness" registry --matrix)" >> "$GITHUB_OUTPUT"
echo "config=$(python3 "$harness" registry --config)" >> "$GITHUB_OUTPUT"
- name: Restore dependency and compiler caches
uses: actions/cache@v4
with:
path: |
.cache/cpm
.cache/ccache
key: deb-ubuntu-24.04-${{ hashFiles('cmake/CPM.cmake', 'cmake/dependencies.cmake') }}-${{ github.run_id }}
restore-keys: |
deb-ubuntu-24.04-${{ hashFiles('cmake/CPM.cmake', 'cmake/dependencies.cmake') }}-
- name: Build ODBC package component
env:
YDB_DEB_COMPONENTS: ydb-odbc
run: ./scripts/build_cpack_deb_packages.sh build-odbc/packages
- name: Validate and upload package
shell: bash
run: |
shopt -s nullglob
packages=(build-odbc/packages/ydb-odbc_*.deb)
test "${#packages[@]}" -eq 1
sha256sum "${packages[0]}" > build-odbc/packages/ydb-odbc.sha256
dpkg-deb -f "${packages[0]}" > build-odbc/packages/ydb-odbc.control
- uses: actions/upload-artifact@v4
with:
name: ydb-odbc-package
path: build-odbc/packages/ydb-odbc*
if-no-files-found: error
retention-days: 3
- name: Run package contract
continue-on-error: true
env:
DRIVER_COMMIT: ${{ steps.target.outputs.sha }}
YDB_TEST_IMAGE: ${{ fromJSON(steps.registry.outputs.config).ydb.image }}
YDB_ENDPOINT: ${{ fromJSON(steps.registry.outputs.config).ydb.endpoint }}
YDB_DATABASE: ${{ fromJSON(steps.registry.outputs.config).ydb.database }}
run: >-
python3 odbc/tests/frameworks/harness.py launch --consumer package-contract
--runtime-image '${{ fromJSON(steps.registry.outputs.config).package_runtime_image }}'
--package build-odbc/packages/ydb-odbc_*.deb --results results/package-contract
- uses: actions/upload-artifact@v4
if: always()
with:
name: odbc-results-package-contract
path: results/package-contract
if-no-files-found: warn
retention-days: 14
consumers:
name: ${{ matrix.display_name }} (${{ matrix.mode }})
needs: build
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.build.outputs.matrix) }}
services:
ydb:
image: ${{ fromJSON(needs.build.outputs.config).ydb.image }}
ports: [2136:2136]
env: {YDB_USE_IN_MEMORY_PDISKS: true, YDB_TABLE_ENABLE_PREPARED_DDL: true}
options: --hostname localhost
steps:
- uses: actions/checkout@v4
with:
ref: ${{ needs.build.outputs.target_sha }}
- uses: actions/download-artifact@v4
with:
name: ydb-odbc-package
path: package
- name: Wait for YDB
shell: bash
run: |
for attempt in $(seq 1 60); do
docker exec '${{ job.services.ydb.id }}' /ydb \
-e grpc://localhost:2136 -d /local scheme ls >/dev/null 2>&1 && exit 0
sleep 2
done
docker logs '${{ job.services.ydb.id }}' || true
exit 1
- name: Run consumer
env:
DRIVER_COMMIT: ${{ needs.build.outputs.target_sha }}
YDB_TEST_IMAGE: ${{ fromJSON(needs.build.outputs.config).ydb.image }}
YDB_ENDPOINT: ${{ fromJSON(needs.build.outputs.config).ydb.endpoint }}
YDB_DATABASE: ${{ fromJSON(needs.build.outputs.config).ydb.database }}
run: >-
python3 odbc/tests/frameworks/harness.py launch --consumer '${{ matrix.consumer }}'
--mode '${{ matrix.mode }}'
--runtime-image '${{ matrix.runtime_image }}' --package package/ydb-odbc_*.deb
--results 'results/${{ matrix.run_id }}'
- uses: actions/upload-artifact@v4
if: always()
with:
name: odbc-results-${{ matrix.run_id }}
path: results/${{ matrix.run_id }}
if-no-files-found: warn
retention-days: 14
aggregate:
name: Aggregate ODBC reports
if: always() && needs.build.result == 'success'
needs: [build, consumers]
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
with:
ref: ${{ needs.build.outputs.target_sha }}
- run: python3 -m pip install --user --break-system-packages 'PyYAML==6.0.2'
- uses: actions/download-artifact@v4
continue-on-error: true
with:
pattern: odbc-results-*
path: collected-results
- name: Aggregate and validate results
id: aggregate
continue-on-error: true
run: >-
set -o pipefail; python3 odbc/tests/frameworks/harness.py aggregate --input collected-results
--output aggregated-results | tee -a "$GITHUB_STEP_SUMMARY"
- name: Generate browser report
id: allure
if: always()
continue-on-error: true
run: npx -y allure@3.14.3 generate aggregated-results/allure-results --output aggregated-results/html
- uses: actions/upload-artifact@v4
if: always()
with:
name: odbc-integration-report
path: aggregated-results
if-no-files-found: warn
retention-days: 14
- name: Enforce integration result
if: always()
run: test '${{ steps.aggregate.outcome }}' = success && test '${{ steps.allure.outcome }}' = success
publish:
name: Publish ODBC HTML report
if: always() && needs.build.result == 'success' && needs.aggregate.result != 'cancelled' && github.event.pull_request.head.repo.full_name == github.repository
needs: [build, aggregate]
runs-on: ubuntu-24.04
concurrency: {group: odbc-pages, cancel-in-progress: false}
permissions: {contents: write, pull-requests: write}
steps:
- uses: actions/checkout@v4
with: {ref: gh-pages, path: pages}
- uses: actions/download-artifact@v4
with: {name: odbc-integration-report, path: report}
- name: Publish report to GitHub Pages
id: pages
working-directory: pages
env: {DESTINATION: 'reports/odbc/pr-${{ github.event.pull_request.number }}'}
run: |
if test -d "$GITHUB_WORKSPACE/report/html"; then
rm -rf "$DESTINATION" && mkdir -p "$DESTINATION"
cp -a "$GITHUB_WORKSPACE/report/html/." "$DESTINATION/"
git add "$DESTINATION"
if ! git diff --cached --quiet; then
git -c user.name=github-actions[bot] -c user.email=41898282+github-actions[bot]@users.noreply.github.com commit -m "Publish ODBC report for PR #${{ github.event.pull_request.number }}"
git push
fi
echo available=true >> "$GITHUB_OUTPUT"
fi
- name: Add report link to pull request
continue-on-error: true
uses: actions/github-script@v7
env:
REPORT_URL: https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}/reports/odbc/pr-${{ github.event.pull_request.number }}/index.html
REPORT_RESULT: ${{ needs.aggregate.result }}
REPORT_SHA: ${{ needs.build.outputs.target_sha }}
REPORT_AVAILABLE: ${{ steps.pages.outputs.available }}
with:
script: |
const marker = '<!-- ydb-odbc-integration-report -->'
const artifacts = await github.paginate(github.rest.actions.listWorkflowRunArtifacts, {...context.repo, run_id: context.runId, per_page: 100})
const artifact = artifacts.find(item => item.name === 'odbc-integration-report')
const download = artifact ? `https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}/artifacts/${artifact.id}` : `https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`
const browser = process.env.REPORT_AVAILABLE === 'true' ? `✨ [Open the interactive Allure report](${process.env.REPORT_URL})` : '⚠️ The browser report could not be generated.'
const body = `${marker}\n### ODBC integration report\n${browser} · 📦 [Download the report bundle](${download})\n\nCommit: \`${process.env.REPORT_SHA}\`; result: **${process.env.REPORT_RESULT}**; updated by each run.`
const request = {...context.repo, issue_number: context.issue.number, per_page: 100}
const comments = await github.paginate(github.rest.issues.listComments, request)
const previous = comments.find(comment => comment.body?.includes(marker))
if (previous) await github.rest.issues.updateComment({...context.repo, comment_id: previous.id, body})
else await github.rest.issues.createComment({...context.repo, issue_number: context.issue.number, body})
24 changes: 23 additions & 1 deletion .github/workflows/tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ on:
types: [opened, synchronize, reopened, ready_for_review]
branches:
- main
- odbc-driver-feature
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
cancel-in-progress: true
Expand Down Expand Up @@ -56,9 +57,15 @@ jobs:
with:
compiler: ${{ matrix.compiler }}
- name: Test
if: github.event_name != 'pull_request' || github.base_ref == 'main'
shell: bash
run: |
ctest -j$(nproc) --preset unit
- name: Test ODBC
if: github.event_name == 'pull_request' && github.base_ref == 'odbc-driver-feature'
shell: bash
run: |
ctest --test-dir build/odbc/tests/unit -j$(nproc) --output-on-failure
- name: Package integration build
shell: bash
run: |
Expand Down Expand Up @@ -128,9 +135,10 @@ jobs:
mkdir -p build
tar -C build -xzf "integration-build-${{ matrix.compiler }}.tar.gz"
- name: Test
if: github.event_name != 'pull_request' || github.base_ref == 'main'
shell: bash
run: |
IAM_REGEX='^(DriverAuth|TMetadataFixture|TJwtIamFixture|TOAuthIamFixture|OAuth_WithFacility)\.'
IAM_REGEX='^(DriverAuth|TMetadataFixture|TJwtIamFixture|TOAuthIamFixture|OAuth_WithFacility|OdbcAuthentication)\.'

YDB_VERSION=${{ matrix.ydb-version }} ctest -j2 --preset integration \
-E "${IAM_REGEX}" --output-on-failure
Expand All @@ -140,8 +148,22 @@ jobs:
./.github/scripts/run_iam_integration_tests.sh
;;
esac
- name: Test ODBC
if: github.event_name == 'pull_request' && github.base_ref == 'odbc-driver-feature'
shell: bash
run: |
YDB_VERSION=${{ matrix.ydb-version }} \
ctest --test-dir build/odbc/tests/integration -j2 \
-E '^OdbcAuthentication\.' --output-on-failure

case '${{ matrix.ydb-version }}' in
25.1|trunk)
./.github/scripts/run_iam_integration_tests.sh
;;
esac

test-install:
if: github.event_name != 'pull_request' || github.base_ref == 'main'
name: "Test CMake Install"
concurrency:
group: test-install-${{ github.ref }}-${{ matrix.compiler }}
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ _deps
!*/canondata/*
# Unignore all files inside .github dir
!*/.github/*
# Integration adapter entrypoints
!odbc/tests/frameworks/*/run-tests
# C libraries
*.so
*.a
Expand Down
9 changes: 9 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ option(YDB_SDK_EXAMPLES "Build YDB C++ SDK examples" On)
option(YDB_SDK_ENABLE_OTEL_METRICS "Build the OpenTelemetry metrics plugin" Off)
option(YDB_SDK_ENABLE_OTEL_TRACE "Build the OpenTelemetry tracing plugin" Off)
option(YDB_CPP_SDK_SLO_USE_INSTALLED_SDK "Build only SLO workloads against one installed SDK prefix" Off)
option(YDB_SDK_ODBC "Build YDB ODBC driver" Off)
if(YDB_SDK_ODBC)
# ODBC is a shared library; static archives linked into it must be PIC.
set(CMAKE_POSITION_INDEPENDENT_CODE ON CACHE BOOL "" FORCE)
endif()
set(YDB_SDK_DEPENDENCY_MODE "CPM" CACHE STRING
"Dependency provider: CPM (default, pinned sources) or SYSTEM (Ubuntu DEB builds)")
set_property(CACHE YDB_SDK_DEPENDENCY_MODE PROPERTY STRINGS CPM SYSTEM)
Expand Down Expand Up @@ -118,6 +123,10 @@ unset(_ydb_sdk_tests)

#_ydb_sdk_validate_public_headers()

if (YDB_SDK_ODBC)
add_subdirectory(odbc)
endif()

if (YDB_SDK_EXAMPLES)
add_subdirectory(examples)
endif()
Expand Down
1 change: 1 addition & 0 deletions CMakePresets.json
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
"cacheVariables": {
"YDB_SDK_TESTS": "TRUE",
"YDB_SDK_EXAMPLES": "TRUE",
"YDB_SDK_ODBC": "TRUE",
"ARCADIA_ROOT": "..",
"ARCADIA_BUILD_ROOT": "."
}
Expand Down
Loading
Loading