diff --git a/packages/tools/src/DatabaseAnalyser.ts b/packages/tools/src/DatabaseAnalyser.ts index 31c86d93a..0ebb69472 100644 --- a/packages/tools/src/DatabaseAnalyser.ts +++ b/packages/tools/src/DatabaseAnalyser.ts @@ -354,6 +354,7 @@ export class DatabaseAnalyser { logger.error(extractErrorLogData(err, { template }), 'Error running analyser query'); return { rows: [], + isError: true, }; } } diff --git a/plugins/dbgate-plugin-clickhouse/src/backend/Analyser.js b/plugins/dbgate-plugin-clickhouse/src/backend/Analyser.js index 774784494..08bd453f8 100644 --- a/plugins/dbgate-plugin-clickhouse/src/backend/Analyser.js +++ b/plugins/dbgate-plugin-clickhouse/src/backend/Analyser.js @@ -34,7 +34,10 @@ class Analyser extends DatabaseAnalyser { this.feedback({ analysingMessage: 'Loading columns' }); const columns = await this.analyserQuery('columns', ['tables', 'views']); this.feedback({ analysingMessage: 'Loading views' }); - const views = await this.analyserQuery('views', ['views']); + let views = await this.analyserQuery('views', ['views']); + if (views?.isError) { + views = await this.analyserQuery('viewsNoDefinition', ['views']); + } const res = { tables: tables.rows.map((table) => ({ @@ -64,7 +67,7 @@ class Analyser extends DatabaseAnalyser { ...col, ...extractDataType(col.dataType), })), - createSql: `CREATE VIEW "${view.pureName}"\nAS\n${view.viewDefinition}`, + createSql: view.viewDefinition ? `CREATE VIEW "${view.pureName}"\nAS\n${view.viewDefinition}` : '', })), }; this.feedback({ analysingMessage: null }); diff --git a/plugins/dbgate-plugin-clickhouse/src/backend/sql/index.js b/plugins/dbgate-plugin-clickhouse/src/backend/sql/index.js index 6465f821b..1a5545817 100644 --- a/plugins/dbgate-plugin-clickhouse/src/backend/sql/index.js +++ b/plugins/dbgate-plugin-clickhouse/src/backend/sql/index.js @@ -1,11 +1,13 @@ const columns = require('./columns'); const tables = require('./tables'); const views = require('./views'); +const viewsNoDefinition = require('./viewsNoDefinition'); const tableModifications = require('./tableModifications'); module.exports = { columns, tables, views, + viewsNoDefinition, tableModifications, }; diff --git a/plugins/dbgate-plugin-clickhouse/src/backend/sql/viewsNoDefinition.js b/plugins/dbgate-plugin-clickhouse/src/backend/sql/viewsNoDefinition.js new file mode 100644 index 000000000..9d3706822 --- /dev/null +++ b/plugins/dbgate-plugin-clickhouse/src/backend/sql/viewsNoDefinition.js @@ -0,0 +1,8 @@ +module.exports = ` +select + tables.name as "pureName", + tables.uuid as "objectId", + tables.metadata_modification_time as "contentHash" +from system.tables +where tables.database='#DATABASE#' and tables.uuid =OBJECT_ID_CONDITION and tables.engine = 'View' +`;