diff --git a/src/common/backend/utils/adt/name.cpp b/src/common/backend/utils/adt/name.cpp index fc5a00e7e5c3d741e935bdbe0ea1d34b5a45d1f7..7808e45e831b9081b495cac053bb3d240674f035 100644 --- a/src/common/backend/utils/adt/name.cpp +++ b/src/common/backend/utils/adt/name.cpp @@ -211,6 +211,17 @@ int namestrcmp(Name name, const char* str) return strncmp(NameStr(*name), str, NAMEDATALEN); } +int namestrcasecmp(Name name, const char* str) +{ + if (name == NULL && str == NULL) + return 0; + if (name == NULL) + return -1; /* NULL < anything */ + if (str == NULL) + return 1; /* NULL < anything */ + return strncasecmp(NameStr(*name), str, NAMEDATALEN); +} + /* * SQL-functions CURRENT_USER, SESSION_USER */ diff --git a/src/gausskernel/runtime/executor/spi.cpp b/src/gausskernel/runtime/executor/spi.cpp index 7bcf89fa7d2c69b5f39e3f70d10786934d0e1e31..52c09e58b62e951fc5fd3475f613b9a32fe823c7 100644 --- a/src/gausskernel/runtime/executor/spi.cpp +++ b/src/gausskernel/runtime/executor/spi.cpp @@ -1289,7 +1289,11 @@ int SPI_fnumber(TupleDesc tupdesc, const char *fname) Form_pg_attribute sys_att; for (res = 0; res < tupdesc->natts; res++) { - if (namestrcmp(&tupdesc->attrs[res].attname, fname) == 0) { + if (u_sess->attr.attr_sql.dolphin) { + if (namestrcasecmp(&tupdesc->attrs[res].attname, fname) == 0) { + return res + 1; + } + } else if (namestrcmp(&tupdesc->attrs[res].attname, fname) == 0) { return res + 1; } } diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h index 5f6d9ff1bbcc653f0f48366350eedc1667c9e350..b84ac06c4f9d5f23de33aae441c1a9d2851965d5 100644 --- a/src/include/utils/builtins.h +++ b/src/include/utils/builtins.h @@ -447,6 +447,7 @@ extern Datum namegt(PG_FUNCTION_ARGS); extern Datum namege(PG_FUNCTION_ARGS); extern int namestrcpy(Name name, const char* str); extern int namestrcmp(Name name, const char* str); +extern int namestrcasecmp(Name name, const char* str); extern Datum current_user(PG_FUNCTION_ARGS); extern Datum session_user(PG_FUNCTION_ARGS); extern Datum current_schema(PG_FUNCTION_ARGS);