dblink_write implement [FEAT MERGE]
Co-authored-by: zzg19950727 <1071026277@qq.com> Co-authored-by: xianyu-w <707512433@qq.com>
This commit is contained in:
@ -444,8 +444,12 @@ int ObDbLinkProxy::create_dblink_pool(uint64_t tenant_id, uint64_t dblink_id, Db
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObDbLinkProxy::acquire_dblink(uint64_t dblink_id, DblinkDriverProto dblink_type,
|
||||
ObISQLConnection *&dblink_conn, uint32_t sessid, int64_t timeout_sec)
|
||||
int ObDbLinkProxy::acquire_dblink(uint64_t dblink_id,
|
||||
DblinkDriverProto dblink_type,
|
||||
const dblink_param_ctx ¶m_ctx,
|
||||
ObISQLConnection *&dblink_conn,
|
||||
uint32_t sessid,
|
||||
int64_t sql_request_level)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
ObISQLConnectionPool *dblink_pool = NULL;
|
||||
@ -454,10 +458,13 @@ int ObDbLinkProxy::acquire_dblink(uint64_t dblink_id, DblinkDriverProto dblink_t
|
||||
LOG_WARN("dblink proxy not inited");
|
||||
} else if (OB_FAIL(switch_dblink_conn_pool(dblink_type, dblink_pool))) {
|
||||
LOG_WARN("failed to get dblink interface", K(ret), K(dblink_type));
|
||||
} else if (OB_FAIL(dblink_pool->acquire_dblink(dblink_id, dblink_conn, sessid, timeout_sec))) {
|
||||
} else if (OB_FAIL(dblink_pool->acquire_dblink(dblink_id, param_ctx, dblink_conn, sessid, sql_request_level))) {
|
||||
LOG_WARN("acquire dblink failed", K(ret), K(dblink_id), K(dblink_type));
|
||||
} else if (OB_FAIL(prepare_enviroment(dblink_conn, dblink_type))) {
|
||||
LOG_WARN("failed to prepare dblink env", K(ret));
|
||||
} else {
|
||||
dblink_conn->set_dblink_id(dblink_id);
|
||||
dblink_conn->set_dblink_driver_proto(static_cast<int64_t>(dblink_type));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@ -465,11 +472,11 @@ int ObDbLinkProxy::acquire_dblink(uint64_t dblink_id, DblinkDriverProto dblink_t
|
||||
int ObDbLinkProxy::prepare_enviroment(ObISQLConnection *dblink_conn, int link_type)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
if (dblink_conn->get_init_remote_env()) {
|
||||
// do nothing;
|
||||
} else if (OB_ISNULL(dblink_conn)) {
|
||||
if (OB_ISNULL(dblink_conn)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("dblink is null", K(ret));
|
||||
} else if (dblink_conn->get_init_remote_env()) {
|
||||
// do nothing;
|
||||
} else {
|
||||
if (OB_FAIL(execute_init_sql(dblink_conn, link_type))) {
|
||||
LOG_WARN("failed to execute init sql", K(ret));
|
||||
@ -483,7 +490,6 @@ int ObDbLinkProxy::prepare_enviroment(ObISQLConnection *dblink_conn, int link_ty
|
||||
|
||||
int ObDbLinkProxy::execute_init_sql(ObISQLConnection *dblink_conn, int link_type)
|
||||
{
|
||||
UNUSED(link_type);
|
||||
int ret = OB_SUCCESS;
|
||||
typedef const char * sql_ptr_type;
|
||||
if (DBLINK_DRV_OB == link_type) {
|
||||
@ -513,7 +519,6 @@ int ObDbLinkProxy::release_dblink(/*uint64_t dblink_id,*/ DblinkDriverProto dbli
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
ObISQLConnectionPool *dblink_pool = NULL;
|
||||
dblink_conn->set_init_remote_env(false);
|
||||
if (!is_inited()) {
|
||||
ret = OB_NOT_INIT;
|
||||
LOG_WARN("dblink proxy not inited");
|
||||
@ -525,47 +530,31 @@ int ObDbLinkProxy::release_dblink(/*uint64_t dblink_id,*/ DblinkDriverProto dbli
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObDbLinkProxy::dblink_read(const uint64_t dblink_id,
|
||||
DblinkDriverProto dblink_type,
|
||||
ReadResult &result,
|
||||
const char *sql,
|
||||
int &dblink_read_ret,
|
||||
const char *&dblink_read_errmsg,
|
||||
uint32_t sessid)
|
||||
int ObDbLinkProxy::dblink_read(ObISQLConnection *dblink_conn, ReadResult &result, const char *sql)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
dblink_read_ret = OB_SUCCESS;
|
||||
dblink_read_errmsg = NULL;
|
||||
ObISQLConnection *dblink_conn = NULL;
|
||||
if (OB_FAIL(acquire_dblink(dblink_id, dblink_type, dblink_conn, sessid))) {
|
||||
dblink_read_ret = ret;
|
||||
if (DblinkDriverProto::DBLINK_DRV_OB == dblink_type && NULL != dblink_conn) {
|
||||
dblink_read_errmsg = mysql_error(static_cast<common::sqlclient::ObMySQLConnection *>(dblink_conn)->get_handler());
|
||||
}
|
||||
LOG_WARN("acquire dblink failed", K(ret));
|
||||
} else if (OB_FAIL(read(dblink_conn, result, OB_INVALID_TENANT_ID, sql))) {
|
||||
dblink_read_ret = ret;
|
||||
if (DblinkDriverProto::DBLINK_DRV_OB == dblink_type && NULL != dblink_conn) {
|
||||
dblink_read_errmsg = mysql_error(static_cast<common::sqlclient::ObMySQLConnection *>(dblink_conn)->get_handler());
|
||||
}
|
||||
LOG_WARN("read from dblink failed", K(ret));
|
||||
int err = OB_SUCCESS;
|
||||
if (OB_SUCCESS != (err = release_dblink(dblink_type, dblink_conn, sessid))) {
|
||||
LOG_ERROR("release dblink failed", K(err));
|
||||
}
|
||||
} else if (OB_FAIL(release_dblink(dblink_type, dblink_conn, sessid))) {
|
||||
LOG_ERROR("release dblink failed", K(ret));
|
||||
result.reset();
|
||||
if (OB_ISNULL(dblink_conn) || OB_ISNULL(sql)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("null ptr", K(ret), KP(dblink_conn), KP(sql));
|
||||
} else if (OB_FAIL(dblink_conn->execute_read(OB_INVALID_TENANT_ID, sql, result))) {
|
||||
LOG_WARN("read from dblink failed", K(ret), K(dblink_conn), KCSTRING(sql));
|
||||
} else {
|
||||
LOG_DEBUG("succ to read from dblink", K(sql));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObDbLinkProxy::dblink_read(ObISQLConnection *dblink_conn, ReadResult &result, const char *sql)
|
||||
int ObDbLinkProxy::dblink_write(ObISQLConnection *dblink_conn, int64_t &affected_rows, const char *sql)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
if (OB_ISNULL(dblink_conn)) {
|
||||
LOG_WARN("dblink conn is NULL", K(ret));
|
||||
} else if (OB_FAIL(read(dblink_conn, result, OB_INVALID_TENANT_ID, sql))) {
|
||||
LOG_WARN("read from dblink failed", K(ret));
|
||||
if (OB_ISNULL(dblink_conn) || OB_ISNULL(sql)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("null ptr", K(ret), KP(dblink_conn), KP(sql));
|
||||
} else if (OB_FAIL(dblink_conn->execute_write(OB_INVALID_TENANT_ID, sql, affected_rows))) {
|
||||
LOG_WARN("write to dblink failed", K(ret), K(dblink_conn), K(sql));
|
||||
} else {
|
||||
LOG_DEBUG("succ to write by dblink", K(sql));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user