From 41554be6e373c6621a1b07d4cbd126cadf1d0694 Mon Sep 17 00:00:00 2001
From: soorajshankar
Date: Wed, 1 Jul 2020 11:42:36 +0530
Subject: [PATCH 01/11] pg dependency prompt #5109
---
.../components/Services/Data/DataActions.js | 10 ++++---
console/src/components/Services/Data/utils.js | 28 +++++++++++++++----
2 files changed, 29 insertions(+), 9 deletions(-)
diff --git a/console/src/components/Services/Data/DataActions.js b/console/src/components/Services/Data/DataActions.js
index 1f923b9a9e672..e3c08da42ba77 100644
--- a/console/src/components/Services/Data/DataActions.js
+++ b/console/src/components/Services/Data/DataActions.js
@@ -582,7 +582,7 @@ const makeMigrationCall = (
}
customOnSuccess(data, globals.consoleMode, currMigrationMode);
};
- const retryMigration = (err = {}, errMsg = '') => {
+ const retryMigration = (err = {}, errMsg = '', isPgCascade = false) => {
dispatch(
showNotification(
{
@@ -603,7 +603,7 @@ const makeMigrationCall = (
makeMigrationCall(
dispatch,
getState,
- cascadeUpQueries(upQueries), // cascaded new up queries
+ cascadeUpQueries(upQueries, isPgCascade), // cascaded new up queries
downQueries,
migrationName,
customOnSuccess,
@@ -623,8 +623,10 @@ const makeMigrationCall = (
const onError = err => {
if (!isRetry) {
- const dependecyError = getDependencyError(err);
- if (dependecyError) return retryMigration(dependecyError, errorMsg);
+ const { dependencyError, pgDependencyError } = getDependencyError(err);
+ if (dependencyError) return retryMigration(dependencyError, errorMsg);
+ if (pgDependencyError)
+ return retryMigration(pgDependencyError, errorMsg, true);
}
dispatch(handleMigrationErrors(errorMsg, err));
diff --git a/console/src/components/Services/Data/utils.js b/console/src/components/Services/Data/utils.js
index e6e5e601cc2e4..34c9720a913f4 100644
--- a/console/src/components/Services/Data/utils.js
+++ b/console/src/components/Services/Data/utils.js
@@ -790,13 +790,21 @@ WHERE
export const isColTypeString = colType =>
['text', 'varchar', 'char', 'bpchar', 'name'].includes(colType);
-export const cascadeUpQueries = (upQueries = []) =>
+const cascadePGSqlQuery = sql => {
+ let prefix;
+ if (sql[sql.length - 1] === ';') prefix = sql.substr(0, sql.length - 1);
+ // SQL might have a " at the end
+ else if (sql[sql.length - 2] === ';') prefix = sql.substr(0, sql.length - 2);
+ return prefix + ' CASCADE;';
+};
+export const cascadeUpQueries = (upQueries = [], isPgCascade = false) =>
upQueries.map((i = {}) => {
if (i.type === 'run_sql' || i.type === 'untrack_table') {
return {
...i,
args: {
...i.args,
+ ...(isPgCascade && { sql: cascadePGSqlQuery(i.args.sql) }),
cascade: true,
},
};
@@ -805,16 +813,26 @@ export const cascadeUpQueries = (upQueries = []) =>
});
export const getDependencyError = (err = {}) => {
+ const dflt = {};
if (err.code == ERROR_CODES.dependencyError.code) {
// direct dependency error
- return err;
+ return { dependencyError: err };
} else if (err.code == ERROR_CODES.dataApiError.code) {
// message is coming as error, further parssing willbe based on message key
const actualError = isJsonString(err.message)
? JSON.parse(err.message)
: {};
- if (actualError.code == ERROR_CODES.dependencyError.code) {
- return { ...actualError, message: actualError.error };
- }
+ if (actualError.code == ERROR_CODES.dependencyError.code)
+ return {
+ dependencyError: { ...actualError, message: actualError.error },
+ };
+ else if (
+ actualError.code === ERROR_CODES.postgresError.code &&
+ actualError?.internal?.error?.status_code === '2BP01' // pg dependent error > https://www.postgresql.org/docs/12/errcodes-appendix.html
+ )
+ return {
+ pgDependencyError: { ...actualError, message: actualError.error },
+ };
}
+ return dflt;
};
From 28279312175ef520ff4f058894d8376e25880aef Mon Sep 17 00:00:00 2001
From: soorajshankar
Date: Wed, 1 Jul 2020 14:08:07 +0530
Subject: [PATCH 02/11] changelog
---
CHANGELOG.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e9bdfd96c8728..5674b3396ca32 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -30,6 +30,7 @@
- console: respect read-only mode in actions pages (fix #4656) (#4764)
- console: allow configuring session_argument for custom functions (close #4499) (#4922)
- console: fix listen update column config selection for event trigger (close #5042) (#5043)
+- console: added user prompt to cascade delete on Postgres dependency errors (close #5109) (#5248)
- cli: add new flags up-sql and down-sql to generate sql based migrations from the CLI (#5026)
- docs: add page on setting up v2 migrations (close #4746) (#4898)
From fb65a04b4479cbd71b598b9859943c229c641dd7 Mon Sep 17 00:00:00 2001
From: soorajshankar
Date: Mon, 13 Jul 2020 19:24:08 +0530
Subject: [PATCH 03/11] Update console/src/components/Services/Data/utils.js
Co-authored-by: Aleksandra Sikora
---
console/src/components/Services/Data/utils.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/console/src/components/Services/Data/utils.js b/console/src/components/Services/Data/utils.js
index 34c9720a913f4..f329233754c5e 100644
--- a/console/src/components/Services/Data/utils.js
+++ b/console/src/components/Services/Data/utils.js
@@ -828,7 +828,7 @@ export const getDependencyError = (err = {}) => {
};
else if (
actualError.code === ERROR_CODES.postgresError.code &&
- actualError?.internal?.error?.status_code === '2BP01' // pg dependent error > https://www.postgresql.org/docs/12/errcodes-appendix.html
+ actualError?.internal?.error?.status_code === '2BP01' // pg dependent error > https://www.postgresql.org/docs/current/errcodes-appendix.html
)
return {
pgDependencyError: { ...actualError, message: actualError.error },
From 0e16ab34db6d3516ef68afad6aea97e346c70a71 Mon Sep 17 00:00:00 2001
From: soorajshankar
Date: Wed, 15 Jul 2020 12:53:40 +0530
Subject: [PATCH 04/11] review comments
---
console/src/components/Services/Data/utils.js | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/console/src/components/Services/Data/utils.js b/console/src/components/Services/Data/utils.js
index 34c9720a913f4..9493e47a5abe6 100644
--- a/console/src/components/Services/Data/utils.js
+++ b/console/src/components/Services/Data/utils.js
@@ -791,11 +791,12 @@ export const isColTypeString = colType =>
['text', 'varchar', 'char', 'bpchar', 'name'].includes(colType);
const cascadePGSqlQuery = sql => {
- let prefix;
- if (sql[sql.length - 1] === ';') prefix = sql.substr(0, sql.length - 1);
+ if (sql[sql.length - 1] === ';')
+ return sql.substr(0, sql.length - 1) + ' CASCADE;';
// SQL might have a " at the end
- else if (sql[sql.length - 2] === ';') prefix = sql.substr(0, sql.length - 2);
- return prefix + ' CASCADE;';
+ else if (sql[sql.length - 2] === ';')
+ return sql.substr(0, sql.length - 2) + ' CASCADE;';
+ return sql + ' CASCADE;';
};
export const cascadeUpQueries = (upQueries = [], isPgCascade = false) =>
upQueries.map((i = {}) => {
@@ -813,7 +814,6 @@ export const cascadeUpQueries = (upQueries = [], isPgCascade = false) =>
});
export const getDependencyError = (err = {}) => {
- const dflt = {};
if (err.code == ERROR_CODES.dependencyError.code) {
// direct dependency error
return { dependencyError: err };
@@ -834,5 +834,5 @@ export const getDependencyError = (err = {}) => {
pgDependencyError: { ...actualError, message: actualError.error },
};
}
- return dflt;
+ return {};
};
From 30ded79747889a712931697d35dc8d046f473c58 Mon Sep 17 00:00:00 2001
From: soorajshankar
Date: Wed, 15 Jul 2020 12:56:33 +0530
Subject: [PATCH 05/11] cleanup
---
console/src/components/Services/Data/utils.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/console/src/components/Services/Data/utils.js b/console/src/components/Services/Data/utils.js
index 5617dfb3630d1..20287bb12efed 100644
--- a/console/src/components/Services/Data/utils.js
+++ b/console/src/components/Services/Data/utils.js
@@ -799,6 +799,7 @@ const cascadePGSqlQuery = sql => {
return sql.substr(0, sql.length - 2) + ' CASCADE;';
return sql + ' CASCADE;';
};
+
export const cascadeUpQueries = (upQueries = [], isPgCascade = false) =>
upQueries.map((i = {}) => {
if (i.type === 'run_sql' || i.type === 'untrack_table') {
From 26c5671b3189b06ff565eb8125069db37331fcb6 Mon Sep 17 00:00:00 2001
From: soorajshankar
Date: Tue, 11 Aug 2020 14:05:53 +0530
Subject: [PATCH 06/11] parse pg error without CLI mode
---
console/src/components/Services/Data/utils.js | 32 +++++++++----------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/console/src/components/Services/Data/utils.js b/console/src/components/Services/Data/utils.js
index 20287bb12efed..e14ba6b5e8778 100644
--- a/console/src/components/Services/Data/utils.js
+++ b/console/src/components/Services/Data/utils.js
@@ -819,22 +819,22 @@ export const getDependencyError = (err = {}) => {
if (err.code == ERROR_CODES.dependencyError.code) {
// direct dependency error
return { dependencyError: err };
- } else if (err.code == ERROR_CODES.dataApiError.code) {
- // message is coming as error, further parssing willbe based on message key
- const actualError = isJsonString(err.message)
- ? JSON.parse(err.message)
- : {};
- if (actualError.code == ERROR_CODES.dependencyError.code)
- return {
- dependencyError: { ...actualError, message: actualError.error },
- };
- else if (
- actualError.code === ERROR_CODES.postgresError.code &&
- actualError?.internal?.error?.status_code === '2BP01' // pg dependent error > https://www.postgresql.org/docs/current/errcodes-appendix.html
- )
- return {
- pgDependencyError: { ...actualError, message: actualError.error },
- };
}
+ if (err.code == ERROR_CODES.dataApiError.code) {
+ // with CLI mode, error is getting as a string with the key `message`
+ err = isJsonString(err.message) ? JSON.parse(err.message) : {};
+ }
+
+ if (err.code == ERROR_CODES.dependencyError.code)
+ return {
+ dependencyError: { ...err, message: err.error },
+ };
+ if (
+ err.code === ERROR_CODES.postgresError.code &&
+ err?.internal?.error?.status_code === '2BP01' // pg dependent error > https://www.postgresql.org/docs/current/errcodes-appendix.html
+ )
+ return {
+ pgDependencyError: { ...err, message: err.error },
+ };
return {};
};
From 6c2c0b96465a155c9bd78c4aa57f5eeb54e090f0 Mon Sep 17 00:00:00 2001
From: soorajshankar
Date: Wed, 12 Aug 2020 14:03:54 +0530
Subject: [PATCH 07/11] pg cascade error messaging
---
console/src/components/Services/Common/Notification.tsx | 3 ++-
console/src/components/Services/Data/DataActions.js | 1 +
console/src/components/Services/Data/utils.js | 6 +++++-
3 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/console/src/components/Services/Common/Notification.tsx b/console/src/components/Services/Common/Notification.tsx
index 18750a85e538f..00a35d5e4e77f 100644
--- a/console/src/components/Services/Common/Notification.tsx
+++ b/console/src/components/Services/Common/Notification.tsx
@@ -110,7 +110,8 @@ export const getErrorMessage = (
notificationMessage = error.code;
}
} else if ('internal' in error && 'error' in error.internal) {
- notificationMessage = `${error.code} : ${error.internal.error.message}`;
+ notificationMessage = `${error.internal.error.message}
+ ${error.internal.error.description}`;
} else if ('custom' in error) {
notificationMessage = error.custom;
} else if ('code' in error && 'error' in error && 'path' in error) {
diff --git a/console/src/components/Services/Data/DataActions.js b/console/src/components/Services/Data/DataActions.js
index 519147267001b..1327aaccc338f 100644
--- a/console/src/components/Services/Data/DataActions.js
+++ b/console/src/components/Services/Data/DataActions.js
@@ -689,6 +689,7 @@ const makeMigrationCall = (
successMsg,
errorMsg,
shouldSkipSchemaReload,
+ false,
true // prevent further retry
),
},
diff --git a/console/src/components/Services/Data/utils.js b/console/src/components/Services/Data/utils.js
index e14ba6b5e8778..7d5c102c11cd4 100644
--- a/console/src/components/Services/Data/utils.js
+++ b/console/src/components/Services/Data/utils.js
@@ -834,7 +834,11 @@ export const getDependencyError = (err = {}) => {
err?.internal?.error?.status_code === '2BP01' // pg dependent error > https://www.postgresql.org/docs/current/errcodes-appendix.html
)
return {
- pgDependencyError: { ...err, message: err.error },
+ pgDependencyError: {
+ ...err,
+ message: `${err?.internal?.error?.message}
+ ${err?.internal?.error?.description || ''}`,
+ },
};
return {};
};
From be9264eb9d8dc16610f738cdda46fd474f072f39 Mon Sep 17 00:00:00 2001
From: soorajshankar
Date: Wed, 12 Aug 2020 14:15:21 +0530
Subject: [PATCH 08/11] formating
---
console/src/components/Services/Common/Notification.tsx | 2 +-
console/src/components/Services/Data/utils.js | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/console/src/components/Services/Common/Notification.tsx b/console/src/components/Services/Common/Notification.tsx
index 00a35d5e4e77f..fbbfb4db15602 100644
--- a/console/src/components/Services/Common/Notification.tsx
+++ b/console/src/components/Services/Common/Notification.tsx
@@ -110,7 +110,7 @@ export const getErrorMessage = (
notificationMessage = error.code;
}
} else if ('internal' in error && 'error' in error.internal) {
- notificationMessage = `${error.internal.error.message}
+ notificationMessage = `${error.internal.error.message}.
${error.internal.error.description}`;
} else if ('custom' in error) {
notificationMessage = error.custom;
diff --git a/console/src/components/Services/Data/utils.js b/console/src/components/Services/Data/utils.js
index 7d5c102c11cd4..ce35b61cba2ae 100644
--- a/console/src/components/Services/Data/utils.js
+++ b/console/src/components/Services/Data/utils.js
@@ -836,7 +836,7 @@ export const getDependencyError = (err = {}) => {
return {
pgDependencyError: {
...err,
- message: `${err?.internal?.error?.message}
+ message: `${err?.internal?.error?.message}.
${err?.internal?.error?.description || ''}`,
},
};
From 3ed8d1e6db5103fc2888ad25c5b93e86eb997ab6 Mon Sep 17 00:00:00 2001
From: rikinsk
Date: Fri, 21 Aug 2020 18:19:10 +0530
Subject: [PATCH 09/11] split error message across lines
---
console/src/components/Services/Data/DataActions.js | 8 ++++++--
console/src/components/Services/Data/utils.js | 2 +-
2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/console/src/components/Services/Data/DataActions.js b/console/src/components/Services/Data/DataActions.js
index 1327aaccc338f..63334b8283241 100644
--- a/console/src/components/Services/Data/DataActions.js
+++ b/console/src/components/Services/Data/DataActions.js
@@ -660,6 +660,9 @@ const makeMigrationCall = (
customOnSuccess(data, globals.consoleMode, currMigrationMode);
};
const retryMigration = (err = {}, errMsg = '', isPgCascade = false) => {
+ const errorDetails = getErrorMessage('', err);
+ const errorDetailsLines = errorDetails.split('\n');
+
dispatch(
showNotification(
{
@@ -667,8 +670,9 @@ const makeMigrationCall = (
level: 'error',
message: (
- {getErrorMessage('', err)}
-
+ {errorDetailsLines.map((m, i) => (
+
{m}
+ ))}
Do you want to drop the dependent items as well?
diff --git a/console/src/components/Services/Data/utils.js b/console/src/components/Services/Data/utils.js
index ce35b61cba2ae..c324e45d66eb2 100644
--- a/console/src/components/Services/Data/utils.js
+++ b/console/src/components/Services/Data/utils.js
@@ -836,7 +836,7 @@ export const getDependencyError = (err = {}) => {
return {
pgDependencyError: {
...err,
- message: `${err?.internal?.error?.message}.
+ message: `${err?.internal?.error?.message}:\n
${err?.internal?.error?.description || ''}`,
},
};
From 6ec474fdc9d3b37c25a8d7ad4c11798a20159af4 Mon Sep 17 00:00:00 2001
From: Aleksandra Sikora
Date: Fri, 21 Aug 2020 15:01:06 +0200
Subject: [PATCH 10/11] Update CHANGELOG.md
---
CHANGELOG.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ca63bb6366572..fff520ec81f50 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,8 +7,9 @@
(Add entries here in the order of: server, console, cli, docs, others)
-- docs: add docs page on networking with docker (close #4346) (#4811)
+- console: add user prompt to cascade delete on Postgres dependency errors (close #5109) (#5248)
- cli: add missing global flags for seeds command (#5565)
+- docs: add docs page on networking with docker (close #4346) (#4811)
## `v1.3.1-beta.1`
@@ -107,7 +108,6 @@ If you do have such headers configured, then you must update the header configur
- console: respect read-only mode in actions pages (fix #4656) (#4764)
- console: allow configuring session_argument for custom functions (close #4499) (#4922)
- console: fix listen update column config selection for event trigger (close #5042) (#5043)
-- console: added user prompt to cascade delete on Postgres dependency errors (close #5109) (#5248)
- cli: add new flags up-sql and down-sql to generate sql based migrations from the CLI (#5026)
- docs: add instructions on fixing loss of data when using floats (close #5092)
- docs: add page on setting up v2 migrations (close #4746) (#4898)
From d8f5ad88c06a1e90dde9299bc95f094a1dd8c4d0 Mon Sep 17 00:00:00 2001
From: Aleksandra Sikora
Date: Sat, 22 Aug 2020 13:16:28 +0200
Subject: [PATCH 11/11] Update CHANGELOG.md
---
CHANGELOG.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index eea7f094e1d08..198338168df79 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -19,7 +19,7 @@ This release contains the [PDV refactor (#4111)](https://github.com/hasura/graph
- server: some mutations that cannot be performed will no longer be in the schema (for instance, `delete_by_pk` mutations won't be shown to users that do not have select permissions on all primary keys) (#4111)
- server: miscellaneous description changes (#4111)
- server: treat the absence of `backend_only` configuration and `backend_only: false` equally (closing #5059) (#4111)
-- console: add user prompt to cascade delete on Postgres dependency errors (close #5109) (#5248)
+- console: allow user to cascade Postgres dependencies when dropping Postgres objects (close #5109) (#5248)
- cli: add missing global flags for seeds command (#5565)
- docs: add docs page on networking with docker (close #4346) (#4811)