From 2ca15ba57d557d9c4e32ae1c3e9290b0d5ffc13f Mon Sep 17 00:00:00 2001 From: Shrikant Sharat Kandula Date: Wed, 18 Nov 2020 11:19:55 +0530 Subject: [PATCH] Fix #1758: columns duplicated in Postgres structure (#1767) --- .../com/external/plugins/PostgresPlugin.java | 2 +- .../external/plugins/PostgresPluginTest.java | 24 ++++++++++++++++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/app/server/appsmith-plugins/postgresPlugin/src/main/java/com/external/plugins/PostgresPlugin.java b/app/server/appsmith-plugins/postgresPlugin/src/main/java/com/external/plugins/PostgresPlugin.java index 9606f1f4a0..3d2175ba1d 100644 --- a/app/server/appsmith-plugins/postgresPlugin/src/main/java/com/external/plugins/PostgresPlugin.java +++ b/app/server/appsmith-plugins/postgresPlugin/src/main/java/com/external/plugins/PostgresPlugin.java @@ -79,7 +79,7 @@ public class PostgresPlugin extends BasePlugin { " left join pg_catalog.pg_type t1 on t1.oid = a.atttypid\n" + " inner join pg_catalog.pg_class c on a.attrelid = c.oid\n" + " left join pg_catalog.pg_namespace n on c.relnamespace = n.oid\n" + - " left join pg_catalog.pg_attrdef d on d.adrelid = c.oid\n" + + " left join pg_catalog.pg_attrdef d on d.adrelid = c.oid and d.adnum = a.attnum\n" + "where a.attnum > 0\n" + " and not a.attisdropped\n" + " and n.nspname not in ('information_schema', 'pg_catalog')\n" + diff --git a/app/server/appsmith-plugins/postgresPlugin/src/test/java/com/external/plugins/PostgresPluginTest.java b/app/server/appsmith-plugins/postgresPlugin/src/test/java/com/external/plugins/PostgresPluginTest.java index e09490c7be..17fd1c187b 100644 --- a/app/server/appsmith-plugins/postgresPlugin/src/test/java/com/external/plugins/PostgresPluginTest.java +++ b/app/server/appsmith-plugins/postgresPlugin/src/test/java/com/external/plugins/PostgresPluginTest.java @@ -104,6 +104,12 @@ public class PostgresPluginTest { " user_id int NOT NULL,\n" + " constraint user_fk foreign key (user_id) references users(id)" + ")"); + + // Testing . + statement.execute("CREATE TABLE campus (\n" + + " id timestamptz default now(),\n" + + " name timestamptz default now()\n" + + ")"); } try (Statement statement = connection.createStatement()) { @@ -277,9 +283,21 @@ public class PostgresPluginTest { StepVerifier.create(structureMono) .assertNext(structure -> { assertNotNull(structure); - assertEquals(2, structure.getTables().size()); + assertEquals(3, structure.getTables().size()); - final DatasourceStructure.Table possessionsTable = structure.getTables().get(0); + final DatasourceStructure.Table campusTable = structure.getTables().get(0); + assertEquals("public.campus", campusTable.getName()); + assertEquals(DatasourceStructure.TableType.TABLE, campusTable.getType()); + assertArrayEquals( + new DatasourceStructure.Column[]{ + new DatasourceStructure.Column("id", "timestamptz", "now()"), + new DatasourceStructure.Column("name", "timestamptz", "now()") + }, + campusTable.getColumns().toArray() + ); + assertEquals(campusTable.getKeys().size(), 0); + + final DatasourceStructure.Table possessionsTable = structure.getTables().get(1); assertEquals("public.possessions", possessionsTable.getName()); assertEquals(DatasourceStructure.TableType.TABLE, possessionsTable.getType()); assertArrayEquals( @@ -318,7 +336,7 @@ public class PostgresPluginTest { possessionsTable.getTemplates().toArray() ); - final DatasourceStructure.Table usersTable = structure.getTables().get(1); + final DatasourceStructure.Table usersTable = structure.getTables().get(2); assertEquals("public.users", usersTable.getName()); assertEquals(DatasourceStructure.TableType.TABLE, usersTable.getType()); assertArrayEquals(