[CP] [CP] [to #53119817] fix a .net driver compatibility issue

This commit is contained in:
0xacc
2024-02-07 20:04:16 +00:00
committed by ob-robot
parent adf33e4168
commit b4e4b0407d
6 changed files with 89 additions and 32 deletions

View File

@ -137,6 +137,21 @@ int ObMySQLProcTable::inner_get_next_row(common::ObNewRow *&row)
break; break;
} }
case (PARAM_LIST): { case (PARAM_LIST): {
const ObColumnSchemaV2 *tmp_column_schema = NULL;
bool type_is_lob = true;
if (OB_ISNULL(table_schema_) ||
OB_ISNULL(
tmp_column_schema =
table_schema_->get_column_schema(col_id))) {
ret = OB_ERR_UNEXPECTED;
SERVER_LOG(WARN, "table or column schema is null",
KR(ret),
KP(table_schema_),
KP(tmp_column_schema));
} else {
type_is_lob = tmp_column_schema->get_meta_type().is_lob();
}
if (nullptr != create_node) { if (nullptr != create_node) {
if (T_SP_CREATE != create_node->type_ && T_SF_CREATE != create_node->type_ && OB_ISNULL(create_node->children_[2])) { if (T_SP_CREATE != create_node->type_ && T_SF_CREATE != create_node->type_ && OB_ISNULL(create_node->children_[2])) {
ret = OB_ERR_UNEXPECTED; ret = OB_ERR_UNEXPECTED;
@ -157,8 +172,20 @@ int ObMySQLProcTable::inner_get_next_row(common::ObNewRow *&row)
K(value_str)); K(value_str));
} }
} }
OX (cells[col_idx].set_varchar(value_str)); if (OB_FAIL(ret)) {
OX (cells[col_idx].set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset()))); // do nothing
} else if (type_is_lob) {
cells[col_idx].set_lob_value(ObLongTextType,
value_str.ptr(),
value_str.length());
ObCollationType cs_type = tmp_column_schema->get_collation_type() == CS_TYPE_BINARY
? CS_TYPE_BINARY // when this column is longblob
: ObCharset::get_default_collation(ObCharset::get_default_charset()); // when this column is longtext
cells[col_idx].set_collation_type(cs_type);
} else {
cells[col_idx].set_varchar(value_str);
cells[col_idx].set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset()));
}
} }
} else { } else {
char *param_list_buf = NULL; char *param_list_buf = NULL;
@ -179,17 +206,43 @@ int ObMySQLProcTable::inner_get_next_row(common::ObNewRow *&row)
SERVER_LOG(WARN, "Generate table definition failed"); SERVER_LOG(WARN, "Generate table definition failed");
} else { } else {
ObString value_str(static_cast<int32_t>(pos), static_cast<int32_t>(pos), param_list_buf); ObString value_str(static_cast<int32_t>(pos), static_cast<int32_t>(pos), param_list_buf);
if (type_is_lob) {
cells[col_idx].set_lob_value(ObLongTextType,
value_str.ptr(),
value_str.length());
ObCollationType cs_type = tmp_column_schema->get_collation_type() == CS_TYPE_BINARY
? CS_TYPE_BINARY // when this column is longblob
: ObCharset::get_default_collation(ObCharset::get_default_charset()); // when this column is longtext
cells[col_idx].set_collation_type(cs_type);
} else {
cells[col_idx].set_varchar(value_str); cells[col_idx].set_varchar(value_str);
cells[col_idx].set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); cells[col_idx].set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset()));
} }
} }
} }
}
break; break;
} }
case (RETURNS): { case (RETURNS): {
char *returns_buf = NULL; char *returns_buf = NULL;
int64_t returns_buf_size = OB_MAX_VARCHAR_LENGTH; int64_t returns_buf_size = OB_MAX_VARCHAR_LENGTH;
int64_t pos = 0; int64_t pos = 0;
const ObColumnSchemaV2 *tmp_column_schema = NULL;
bool type_is_lob = true;
if (OB_ISNULL(table_schema_) ||
OB_ISNULL(
tmp_column_schema =
table_schema_->get_column_schema(col_id))) {
ret = OB_ERR_UNEXPECTED;
SERVER_LOG(WARN, "table or column schema is null",
KR(ret),
KP(table_schema_),
KP(tmp_column_schema));
} else {
type_is_lob = tmp_column_schema->get_meta_type().is_lob();
}
if (OB_UNLIKELY(NULL == (returns_buf = static_cast<char *>(allocator_->alloc(returns_buf_size))))) { if (OB_UNLIKELY(NULL == (returns_buf = static_cast<char *>(allocator_->alloc(returns_buf_size))))) {
ret = OB_ALLOCATE_MEMORY_FAILED; ret = OB_ALLOCATE_MEMORY_FAILED;
SERVER_LOG(WARN, "fail to alloc returns_buf", K(ret)); SERVER_LOG(WARN, "fail to alloc returns_buf", K(ret));
@ -210,10 +263,21 @@ int ObMySQLProcTable::inner_get_next_row(common::ObNewRow *&row)
} }
if (OB_SUCC(ret)) { if (OB_SUCC(ret)) {
ObString value_str(static_cast<int32_t>(pos), static_cast<int32_t>(pos), returns_buf); ObString value_str(static_cast<int32_t>(pos), static_cast<int32_t>(pos), returns_buf);
if (type_is_lob) {
cells[col_idx].set_lob_value(ObLongTextType,
value_str.ptr(),
value_str.length());
ObCollationType cs_type = tmp_column_schema->get_collation_type() == CS_TYPE_BINARY
? CS_TYPE_BINARY // when this column is longblob
: ObCharset::get_default_collation(ObCharset::get_default_charset()); // when this column is longtext
cells[col_idx].set_collation_type(cs_type);
} else {
cells[col_idx].set_varchar(value_str); cells[col_idx].set_varchar(value_str);
cells[col_idx].set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); cells[col_idx].set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset()));
} }
} }
}
break; break;
} }
case (SQL_MODE): { case (SQL_MODE): {

View File

@ -21,6 +21,7 @@ namespace oceanbase
namespace sql namespace sql
{ {
class ObSQLSessionInfo; class ObSQLSessionInfo;
class ObExecEnv;
} }
namespace observer namespace observer
{ {

View File

@ -1936,41 +1936,33 @@ int ObInnerTableSchema::proc_schema(ObTableSchema &table_schema)
} }
if (OB_SUCC(ret)) { if (OB_SUCC(ret)) {
ObObj param_list_default; ADD_COLUMN_SCHEMA("param_list", //column_name
param_list_default.set_varchar(ObString::make_string(""));
ADD_COLUMN_SCHEMA_T("param_list", //column_name
++column_id, //column_id ++column_id, //column_id
0, //rowkey_id 0, //rowkey_id
0, //index_id 0, //index_id
0, //part_key_pos 0, //part_key_pos
ObVarcharType, //column_type ObLongTextType, //column_type
CS_TYPE_INVALID, //column_collation_type CS_TYPE_BINARY, //column_collation_type
OB_MAX_VARCHAR_LENGTH, //column_length 0, //column_length
-1, //column_precision -1, //column_precision
-1, //column_scale -1, //column_scale
false, //is_nullable true, //is_nullable
false, //is_autoincrement false); //is_autoincrement
param_list_default,
param_list_default); //default_value
} }
if (OB_SUCC(ret)) { if (OB_SUCC(ret)) {
ObObj returns_default; ADD_COLUMN_SCHEMA("returns", //column_name
returns_default.set_varchar(ObString::make_string(""));
ADD_COLUMN_SCHEMA_T("returns", //column_name
++column_id, //column_id ++column_id, //column_id
0, //rowkey_id 0, //rowkey_id
0, //index_id 0, //index_id
0, //part_key_pos 0, //part_key_pos
ObVarcharType, //column_type ObLongTextType, //column_type
CS_TYPE_INVALID, //column_collation_type CS_TYPE_BINARY, //column_collation_type
OB_MAX_VARCHAR_LENGTH, //column_length 0, //column_length
-1, //column_precision -1, //column_precision
-1, //column_scale -1, //column_scale
false, //is_nullable true, //is_nullable
false, //is_autoincrement false); //is_autoincrement
returns_default,
returns_default); //default_value
} }
if (OB_SUCC(ret)) { if (OB_SUCC(ret)) {

View File

@ -9459,8 +9459,8 @@ def_table_schema(
('sql_data_access', 'varchar:32', 'false', 'CONTAINS_SQL'), ('sql_data_access', 'varchar:32', 'false', 'CONTAINS_SQL'),
('is_deterministic', 'varchar:4', 'false', 'NO'), ('is_deterministic', 'varchar:4', 'false', 'NO'),
('security_type', 'varchar:10', 'false', 'DEFINER'), ('security_type', 'varchar:10', 'false', 'DEFINER'),
('param_list', 'varchar:OB_MAX_VARCHAR_LENGTH', 'false', ''), ('param_list', 'longblob', 'true'),
('returns', 'varchar:OB_MAX_VARCHAR_LENGTH', 'false', ''), ('returns', 'longblob', 'true'),
('body', 'varchar:OB_MAX_VARCHAR_LENGTH', 'false', ''), ('body', 'varchar:OB_MAX_VARCHAR_LENGTH', 'false', ''),
('definer', 'varchar:77', 'false', ''), ('definer', 'varchar:77', 'false', ''),
('created', 'timestamp'), ('created', 'timestamp'),

View File

@ -1563,8 +1563,8 @@ language varchar(4) NO SQL
sql_data_access varchar(32) NO CONTAINS_SQL sql_data_access varchar(32) NO CONTAINS_SQL
is_deterministic varchar(4) NO NO is_deterministic varchar(4) NO NO
security_type varchar(10) NO DEFINER security_type varchar(10) NO DEFINER
param_list varchar(1048576) NO param_list longblob YES NULL
returns varchar(1048576) NO returns longblob YES NULL
body varchar(1048576) NO body varchar(1048576) NO
definer varchar(77) NO definer varchar(77) NO
created timestamp(6) NO NULL created timestamp(6) NO NULL

View File

@ -2093,8 +2093,8 @@ language varchar(4) NO SQL
sql_data_access varchar(32) NO CONTAINS_SQL sql_data_access varchar(32) NO CONTAINS_SQL
is_deterministic varchar(4) NO NO is_deterministic varchar(4) NO NO
security_type varchar(10) NO DEFINER security_type varchar(10) NO DEFINER
param_list varchar(1048576) NO param_list longblob YES NULL
returns varchar(1048576) NO returns longblob YES NULL
body varchar(1048576) NO body varchar(1048576) NO
definer varchar(77) NO definer varchar(77) NO
created timestamp(6) NO NULL created timestamp(6) NO NULL