[CP] [CP] [to #53119817] fix a .net driver compatibility issue
This commit is contained in:
@ -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;
|
||||
|
@ -21,6 +21,7 @@ namespace oceanbase
|
||||
namespace sql
|
||||
{
|
||||
class ObSQLSessionInfo;
|
||||
class ObExecEnv;
|
||||
}
|
||||
namespace observer
|
||||
{
|
||||
|
@ -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)) {
|
||||
|
@ -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'),
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user