Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
49f10ddb
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
49f10ddb
编写于
5月 11, 2022
作者:
F
freemine
提交者:
GitHub
5月 11, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
odbc: support DRIVER parameter for odbc connection string (#12351)
上级
6e3b25d2
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
22 addition
and
7 deletion
+22
-7
src/connector/odbc/examples/c/main.c
src/connector/odbc/examples/c/main.c
+3
-0
src/connector/odbc/src/base/tsdb_impl.c
src/connector/odbc/src/base/tsdb_impl.c
+5
-2
src/connector/odbc/src/todbc_flex.h
src/connector/odbc/src/todbc_flex.h
+1
-0
src/connector/odbc/src/todbc_scanner.l
src/connector/odbc/src/todbc_scanner.l
+13
-5
未找到文件。
src/connector/odbc/examples/c/main.c
浏览文件 @
49f10ddb
...
...
@@ -203,6 +203,9 @@ static int do_statement(SQLHSTMT stmt, const char *statement) {
fprintf
(
stdout
,
"
\n
"
);
}
}
while
(
0
);
if
(
r
==
SQL_SUCCESS
||
r
==
SQL_NO_DATA
)
return
SQL_SUCCESS
;
return
r
;
}
...
...
src/connector/odbc/src/base/tsdb_impl.c
浏览文件 @
49f10ddb
...
...
@@ -190,17 +190,20 @@ static SQLRETURN tsdb_conn_connect(conn_t *conn) {
conn_val_t
*
val
=
&
conn
->
val
;
const
char
*
dsn
=
val
->
dsn
;
const
char
*
driver
=
val
->
driver
;
const
char
*
uid
=
val
->
uid
;
const
char
*
pwd
=
val
->
pwd
;
const
char
*
db
=
val
->
db
;
const
char
*
svr
=
val
->
server
;
OILE
(
dsn
,
""
);
OILE
(
dsn
||
driver
,
""
);
int
use_default
=
0
;
char
server
[
4096
];
server
[
0
]
=
'\0'
;
if
(
!
svr
||
!
svr
[
0
])
{
int
n
=
SQLGetPrivateProfileString
(
dsn
,
"Server"
,
""
,
server
,
sizeof
(
server
)
-
1
,
"Odbc.ini"
);
const
char
*
filename
=
dsn
?
"Odbc.ini"
:
"odbcinst.ini"
;
int
n
;
n
=
SQLGetPrivateProfileString
(
dsn
,
"Server"
,
""
,
server
,
sizeof
(
server
)
-
1
,
filename
);
if
(
n
<=
0
)
{
snprintf
(
server
,
sizeof
(
server
),
DEFAULT_SERVER
);
n
=
(
int
)
strlen
(
server
);
...
...
src/connector/odbc/src/todbc_flex.h
浏览文件 @
49f10ddb
...
...
@@ -40,6 +40,7 @@ struct map_tsdb_type_s {
typedef
struct
conn_val_s
conn_val_t
;
struct
conn_val_s
{
char
*
dsn
;
char
*
driver
;
char
*
uid
;
char
*
pwd
;
char
*
db
;
...
...
src/connector/odbc/src/todbc_scanner.l
浏览文件 @
49f10ddb
...
...
@@ -46,6 +46,10 @@ do { \
free(yyextra->dsn); \
yyextra->dsn = strdup(yytext); \
} break; \
case DRIVER: { \
free(yyextra->driver); \
yyextra->driver = strdup(yytext); \
} break; \
case UID: { \
free(yyextra->uid); \
yyextra->uid = strdup(yytext); \
...
...
@@ -121,7 +125,7 @@ do {
%option 8bit
%option case-insensitive
%x DSN UID PWD SERVER DB
%x DSN
DRIVER
UID PWD SERVER DB
%x ENC_CHAR ENC_WCHAR ENC_DB ENC_LOCAL
%x TSDB_FLOAT TSDB_BIGINT
%x KEY EQ BRACE1 BRACE2 VAL
...
...
@@ -132,6 +136,7 @@ do {
if (state == VAL) yyterminate();
FAIL(); }
[[:space:]]+ { }
"DRIVER" { PUSH_STATE(DRIVER); }
"DSN" { PUSH_STATE(DSN); }
"UID" { PUSH_STATE(UID); }
"PWD" { PUSH_STATE(PWD); }
...
...
@@ -146,9 +151,9 @@ do {
[[:alnum:]_]+ { PUSH_STATE(KEY); }
.|\n { FAIL(); }
<DSN,UID,PWD,SERVER,DB,ENC_CHAR,ENC_WCHAR,ENC_DB,ENC_LOCAL,TSDB_FLOAT,TSDB_BIGINT,KEY>[[:space:]]+ { }
<DSN,UID,PWD,SERVER,DB,ENC_CHAR,ENC_WCHAR,ENC_DB,ENC_LOCAL,TSDB_FLOAT,TSDB_BIGINT,KEY>[=] { PUSH_STATE(EQ); }
<DSN,UID,PWD,SERVER,DB,ENC_CHAR,ENC_WCHAR,ENC_DB,ENC_LOCAL,TSDB_FLOAT,TSDB_BIGINT,KEY>.|\n { FAIL(); }
<DSN,
DRIVER,
UID,PWD,SERVER,DB,ENC_CHAR,ENC_WCHAR,ENC_DB,ENC_LOCAL,TSDB_FLOAT,TSDB_BIGINT,KEY>[[:space:]]+ { }
<DSN,
DRIVER,
UID,PWD,SERVER,DB,ENC_CHAR,ENC_WCHAR,ENC_DB,ENC_LOCAL,TSDB_FLOAT,TSDB_BIGINT,KEY>[=] { PUSH_STATE(EQ); }
<DSN,
DRIVER,
UID,PWD,SERVER,DB,ENC_CHAR,ENC_WCHAR,ENC_DB,ENC_LOCAL,TSDB_FLOAT,TSDB_BIGINT,KEY>.|\n { FAIL(); }
<EQ>[[:space:]]+ { }
<EQ>[{] { CHG_STATE(BRACE1); }
...
...
@@ -181,7 +186,7 @@ int todbc_parse_conn_string(const char *conn, conn_val_t *val) {
yy_scan_string(conn, arg);
int ret =yylex(arg);
yylex_destroy(arg);
if (ret ||
!val->dsn
) {
if (ret ||
(!val->dsn && !val->driver)
) {
conn_val_reset(val);
} else {
if (!val->uid) {
...
...
@@ -201,6 +206,9 @@ void conn_val_reset(conn_val_t *val) {
if (val->dsn) {
free(val->dsn); val->dsn = NULL;
}
if (val->driver) {
free(val->driver); val->driver = NULL;
}
if (val->uid) {
free(val->uid); val->uid = NULL;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录