Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
36e5dac0
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
36e5dac0
编写于
10月 07, 2020
作者:
F
freemine
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add refcount
上级
ec04ef7b
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
50 addition
and
7 deletion
+50
-7
src/connector/odbc/src/todbc.c
src/connector/odbc/src/todbc.c
+50
-7
未找到文件。
src/connector/odbc/src/todbc.c
浏览文件 @
36e5dac0
...
...
@@ -53,16 +53,19 @@ typedef struct sql_s sql_t;
struct
env_s
{
uint64_t
refcount
;
unsigned
int
destroying
:
1
;
};
struct
conn_s
{
uint64_t
refcount
;
env_t
*
env
;
TAOS
*
taos
;
};
struct
sql_s
{
uint64_t
refcount
;
conn_t
*
conn
;
TAOS_RES
*
rs
;
...
...
@@ -81,6 +84,8 @@ SQLRETURN SQL_API SQLAllocEnv(SQLHENV *EnvironmentHandle) {
env_t
*
env
=
(
env_t
*
)
calloc
(
1
,
sizeof
(
*
env
));
if
(
!
env
)
return
SQL_ERROR
;
DASSERT
(
INC_REF
(
env
)
>
0
);
*
EnvironmentHandle
=
env
;
return
SQL_SUCCESS
;
...
...
@@ -90,11 +95,15 @@ SQLRETURN SQL_API SQLFreeEnv(SQLHENV EnvironmentHandle) {
env_t
*
env
=
(
env_t
*
)
EnvironmentHandle
;
if
(
!
env
)
return
SQL_ERROR
;
DASSERT
(
GET_REF
(
env
)
==
1
);
DASSERT
(
!
env
->
destroying
);
env
->
destroying
=
1
;
DASSERT
(
env
->
destroying
==
1
);
DASSERT
(
DEC_REF
(
env
)
==
0
);
free
(
env
);
return
SQL_SUCCESS
;
...
...
@@ -105,6 +114,8 @@ SQLRETURN SQL_API SQLAllocConnect(SQLHENV EnvironmentHandle,
env_t
*
env
=
(
env_t
*
)
EnvironmentHandle
;
if
(
!
env
)
return
SQL_ERROR
;
DASSERT
(
INC_REF
(
env
)
>
1
);
conn_t
*
conn
=
NULL
;
do
{
conn
=
(
conn_t
*
)
calloc
(
1
,
sizeof
(
*
conn
));
...
...
@@ -112,20 +123,34 @@ SQLRETURN SQL_API SQLAllocConnect(SQLHENV EnvironmentHandle,
conn
->
env
=
env
;
*
ConnectionHandle
=
conn
;
DASSERT
(
INC_REF
(
conn
)
>
0
);
return
SQL_SUCCESS
;
}
while
(
0
);
return
conn
?
SQL_SUCCESS
:
SQL_ERROR
;
DASSERT
(
DEC_REF
(
env
)
>
0
);
return
SQL_ERROR
;
}
SQLRETURN
SQL_API
SQLFreeConnect
(
SQLHDBC
ConnectionHandle
)
{
conn_t
*
conn
=
(
conn_t
*
)
ConnectionHandle
;
if
(
!
conn
)
return
SQL_ERROR
;
DASSERT
(
GET_REF
(
conn
)
==
1
);
DASSERT
(
conn
->
env
);
do
{
if
(
conn
->
taos
)
{
taos_close
(
conn
->
taos
);
conn
->
taos
=
NULL
;
}
DASSERT
(
DEC_REF
(
conn
->
env
)
>
0
);
DASSERT
(
DEC_REF
(
conn
)
==
0
);
conn
->
env
=
NULL
;
free
(
conn
);
}
while
(
0
);
...
...
@@ -142,8 +167,9 @@ SQLRETURN SQL_API SQLConnect(SQLHDBC ConnectionHandle,
if
(
conn
->
taos
)
return
SQL_ERROR
;
// TODO: data-race
conn
->
taos
=
taos_connect
(
"localhost"
,
(
const
char
*
)
UserName
,
(
const
char
*
)
Authentication
,
NULL
,
0
);
return
conn
->
taos
?
SQL_SUCCESS
:
SQL_ERROR
;
}
...
...
@@ -164,13 +190,23 @@ SQLRETURN SQL_API SQLAllocStmt(SQLHDBC ConnectionHandle,
conn_t
*
conn
=
(
conn_t
*
)
ConnectionHandle
;
if
(
!
conn
)
return
SQL_ERROR
;
sql_t
*
sql
=
(
sql_t
*
)
calloc
(
1
,
sizeof
(
*
sql
));
if
(
!
sql
)
return
SQL_ERROR
;
DASSERT
(
INC_REF
(
conn
)
>
1
);
do
{
sql_t
*
sql
=
(
sql_t
*
)
calloc
(
1
,
sizeof
(
*
sql
));
if
(
!
sql
)
break
;
sql
->
conn
=
conn
;
*
StatementHandle
=
sql
;
sql
->
conn
=
conn
;
DASSERT
(
INC_REF
(
sql
)
>
0
)
;
return
SQL_SUCCESS
;
*
StatementHandle
=
sql
;
return
SQL_SUCCESS
;
}
while
(
0
);
DASSERT
(
DEC_REF
(
conn
)
>
0
);
return
SQL_ERROR
;
}
SQLRETURN
SQL_API
SQLFreeStmt
(
SQLHSTMT
StatementHandle
,
...
...
@@ -178,11 +214,18 @@ SQLRETURN SQL_API SQLFreeStmt(SQLHSTMT StatementHandle,
sql_t
*
sql
=
(
sql_t
*
)
StatementHandle
;
if
(
!
sql
)
return
SQL_ERROR
;
DASSERT
(
GET_REF
(
sql
)
==
1
);
if
(
sql
->
rs
)
{
taos_free_result
(
sql
->
rs
);
sql
->
rs
=
NULL
;
}
DASSERT
(
DEC_REF
(
sql
->
conn
)
>
0
);
DASSERT
(
DEC_REF
(
sql
)
==
0
);
sql
->
conn
=
NULL
;
free
(
sql
);
return
SQL_SUCCESS
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录