!5942 M兼容性 gsql 输出转义字符格式化修改

Merge pull request !5942 from zhubin79/escape
This commit is contained in:
opengauss_bot
2024-08-06 07:06:49 +00:00
committed by Gitee
9 changed files with 147 additions and 100 deletions

View File

@ -1628,6 +1628,8 @@ static bool do_connect(char* dbname, char* user, char* host, char* port)
SyncVariables();
connection_warnings(false); /* Must be after SyncVariables */
pset.dbType = GetDatabaseType();
/* Tell the user about the new connection */
if (!pset.quiet) {
if (param_is_newly_set(PQhost(o_conn), PQhost(pset.db)) ||

View File

@ -2732,4 +2732,31 @@ bool CheckSpecificExtension(PGconn *connection, char *extension)
PQclear(res);
return isHasExtension;
}
/* Get Database Type */
DBFormatType GetDatabaseType()
{
char* compatibilityStr;
/* Default set A_FORMAT */
DBFormatType dbType = A_FORMAT;
PGresult* res = PQexec(pset.db, "show sql_compatibility");
if (res != NULL && PQresultStatus(res) == PGRES_TUPLES_OK) {
compatibilityStr = PQgetvalue(res, 0, 0);
if (strcmp(compatibilityStr, "A") == 0) {
dbType = A_FORMAT;
} else if (strcmp(compatibilityStr, "B") == 0) {
dbType = B_FORMAT;
} else if (strcmp(compatibilityStr, "C") == 0) {
dbType = C_FORMAT;
} else if (strcmp(compatibilityStr, "PG") == 0) {
dbType = PG_FORMAT;
}
}
PQclear(res);
res = NULL;
return dbType;
}

View File

@ -99,6 +99,7 @@ extern void ResetQueryRetryController();
extern bool QueryRetryController(const char* query);
extern bool SendQuery(const char* query, bool is_print = true, bool print_error = true);
extern bool MakeCopyWorker(const char* query, int nclients);
extern DBFormatType GetDatabaseType();
extern bool is_superuser(void);
extern bool standard_strings(void);

View File

@ -368,13 +368,7 @@ int MainLoop(FILE* source, char* querystring)
exit(EXIT_FAILURE);
}
/* Initialize current database compatibility */
PGresult* res = PQexec(pset.db, "show sql_compatibility");
if (res != NULL && PQresultStatus(res) == PGRES_TUPLES_OK) {
is_b_format = strcmp (PQgetvalue(res, 0, 0), "B") == 0;
}
PQclear(res);
res = NULL;
is_b_format = IS_CMPT(pset.dbType, B_FORMAT);
/* main loop to get queries and execute them */
while (successResult == EXIT_SUCCESS) {

View File

@ -221,6 +221,10 @@ void pg_wcssize(
linewidth++;
format_size++;
} while (linewidth % 8 != 0);
} else if (IS_CMPT(pset.dbType, B_FORMAT) && *pwcs == '\b') { /* backspace character */
linewidth += w;
} else if (IS_CMPT(pset.dbType, B_FORMAT) && *pwcs == '\032') { /* ascii 26(control + Z)*/
/* Do nothing for this */
} else if (w < 0) { /* Other control char */
linewidth += 4;
format_size += 4;
@ -298,6 +302,11 @@ void pg_wcsformat(const unsigned char* pwcs, size_t len, int encoding, struct li
*ptr++ = ' ';
linewidth++;
} while (linewidth % 8 != 0);
} else if (IS_CMPT(pset.dbType, B_FORMAT) && *pwcs == '\b') { /* backspace character */
*(--ptr) = *pwcs;
linewidth += w;
} else if (IS_CMPT(pset.dbType, B_FORMAT) && *pwcs == '\032') { /* ascii 26(control + Z)*/
/* Do nothing for this */
} else if (w < 0) { /* Other control char */
rc = sprintf_s((char*)ptr, max_bytes - linewidth + 1, "\\x%02X", *pwcs);
securec_check_ss_c(rc, "\0", "\0");

View File

@ -12,6 +12,7 @@
#include "variables.h"
#include "print.h"
#include "postgres_fe.h"
/* Database Security: Data importing/dumping support AES128. */
#include "utils/aes.h"
@ -86,6 +87,8 @@ typedef struct _psqlSettings {
VariableSpace vars; /* "shell variable" repository */
DBFormatType dbType;
/*
* The remaining fields are set by assign hooks associated with entries in
* "vars". They should not be set directly except by those hook

View File

@ -701,6 +701,8 @@ int main(int argc, char* argv[])
SyncVariables();
pset.dbType = GetDatabaseType();
if (options.action == ACT_LIST_DB && !isparseonly) {
int success;

View File

@ -56,6 +56,15 @@ typedef enum {
TD_FORMAT,
M_FORMAT
} DatabaseType;
typedef enum {
A_FORMAT = 0x0001,
B_FORMAT = 0x0002,
C_FORMAT = 0x0004,
PG_FORMAT = 0x0008
} DBFormatType;
#define IS_CMPT(cmpt, flag) (((uint32)(cmpt) & (uint32)(flag)) != 0)
#endif // HAVE_DATABASE_TYPE
#endif /* POSTGRES_FE_H */

View File

@ -137,10 +137,10 @@ select aes_decrypt(aes_encrypt('大家好','cdjsfj3713vdVHV1', '1234567890abcdef
(1 row)
select aes_decrypt(aes_encrypt(E'd\nsa\tdj\bsaf\Z\\dssa\ca\rs','dajd123FGBJG', '1234567890abcdef'),'dajd123FGBJG', '1234567890abcdef');
aes_decrypt
------------------------------
d +
sa dj\x08safZ\dssaca\rs
aes_decrypt
-------------------------
d +
sa dsafZ\dssaca\rs
(1 row)
select aes_decrypt(aes_encrypt('~·!@#¥%……&*()-=——+{}【】、|:‘’,。《》、?','12345dvghadCVBUJNF', '1234567890abcdef'),'12345dvghadCVBUJNF', '1234567890abcdef');
@ -161,15 +161,15 @@ select aes_encrypt('HuaweiGauss_234', 'cdjsfj3713vdVHV1', 'abcd');
ERROR: the size of init_vector must be greater than or equal to 16.
CONTEXT: referenced column: aes_encrypt
select aes_encrypt('HuaweiGauss_234', 'cdjsfj3713vdVHV1', '1234567890abcdef');
aes_encrypt
-------------------------
8\x01MP\x1Fe3\x0F \x08`
aes_encrypt
--------------------
8\x01MP\x1Fe3\x0F`
(1 row)
select aes_encrypt('HuaweiGauss_234', 'cdjsfj3713vdVHV1', '1234567890abcdef123456');
aes_encrypt
-------------------------
8\x01MP\x1Fe3\x0F \x08`
aes_encrypt
--------------------
8\x01MP\x1Fe3\x0F`
(1 row)
select lengthb(aes_encrypt('HuaweiGauss_234', 'cdjsfj3713vdVHV1', '1234567890abcdef123456')), lengthb('HuaweiGauss_234');
@ -277,10 +277,10 @@ select aes_decrypt(aes_encrypt('大家好','cdjsfj3713vdVHV1', '1234567890abcdef
(1 row)
select aes_decrypt(aes_encrypt(E'd\nsa\tdj\bsaf\Z\\dssa\ca\rs','dajd123FGBJG', '1234567890abcdef'),'dajd123FGBJG', '1234567890abcdef');
aes_decrypt
------------------------------
d +
sa dj\x08safZ\dssaca\rs
aes_decrypt
-------------------------
d +
sa dsafZ\dssaca\rs
(1 row)
select aes_decrypt(aes_encrypt('~·!@#¥%……&*()-=——+{}【】、|:‘’,。《》、?','12345dvghadCVBUJNF', '1234567890abcdef'),'12345dvghadCVBUJNF', '1234567890abcdef');
@ -417,10 +417,10 @@ select aes_decrypt(aes_encrypt('大家好','cdjsfj3713vdVHV1', '1234567890abcdef
(1 row)
select aes_decrypt(aes_encrypt(E'd\nsa\tdj\bsaf\Z\\dssa\ca\rs','dajd123FGBJG', '1234567890abcdef'),'dajd123FGBJG', '1234567890abcdef');
aes_decrypt
------------------------------
d +
sa dj\x08safZ\dssaca\rs
aes_decrypt
-------------------------
d +
sa dsafZ\dssaca\rs
(1 row)
select aes_decrypt(aes_encrypt('~·!@#¥%……&*()-=——+{}【】、|:‘’,。《》、?','12345dvghadCVBUJNF', '1234567890abcdef'),'12345dvghadCVBUJNF', '1234567890abcdef');
@ -557,10 +557,10 @@ select aes_decrypt(aes_encrypt('大家好','cdjsfj3713vdVHV1', '1234567890abcdef
(1 row)
select aes_decrypt(aes_encrypt(E'd\nsa\tdj\bsaf\Z\\dssa\ca\rs','dajd123FGBJG', '1234567890abcdef'),'dajd123FGBJG', '1234567890abcdef');
aes_decrypt
------------------------------
d +
sa dj\x08safZ\dssaca\rs
aes_decrypt
-------------------------
d +
sa dsafZ\dssaca\rs
(1 row)
select aes_decrypt(aes_encrypt('~·!@#¥%……&*()-=——+{}【】、|:‘’,。《》、?','12345dvghadCVBUJNF', '1234567890abcdef'),'12345dvghadCVBUJNF', '1234567890abcdef');
@ -611,9 +611,9 @@ select aes_encrypt('HuaweiGauss_234', 'cdjsfj3713vdVHV1', '1234567890abcdef') =
(1 row)
select aes_encrypt('HuaweiGauss_234', 'cdjsfj3713vdVHV1', '1234567890dgjahdjk');
aes_encrypt
---------------------------
$+&+\x074uC\x08\x1CK\x1E
aes_encrypt
----------------------
$+&+\x074u\x1CK\x1E
(1 row)
select aes_encrypt('HuaweiGauss_234', 'cdjsfj3713vdVHV1', '1234567890abcdef') = aes_encrypt('HuaweiGauss_234', 'cdjsfj3713vdVHV1', '1234567890dgjahdjk');
@ -697,10 +697,10 @@ select aes_decrypt(aes_encrypt('大家好','cdjsfj3713vdVHV1', '1234567890abcdef
(1 row)
select aes_decrypt(aes_encrypt(E'd\nsa\tdj\bsaf\Z\\dssa\ca\rs','dajd123FGBJG', '1234567890abcdef'),'dajd123FGBJG', '1234567890abcdef');
aes_decrypt
------------------------------
d +
sa dj\x08safZ\dssaca\rs
aes_decrypt
-------------------------
d +
sa dsafZ\dssaca\rs
(1 row)
select aes_decrypt(aes_encrypt('~·!@#¥%……&*()-=——+{}【】、|:‘’,。《》、?','12345dvghadCVBUJNF', '1234567890abcdef'),'12345dvghadCVBUJNF', '1234567890abcdef');
@ -837,10 +837,10 @@ select aes_decrypt(aes_encrypt('大家好','cdjsfj3713vdVHV1', '1234567890abcdef
(1 row)
select aes_decrypt(aes_encrypt(E'd\nsa\tdj\bsaf\Z\\dssa\ca\rs','dajd123FGBJG', '1234567890abcdef'),'dajd123FGBJG', '1234567890abcdef');
aes_decrypt
------------------------------
d +
sa dj\x08safZ\dssaca\rs
aes_decrypt
-------------------------
d +
sa dsafZ\dssaca\rs
(1 row)
select aes_decrypt(aes_encrypt('~·!@#¥%……&*()-=——+{}【】、|:‘’,。《》、?','12345dvghadCVBUJNF', '1234567890abcdef'),'12345dvghadCVBUJNF', '1234567890abcdef');
@ -977,10 +977,10 @@ select aes_decrypt(aes_encrypt('大家好','cdjsfj3713vdVHV1', '1234567890abcdef
(1 row)
select aes_decrypt(aes_encrypt(E'd\nsa\tdj\bsaf\Z\\dssa\ca\rs','dajd123FGBJG', '1234567890abcdef'),'dajd123FGBJG', '1234567890abcdef');
aes_decrypt
------------------------------
d +
sa dj\x08safZ\dssaca\rs
aes_decrypt
-------------------------
d +
sa dsafZ\dssaca\rs
(1 row)
select aes_decrypt(aes_encrypt('~·!@#¥%……&*()-=——+{}【】、|:‘’,。《》、?','12345dvghadCVBUJNF', '1234567890abcdef'),'12345dvghadCVBUJNF', '1234567890abcdef');
@ -1117,10 +1117,10 @@ select aes_decrypt(aes_encrypt('大家好','cdjsfj3713vdVHV1', '1234567890abcdef
(1 row)
select aes_decrypt(aes_encrypt(E'd\nsa\tdj\bsaf\Z\\dssa\ca\rs','dajd123FGBJG', '1234567890abcdef'),'dajd123FGBJG', '1234567890abcdef');
aes_decrypt
------------------------------
d +
sa dj\x08safZ\dssaca\rs
aes_decrypt
-------------------------
d +
sa dsafZ\dssaca\rs
(1 row)
select aes_decrypt(aes_encrypt('~·!@#¥%……&*()-=——+{}【】、|:‘’,。《》、?','12345dvghadCVBUJNF', '1234567890abcdef'),'12345dvghadCVBUJNF', '1234567890abcdef');
@ -1257,10 +1257,10 @@ select aes_decrypt(aes_encrypt('大家好','cdjsfj3713vdVHV1', '1234567890abcdef
(1 row)
select aes_decrypt(aes_encrypt(E'd\nsa\tdj\bsaf\Z\\dssa\ca\rs','dajd123FGBJG', '1234567890abcdef'),'dajd123FGBJG', '1234567890abcdef');
aes_decrypt
------------------------------
d +
sa dj\x08safZ\dssaca\rs
aes_decrypt
-------------------------
d +
sa dsafZ\dssaca\rs
(1 row)
select aes_decrypt(aes_encrypt('~·!@#¥%……&*()-=——+{}【】、|:‘’,。《》、?','12345dvghadCVBUJNF', '1234567890abcdef'),'12345dvghadCVBUJNF', '1234567890abcdef');
@ -1281,15 +1281,15 @@ select aes_encrypt('HuaweiGauss_234', 'cdjsfj3713vdVHV1', 'abcd');
ERROR: the size of init_vector must be greater than or equal to 16.
CONTEXT: referenced column: aes_encrypt
select aes_encrypt('HuaweiGauss_234', 'cdjsfj3713vdVHV1', '1234567890abcdef');
aes_encrypt
-----------------------
hJ#\x0E\x1A\x01跟uGfG
aes_encrypt
-------------------
hJ#\x0E\x01跟uGfG
(1 row)
select aes_encrypt('HuaweiGauss_234', 'cdjsfj3713vdVHV1', '1234567890abcdef123456');
aes_encrypt
-----------------------
hJ#\x0E\x1A\x01跟uGfG
aes_encrypt
-------------------
hJ#\x0E\x01跟uGfG
(1 row)
select lengthb(aes_encrypt('HuaweiGauss_234', 'cdjsfj3713vdVHV1', '1234567890abcdef123456')), lengthb('HuaweiGauss_234');
@ -1397,10 +1397,10 @@ select aes_decrypt(aes_encrypt('大家好','cdjsfj3713vdVHV1', '1234567890abcdef
(1 row)
select aes_decrypt(aes_encrypt(E'd\nsa\tdj\bsaf\Z\\dssa\ca\rs','dajd123FGBJG', '1234567890abcdef'),'dajd123FGBJG', '1234567890abcdef');
aes_decrypt
------------------------------
d +
sa dj\x08safZ\dssaca\rs
aes_decrypt
-------------------------
d +
sa dsafZ\dssaca\rs
(1 row)
select aes_decrypt(aes_encrypt('~·!@#¥%……&*()-=——+{}【】、|:‘’,。《》、?','12345dvghadCVBUJNF', '1234567890abcdef'),'12345dvghadCVBUJNF', '1234567890abcdef');
@ -1537,10 +1537,10 @@ select aes_decrypt(aes_encrypt('大家好','cdjsfj3713vdVHV1', '1234567890abcdef
(1 row)
select aes_decrypt(aes_encrypt(E'd\nsa\tdj\bsaf\Z\\dssa\ca\rs','dajd123FGBJG', '1234567890abcdef'),'dajd123FGBJG', '1234567890abcdef');
aes_decrypt
------------------------------
d +
sa dj\x08safZ\dssaca\rs
aes_decrypt
-------------------------
d +
sa dsafZ\dssaca\rs
(1 row)
select aes_decrypt(aes_encrypt('~·!@#¥%……&*()-=——+{}【】、|:‘’,。《》、?','12345dvghadCVBUJNF', '1234567890abcdef'),'12345dvghadCVBUJNF', '1234567890abcdef');
@ -1561,15 +1561,15 @@ select aes_encrypt('HuaweiGauss_234', 'cdjsfj3713vdVHV1', 'abcd');
ERROR: the size of init_vector must be greater than or equal to 16.
CONTEXT: referenced column: aes_encrypt
select aes_encrypt('HuaweiGauss_234', 'cdjsfj3713vdVHV1', '1234567890abcdef');
aes_encrypt
-------------------
p\x1A\x05pg\x17R®
aes_encrypt
---------------
p\x05pg\x17R®
(1 row)
select aes_encrypt('HuaweiGauss_234', 'cdjsfj3713vdVHV1', '1234567890abcdef123456');
aes_encrypt
-------------------
p\x1A\x05pg\x17R®
aes_encrypt
---------------
p\x05pg\x17R®
(1 row)
select lengthb(aes_encrypt('HuaweiGauss_234', 'cdjsfj3713vdVHV1', '1234567890abcdef123456')), lengthb('HuaweiGauss_234');
@ -1677,10 +1677,10 @@ select aes_decrypt(aes_encrypt('大家好','cdjsfj3713vdVHV1', '1234567890abcdef
(1 row)
select aes_decrypt(aes_encrypt(E'd\nsa\tdj\bsaf\Z\\dssa\ca\rs','dajd123FGBJG', '1234567890abcdef'),'dajd123FGBJG', '1234567890abcdef');
aes_decrypt
------------------------------
d +
sa dj\x08safZ\dssaca\rs
aes_decrypt
-------------------------
d +
sa dsafZ\dssaca\rs
(1 row)
select aes_decrypt(aes_encrypt('~·!@#¥%……&*()-=——+{}【】、|:‘’,。《》、?','12345dvghadCVBUJNF', '1234567890abcdef'),'12345dvghadCVBUJNF', '1234567890abcdef');
@ -1701,15 +1701,15 @@ select aes_encrypt('HuaweiGauss_234', 'cdjsfj3713vdVHV1', 'abcd');
ERROR: the size of init_vector must be greater than or equal to 16.
CONTEXT: referenced column: aes_encrypt
select aes_encrypt('HuaweiGauss_234', 'cdjsfj3713vdVHV1', '1234567890abcdef');
aes_encrypt
-----------------------
hJ#\x0E\x1A\x01跟uGfG
aes_encrypt
-------------------
hJ#\x0E\x01跟uGfG
(1 row)
select aes_encrypt('HuaweiGauss_234', 'cdjsfj3713vdVHV1', '1234567890abcdef123456');
aes_encrypt
-----------------------
hJ#\x0E\x1A\x01跟uGfG
aes_encrypt
-------------------
hJ#\x0E\x01跟uGfG
(1 row)
select lengthb(aes_encrypt('HuaweiGauss_234', 'cdjsfj3713vdVHV1', '1234567890abcdef123456')), lengthb('HuaweiGauss_234');
@ -1817,10 +1817,10 @@ select aes_decrypt(aes_encrypt('大家好','cdjsfj3713vdVHV1', '1234567890abcdef
(1 row)
select aes_decrypt(aes_encrypt(E'd\nsa\tdj\bsaf\Z\\dssa\ca\rs','dajd123FGBJG', '1234567890abcdef'),'dajd123FGBJG', '1234567890abcdef');
aes_decrypt
------------------------------
d +
sa dj\x08safZ\dssaca\rs
aes_decrypt
-------------------------
d +
sa dsafZ\dssaca\rs
(1 row)
select aes_decrypt(aes_encrypt('~·!@#¥%……&*()-=——+{}【】、|:‘’,。《》、?','12345dvghadCVBUJNF', '1234567890abcdef'),'12345dvghadCVBUJNF', '1234567890abcdef');
@ -1957,10 +1957,10 @@ select aes_decrypt(aes_encrypt('大家好','cdjsfj3713vdVHV1', '1234567890abcdef
(1 row)
select aes_decrypt(aes_encrypt(E'd\nsa\tdj\bsaf\Z\\dssa\ca\rs','dajd123FGBJG', '1234567890abcdef'),'dajd123FGBJG', '1234567890abcdef');
aes_decrypt
------------------------------
d +
sa dj\x08safZ\dssaca\rs
aes_decrypt
-------------------------
d +
sa dsafZ\dssaca\rs
(1 row)
select aes_decrypt(aes_encrypt('~·!@#¥%……&*()-=——+{}【】、|:‘’,。《》、?','12345dvghadCVBUJNF', '1234567890abcdef'),'12345dvghadCVBUJNF', '1234567890abcdef');
@ -1981,15 +1981,15 @@ select aes_encrypt('HuaweiGauss_234', 'cdjsfj3713vdVHV1', 'abcd');
ERROR: the size of init_vector must be greater than or equal to 16.
CONTEXT: referenced column: aes_encrypt
select aes_encrypt('HuaweiGauss_234', 'cdjsfj3713vdVHV1', '1234567890abcdef');
aes_encrypt
-------------------
p\x1A\x05pg\x17R®
aes_encrypt
---------------
p\x05pg\x17R®
(1 row)
select aes_encrypt('HuaweiGauss_234', 'cdjsfj3713vdVHV1', '1234567890abcdef123456');
aes_encrypt
-------------------
p\x1A\x05pg\x17R®
aes_encrypt
---------------
p\x05pg\x17R®
(1 row)
select lengthb(aes_encrypt('HuaweiGauss_234', 'cdjsfj3713vdVHV1', '1234567890abcdef123456')), lengthb('HuaweiGauss_234');
@ -2097,10 +2097,10 @@ select aes_decrypt(aes_encrypt('大家好','cdjsfj3713vdVHV1', '1234567890abcdef
(1 row)
select aes_decrypt(aes_encrypt(E'd\nsa\tdj\bsaf\Z\\dssa\ca\rs','dajd123FGBJG', '1234567890abcdef'),'dajd123FGBJG', '1234567890abcdef');
aes_decrypt
------------------------------
d +
sa dj\x08safZ\dssaca\rs
aes_decrypt
-------------------------
d +
sa dsafZ\dssaca\rs
(1 row)
select aes_decrypt(aes_encrypt('~·!@#¥%……&*()-=——+{}【】、|:‘’,。《》、?','12345dvghadCVBUJNF', '1234567890abcdef'),'12345dvghadCVBUJNF', '1234567890abcdef');