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

This commit is contained in:
0xacc
2023-12-13 18:42:40 +00:00
committed by ob-robot
parent 4ce1335e3c
commit 95faa342c7
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;
}
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 (T_SP_CREATE != create_node->type_ && T_SF_CREATE != create_node->type_ && OB_ISNULL(create_node->children_[2])) {
ret = OB_ERR_UNEXPECTED;
@ -157,8 +172,20 @@ int ObMySQLProcTable::inner_get_next_row(common::ObNewRow *&row)
K(value_str));
}
}
OX (cells[col_idx].set_varchar(value_str));
OX (cells[col_idx].set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())));
if (OB_FAIL(ret)) {
// 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 {
char *param_list_buf = NULL;
@ -179,8 +206,19 @@ int ObMySQLProcTable::inner_get_next_row(common::ObNewRow *&row)
SERVER_LOG(WARN, "Generate table definition failed");
} else {
ObString value_str(static_cast<int32_t>(pos), static_cast<int32_t>(pos), param_list_buf);
cells[col_idx].set_varchar(value_str);
cells[col_idx].set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset()));
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()));
}
}
}
}
@ -190,6 +228,21 @@ int ObMySQLProcTable::inner_get_next_row(common::ObNewRow *&row)
char *returns_buf = NULL;
int64_t returns_buf_size = OB_MAX_VARCHAR_LENGTH;
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))))) {
ret = OB_ALLOCATE_MEMORY_FAILED;
SERVER_LOG(WARN, "fail to alloc returns_buf", K(ret));
@ -210,8 +263,19 @@ int ObMySQLProcTable::inner_get_next_row(common::ObNewRow *&row)
}
if (OB_SUCC(ret)) {
ObString value_str(static_cast<int32_t>(pos), static_cast<int32_t>(pos), returns_buf);
cells[col_idx].set_varchar(value_str);
cells[col_idx].set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset()));
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()));
}
}
}
break;

View File

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

View File

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

View File

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

View File

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

View File

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