English | 简体中文
- Linux
- macOS
注意: 自TDengine 3.1.x.x起, TDengine OSS 的 macOS版本似乎官方并没有完整测试, 请知晓!
- Windows
注意: `taosd`, TDengine的服务端程序自TDengine 3.1.x.x版起, 已不包含在TDengine OSS的windows版的发行包中了. 测试用例中已经据此按照你在编译过程中的指定, 使用远程`taosd`.
- 开发中的TDengine 3.0 TAOS ODBC驱动
- 目前驱动中已经导出的SQLxxx函数如下:
ODBC/Setup API | linux (ubuntu 22.04) | macosx (ventura 13.2.1) | windows 11 | note |
---|---|---|---|---|
ConfigDSN | ❌ | ❌ | ✅ | |
ConfigDriver | ❌ | ❌ | ✅ | |
ConfigTranslator | ❌ | ❌ | ✅ | |
SQLAllocHandle | ✅ | ✅ | ✅ | |
SQLBindCol | ✅ | ✅ | ✅ | 只支持按列绑定模式 |
SQLBindParameter | ✅ | ✅ | ✅ | 只支持按列绑定模式 |
SQLBrowseConnect | ❌ | ❌ | ❌ | |
SQLBulkOperations | ❌ | ❌ | ❌ | TDengine没有对应实现 |
SQLCloseCursor | ✅ | ✅ | ✅ | |
SQLColAttribute | ✅ | ✅ | ✅ | |
SQLColumnPrivileges | ❌ | ❌ | ❌ | TDengine没有严格的对应实现 |
SQLColumns | ✅ | ✅ | ✅ | |
SQLCompleteAsync | ❌ | ❌ | ❌ | |
SQLConnect | ✅ | ✅ | ✅ | |
SQLCopyDesc | ❌ | ❌ | ❌ | |
SQLDescribeCol | ✅ | ✅ | ✅ | |
SQLDescribeParam | ✅ | ✅ | ✅ | 部分实现, 并持续更新中 |
SQLDisconnect | ✅ | ✅ | ✅ | |
SQLDriverConnect | ✅ | ✅ | ✅ | |
SQLEndTran | ✅ | ✅ | ✅ | TDengine不支持事务, 因此最多只是模拟 |
SQLExecDirect | ✅ | ✅ | ✅ | |
SQLExecute | ✅ | ✅ | ✅ | |
SQLExtendedFetch | ❌ | ❌ | ❌ | |
SQLFetch | ✅ | ✅ | ✅ | |
SQLFetchScroll | ✅ | ✅ | ✅ | TDengine没有对应实现, 只支持SQL_FETCH_NEXT |
SQLForeignKeys | ❌ | ❌ | ❌ | TDengine没有对应实现 |
SQLFreeHandle | ✅ | ✅ | ✅ | |
SQLFreeStmt | ✅ | ✅ | ✅ | |
SQLGetConnectAttr | ✅ | ✅ | ✅ | 部分实现, 并持续更新中 |
SQLGetCursorName | ❌ | ❌ | ❌ | TDengine没有对应实现 |
SQLGetData | ✅ | ✅ | ✅ | |
SQLGetDescField | ❌ | ❌ | ❌ | |
SQLGetDescRec | ❌ | ❌ | ❌ | |
SQLGetDiagField | ✅ | ✅ | ✅ | |
SQLGetDiagRec | ✅ | ✅ | ✅ | |
SQLGetEnvAttr | ✅ | ✅ | ✅ | 部分实现, 并持续更新中 |
SQLGetInfo | ✅ | ✅ | ✅ | 部分实现, 并持续更新中 |
SQLGetStmtAttr | ✅ | ✅ | ✅ | 部分实现, 并持续更新中 |
SQLGetTypeInfo | ✅ | ✅ | ✅ | |
SQLMoreResults | ✅ | ✅ | ✅ | |
SQLNativeSql | ❌ | ❌ | ❌ | TDengine没有对应实现 |
SQLNumParams | ✅ | ✅ | ✅ | TDengine只是部分实现, 因此某些场合下只实现了一种变通 |
SQLNumResultCols | ✅ | ✅ | ✅ | |
SQLParamData | ❌ | ❌ | ❌ | TDengine没有对应实现 |
SQLPrepare | ✅ | ✅ | ✅ | TDengine只是部分实现, 因此某些场合下只实现了一种变通 |
SQLPrimaryKeys | ✅ | ✅ | ✅ | |
SQLProcedureColumns | ❌ | ❌ | ❌ | TDengine没有对应实现 |
SQLProcedures | ❌ | ❌ | ❌ | TDengine没有对应实现 |
SQLPutData | ❌ | ❌ | ❌ | TDengine没有对应实现 |
SQLRowCount | ✅ | ✅ | ✅ | |
SQLSetConnectAttr | ✅ | ✅ | ✅ | 部分实现, 并持续更新中 |
SQLSetCursorName | ❌ | ❌ | ❌ | TDengine没有对应实现 |
SQLSetDescField | ❌ | ❌ | ❌ | |
SQLSetDescRec | ❌ | ❌ | ❌ | |
SQLSetEnvAttr | ✅ | ✅ | ✅ | 部分实现, 并持续更新中 |
SQLSetPos | ❌ | ❌ | ❌ | TDengine没有对应实现 |
SQLSetStmtAttr | ✅ | ✅ | ✅ | 部分实现, 并持续更新中 |
SQLSpecialColumns | ❌ | ❌ | ❌ | TDengine没有对应实现 |
SQLStatistics | ❌ | ❌ | ❌ | TDengine没有对应实现 |
SQLTablePrivileges | ❌ | ❌ | ❌ | TDengine没有严格的对应实现 |
SQLTables | ✅ | ✅ | ✅ |
- 暂未支持的statement属性 (SQLSetStmtAttr)
属性 | 备注 |
---|---|
SQL_ATTR_CONCURRENCY | TDengine没有updatable-CURSOR机制 |
SQL_ATTR_FETCH_BOOKMARK_PTR | TDengine没有BOOKMARK机制 |
SQL_ATTR_IMP_PARAM_DESC | |
SQL_ATTR_IMP_ROW_DESC | |
SQL_ATTR_KEYSET_SIZE | |
SQL_ATTR_PARAM_BIND_OFFSET_PTR | |
SQL_ATTR_PARAM_OPERATION_PTR | |
SQL_ATTR_ROW_NUMBER | 只读属性 |
SQL_ATTR_ROW_OPERATION_PTR | |
SQL_ATTR_SIMULATE_CURSOR |
- 暂未支持的connection属性 (SQLSetConnectAttr)
属性 | 备注 |
---|---|
SQL_ATTR_AUTO_IPD | 只读属性 |
SQL_ATTR_CONNECTION_DEAD | 只读属性 |
SQL_ATTR_ENLIST_IN_DTC | |
SQL_ATTR_PACKET_SIZE | |
SQL_ATTR_TRACE | |
SQL_ATTR_TRACEFILE | |
SQL_ATTR_TRANSLATE_LIB | |
SQL_ATTR_TRANSLATE_OPTION |
- ODBC应用程序将可以利用该驱动实现对TDengine时序数据库的操作
- 相信,任何具有ODBC-绑定/插件的编程语言、框架,利用该驱动,也可实现对TDengine时序数据库的操作. 目前在测试用例中提供了如下程序语言及相关绑定的实现:
语言 | ODBC-API或绑定/插件 |
---|---|
C/C++ | ODBC-API |
CSharp | System.Data.Odbc |
Erlang | odbc module |
Go | github.com/alexbrainman/odbc, database/sql |
Haskell | HDBC, HDBC-odbc |
Common Lisp | plain-odbc |
Nodejs | odbc |
Python3 | pyodbc |
Rust | odbc |
- Windows平台下,可以使用Windows系统自带的"ODBC数据源管理程序(64位)"来管理DSN
- 支持TDengine主题订阅,参见samples/c/demo_topic.c
- 持续开发中...
- cmake, 3.16.3 或以上
- flex, 2.6.4 或以上. 注: windows平台上需要安装win_flex_bison, 参见后续说明.
- bison, 3.5.1 或以上. 注: windows平台上需要安装win_flex_bison, 参见后续说明.
- odbc 驱动管理器, 例如Linux平台上的unixodbc(2.3.6 或以上). 注: windows平台上odbc驱动管理器已经预装.
- iconv, 应该不需要单独安装了,基本上libc都已经内建了. 注: 在Windows平台编译的过程中, 会自动下载并编译安装win_iconv.
- valgrind, 如果您想对程序进行性能分析及内存泄漏探查的话
- node, v12.0 或以上,如果您想同时跑nodejs测试程序的话
- node odbc, 2.4.4 或以上, https://www.npmjs.com/package/odbc
- rust, v1.63 或以上,如果您想同时跑rust测试程序的话
- odbc, 0.17.0 或以上, https://docs.rs/odbc/latest/odbc/
- env_logger, 0.8.2 或以上, https://docs.rs/env_logger/latest/env_logger/
- json
- python3, v3.10 或以上,如果您想同时跑python3测试程序的话
- pyodbc, 4.0.39 或以上, https://www.python.org/
- go, v1.17 或以上,如果您想同时跑go测试程序的话
- github.com/alexbrainman/odbc, https://go.dev/
- erlang, v12.2 或以上,如果您想同时跑erlang测试程序的话
- haskell, cabal v3.6 或以上,如果您想同时跑haskell测试程序的话
- common lisp, sbcl v2.1.11 或以上,如果您想同时跑common lisp测试程序的话
- R, v4.3 或以上,如果您想同时跑R测试程序的话
- 请参考TDengine官方说明,https://tdengine.com
- 最好使用TDengine-git-commit "ea249127afb42ac3a31d8d9f63243c3d1b950b5d"或以上, 否则,在windows平台上,您可能会遇到由
taos_stmt_get_tag_fields/taos_stmt_get_col_fields
所引致的内存泄漏的问题.具体细节,您可以参见: taosdata/TDengine#18804 and taosdata/TDengine#19245
sudo apt install flex bison unixodbc unixodbc-dev && echo -=Done=-
rm -rf debug &&
cmake -B debug -DCMAKE_BUILD_TYPE=Debug &&
cmake --build debug &&
sudo cmake --install debug &&
cmake --build debug --target install_templates &&
echo -=Done=-
pushd debug >/dev/null && TAOS_TEST_CASES=$(pwd)/../tests/taos/taos_test.cases ODBC_TEST_CASES=$(pwd)/../tests/c/odbc_test.cases ctest --output-on-failure && echo -=Done=-; popd >/dev/null
- TAOS_ODBC_LOG_LEVEL: VERBOSE/DEBUG/INFO/WARN/ERROR/FATAL, 值由低到高。值越低,调试信息越多
- TAOS_ODBC_LOGGER: stderr/temp/syslog
- stderr: log to
stderr
- temp: log to
env('TEMP')/taos_odbc.log
or/tmp/taos_odbc.log
if env('TEMP') not exists - syslog: log to
syslog
- stderr: log to
当测试程序出现失败的时候,你可能期望看到更多的调试信息,那么你可以这样
pushd debug >/dev/null && TAOS_TEST_CASES=$(pwd)/../tests/taos/taos_test.cases ODBC_TEST_CASES=$(pwd)/../tests/c/odbc_test.cases TAOS_ODBC_LOG_LEVEL=ERROR TAOS_ODBC_LOGGER=stderr ctest --output-on-failure && echo -=Done=-; popd >/dev/null
export TAOS_TEST_CASES=$(pwd)/tests/taos/taos_test.cases
export ODBC_TEST_CASES=$(pwd)/tests/c/odbc_test.cases
export TAOS_ODBC_LOG_LEVEL=ERROR
export TAOS_ODBC_LOGGER=stderr
或者,你也可以这样
pushd debug >/dev/null && ctest --output-on-failure && echo -=Done=-; popd >/dev/null
brew install flex bison unixodbc && echo -=Done=-
rm -rf debug &&
cmake -B debug -DCMAKE_BUILD_TYPE=Debug &&
cmake --build debug &&
sudo cmake --install debug &&
cmake --build debug --target install_templates &&
echo -=Done=-
pushd debug >/dev/null && TAOS_TEST_CASES=$(pwd)/../tests/taos/taos_test.cases ODBC_TEST_CASES=$(pwd)/../tests/c/odbc_test.cases ctest --output-on-failure && echo -=Done=-; popd >/dev/null
- TAOS_ODBC_LOG_LEVEL: VERBOSE/DEBUG/INFO/WARN/ERROR/FATAL, 值由低到高。值越低,调试信息越多
- TAOS_ODBC_LOGGER: stderr/temp
- stderr: log to
stderr
- temp: log to
env('TEMP')/taos_odbc.log
or/tmp/taos_odbc.log
if env('TEMP') not exists
- stderr: log to
当测试程序出现失败的时候,你可能期望看到更多的调试信息,那么你可以这样
pushd debug >/dev/null && TAOS_TEST_CASES=$(pwd)/../tests/taos/taos_test.cases ODBC_TEST_CASES=$(pwd)/../tests/c/odbc_test.cases TAOS_ODBC_LOG_LEVEL=ERROR TAOS_ODBC_LOGGER=stderr ctest --output-on-failure && echo -=Done=-; popd >/dev/null
export TAOS_TEST_CASES=$(pwd)/tests/taos/taos_test.cases
export ODBC_TEST_CASES=$(pwd)/tests/c/odbc_test.cases
export TAOS_ODBC_LOG_LEVEL=ERROR
export TAOS_ODBC_LOGGER=stderr
或者,你也可以这样
pushd debug >/dev/null && ctest --output-on-failure && echo -=Done=-; popd >/dev/null
- 下载并安装win_flex_bison 2.5.25.
https://github.com/lexxmark/winflexbison/releases/download/v2.5.25/win_flex_bison-2.5.25.zip
- 检查是否成功安装
win_flex --version
- 以管理员身份运行命令提示符. https://www.makeuseof.com/windows-run-command-prompt-admin/
- cd至本工程的根目录.
- 可选, 设置编译环境, 如果你是在64位的windows 11上安装的visual studio community 2022, 那么:
"\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
- 构建Makefiles
cmake --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -B build -G "Visual Studio 17 2022" -A x64
故障处理: 如果编译的过程中, 提示错误类似<path_to_winbase.h>: warning C5105: 生成“已定义”的宏扩展具有未定义的行为, 那么请修改执行如下:
cmake --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -B build -G "Visual Studio 17 2022" -A x64 -DDISABLE_C5105:BOOL=ON
- 开始编译构建
cmake --build build --config Debug -j 4
- 安装taos_odbc, 安装好后, C:\Program Files\taos_odbc\bin\目录下会安装有taos_odbc.dll
cmake --install build --config Debug
cmake --build build --config Debug --target install_templates
- 检查windows注册表项,看下相关的TAOS_ODBC_DSN条目等是否存在
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\TDengine
HKEY_CURRENT_USER\Software\ODBC\Odbc.ini\TAOS_ODBC_DSN
- 设置相关的测试环境变量
TAOS_ODBC_LOG_LEVEL
及TAOS_ODBC_LOGGER
- TAOS_ODBC_LOG_LEVEL: VERBOSE/DEBUG/INFO/WARN/ERROR/FATAL, 值由低到高。值越低,调试信息越多
- TAOS_ODBC_LOGGER: stderr/temp
- stderr: log to
stderr
- temp: log to
env('TEMP')\taos_odbc.log
orC:\Windows\Temp\taos_odbc.log
if env('TEMP') not exists
- stderr: log to
set TAOS_TEST_CASES=%cd%\tests\taos\taos_test.cases
set ODBC_TEST_CASES=%cd%\tests\c\odbc_test.cases
set TAOS_ODBC_LOG_LEVEL=ERROR
set TAOS_ODBC_LOGGER=stderr
- 开始测试
ctest --test-dir build --output-on-failure -C Debug
cmake --help
orman cmake
ctest --help
orman ctest
valgrind --help
orman valgrind
<root>
├── benchmark
├── cmake
├── common
├── inc
├── samples
│ └── c
├── sh
├── src
│ ├── core
│ ├── inc
│ ├── os_port
│ ├── parser
│ ├── tests
│ └── utils
├── templates
├── tests
│ ├── c
│ ├── cpp
│ ├── cs
│ ├── erl
│ ├── go
│ ├── hs
│ │ └── app
│ ├── lisp
│ ├── node
│ ├── python
│ ├── R
│ ├── rust
│ │ └── main
│ │ └── src
│ ├── taos
│ └── ws
└── valgrind