Hello Murtuza, Yes I think it makes sense Thanks Joao
On Mon, Mar 12, 2018 at 10:40 AM Murtuza Zabuawala < murtuza.zabuaw...@enterprisedb.com> wrote: > Hi Joao, > > Can we make tests to skip if db is not greenplum? > Like we are doing for resource group > "..web/pgadmin/browser/server_groups/servers/resource_groups/tests". > > > On Mon, Mar 12, 2018 at 7:52 PM, Murtuza Zabuawala < > murtuza.zabuaw...@enterprisedb.com> wrote: > >> Hi Dave, >> >> Joao's patch is pending, would you please do the needful? >> I also encounter similar issue on Windows while running tests. >> >> -- >> Regards, >> Murtuza Zabuawala >> EnterpriseDB: http://www.enterprisedb.com >> The Enterprise PostgreSQL Company >> >> >> On Tue, Mar 6, 2018 at 8:25 PM, Joao De Almeida Pereira < >> jdealmeidapere...@pivotal.io> wrote: >> >>> Hello Neel, >>> >>> You can find attached the corrections of the path's needed for windows. >>> The fix should correct TestExternalTablesView and TestTemplateCreate >>> but for the ChangePasswordTestCase I need more information to help you out. >>> We need to understand what is the response that the endpoint >>> /user_management/user is returning. >>> >>> Thanks >>> Joao >>> >>> On Tue, Mar 6, 2018 at 2:29 AM Neel Patel <neel.pa...@enterprisedb.com> >>> wrote: >>> >>>> Hi Joao, >>>> >>>> I ran the testsuite in windows 10 with Python 3.4 and it fails for >>>> external tables. Linux it is working fine. Let me know if I miss >>>> anything. >>>> >>>> Please check the below logs. >>>> >>>> python runtests.py --pkg browser --exclude feature_tests >>>> >>>> ######## >>>> >>>> ====================================================================== >>>> ERROR: runTest >>>> (pgadmin.browser.server_groups.servers.databases.schemas.tables.tests.test_template_create.TestTemplateCreate) >>>> When rendering GreenPlum 5.3 template, when no distribution is present, >>>> when no primary key is present, it returns "DISTRIBUTED RANDOMLY" >>>> ---------------------------------------------------------------------- >>>> Traceback (most recent call last): >>>> File >>>> "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\schemas\tables\tests\test_template_create.py", >>>> line 99, in runTest >>>> self.template_path, **self.input_parameters) >>>> File >>>> "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\flask\templating.py", >>>> line 133, in render_template >>>> return >>>> _render(ctx.app.jinja_env.get_or_select_template(template_name_or_list), >>>> File >>>> "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\environment.py", >>>> line 830, in get_or_select_template >>>> return self.get_template(template_name_or_list, parent, globals) >>>> File >>>> "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\environment.py", >>>> line 791, in get_template >>>> return self._load_template(name, self.make_globals(globals)) >>>> File >>>> "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\environment.py", >>>> line 765, in _load_template >>>> template = self.loader.load(self, name, globals) >>>> File >>>> "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\loaders.py", >>>> line 113, in load >>>> source, filename, uptodate = self.get_source(environment, name) >>>> File >>>> "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\flask\templating.py", >>>> line 57, in get_source >>>> return self._get_source_fast(environment, template) >>>> File >>>> "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\flask\templating.py", >>>> line 85, in _get_source_fast >>>> raise TemplateNotFound(template) >>>> jinja2.exceptions.TemplateNotFound: table\sql\gpdb_5.0_plus\create.sql >>>> >>>> ====================================================================== >>>> ERROR: runTest >>>> (pgadmin.browser.server_groups.servers.databases.schemas.tables.tests.test_template_create.TestTemplateCreate) >>>> When rendering GreenPlum 5.3 template, when no distribution is present, >>>> when primary key is present, it returns "DISTRIBUTED BY (attr_primary_key)" >>>> ---------------------------------------------------------------------- >>>> Traceback (most recent call last): >>>> File >>>> "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\schemas\tables\tests\test_template_create.py", >>>> line 99, in runTest >>>> self.template_path, **self.input_parameters) >>>> File >>>> "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\flask\templating.py", >>>> line 133, in render_template >>>> return >>>> _render(ctx.app.jinja_env.get_or_select_template(template_name_or_list), >>>> File >>>> "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\environment.py", >>>> line 830, in get_or_select_template >>>> return self.get_template(template_name_or_list, parent, globals) >>>> File >>>> "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\environment.py", >>>> line 791, in get_template >>>> return self._load_template(name, self.make_globals(globals)) >>>> File >>>> "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\environment.py", >>>> line 765, in _load_template >>>> template = self.loader.load(self, name, globals) >>>> File >>>> "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\loaders.py", >>>> line 113, in load >>>> source, filename, uptodate = self.get_source(environment, name) >>>> File >>>> "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\flask\templating.py", >>>> line 57, in get_source >>>> return self._get_source_fast(environment, template) >>>> File >>>> "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\flask\templating.py", >>>> line 85, in _get_source_fast >>>> raise TemplateNotFound(template) >>>> jinja2.exceptions.TemplateNotFound: table\sql\gpdb_5.0_plus\create.sql >>>> >>>> ====================================================================== >>>> ERROR: runTest >>>> (pgadmin.browser.server_groups.servers.databases.schemas.tables.tests.test_template_create.TestTemplateCreate) >>>> When rendering GreenPlum 5.3 template, when distribution is present, it >>>> returns "DISTRIBUTED BY (attr1, attr2, attr4)" >>>> ---------------------------------------------------------------------- >>>> Traceback (most recent call last): >>>> File >>>> "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\schemas\tables\tests\test_template_create.py", >>>> line 99, in runTest >>>> self.template_path, **self.input_parameters) >>>> File >>>> "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\flask\templating.py", >>>> line 133, in render_template >>>> return >>>> _render(ctx.app.jinja_env.get_or_select_template(template_name_or_list), >>>> File >>>> "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\environment.py", >>>> line 830, in get_or_select_template >>>> return self.get_template(template_name_or_list, parent, globals) >>>> File >>>> "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\environment.py", >>>> line 791, in get_template >>>> return self._load_template(name, self.make_globals(globals)) >>>> File >>>> "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\environment.py", >>>> line 765, in _load_template >>>> template = self.loader.load(self, name, globals) >>>> File >>>> "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\loaders.py", >>>> line 113, in load >>>> source, filename, uptodate = self.get_source(environment, name) >>>> File >>>> "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\flask\templating.py", >>>> line 57, in get_source >>>> return self._get_source_fast(environment, template) >>>> File >>>> "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\flask\templating.py", >>>> line 85, in _get_source_fast >>>> raise TemplateNotFound(template) >>>> jinja2.exceptions.TemplateNotFound: table\sql\gpdb_5.0_plus\create.sql >>>> >>>> ====================================================================== >>>> ERROR: runTest >>>> (pgadmin.browser.tests.test_change_password.ChangePasswordTestCase) >>>> TestCase for Changing Valid_Password >>>> ---------------------------------------------------------------------- >>>> Traceback (most recent call last): >>>> File >>>> "C:\Projects\pgadmin4\web\pgadmin\browser\tests\test_change_password.py", >>>> line 91, in runTest >>>> user_id = json.loads(response.data.decode('utf-8'))['id'] >>>> KeyError: 'id' >>>> >>>> ====================================================================== >>>> FAIL: runTest >>>> (pgadmin.browser.server_groups.servers.databases.external_tables.tests.test_external_tables_view.TestExternalTablesView) >>>> #nodes When retrieving the nodes and the database does not have >>>> external tables, it return no child nodes and status 200 >>>> ---------------------------------------------------------------------- >>>> Traceback (most recent call last): >>>> File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched >>>> return func(*args, **keywargs) >>>> File >>>> "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", >>>> line 314, in runTest >>>> self.__test_nodes() >>>> File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched >>>> return func(*args, **keywargs) >>>> File >>>> "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", >>>> line 367, in __test_nodes >>>> self.expect_render_template_called_with >>>> File "C:\Python34\Lib\unittest\mock.py", line 777, in >>>> assert_called_with >>>> raise AssertionError(_error_message()) from cause >>>> AssertionError: Expected call: >>>> render_template('sql/#gpdb#80323#/list.sql') >>>> Actual call: render_template('sql/#gpdb#80323#\\list.sql') >>>> >>>> ====================================================================== >>>> FAIL: runTest >>>> (pgadmin.browser.server_groups.servers.databases.external_tables.tests.test_external_tables_view.TestExternalTablesView) >>>> #nodes When retrieving the nodes and an error happens while executing >>>> the query, it return an internal server error and status 500 >>>> ---------------------------------------------------------------------- >>>> Traceback (most recent call last): >>>> File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched >>>> return func(*args, **keywargs) >>>> File >>>> "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", >>>> line 314, in runTest >>>> self.__test_nodes() >>>> File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched >>>> return func(*args, **keywargs) >>>> File >>>> "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", >>>> line 367, in __test_nodes >>>> self.expect_render_template_called_with >>>> File "C:\Python34\Lib\unittest\mock.py", line 777, in >>>> assert_called_with >>>> raise AssertionError(_error_message()) from cause >>>> AssertionError: Expected call: >>>> render_template('sql/#gpdb#80323#/list.sql') >>>> Actual call: render_template('sql/#gpdb#80323#\\list.sql') >>>> >>>> ====================================================================== >>>> FAIL: runTest >>>> (pgadmin.browser.server_groups.servers.databases.external_tables.tests.test_external_tables_view.TestExternalTablesView) >>>> #nodes When retrieving the nodes and the database has 2 external >>>> tables, it return 2 child nodes and status 200 >>>> ---------------------------------------------------------------------- >>>> Traceback (most recent call last): >>>> File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched >>>> return func(*args, **keywargs) >>>> File >>>> "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", >>>> line 314, in runTest >>>> self.__test_nodes() >>>> File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched >>>> return func(*args, **keywargs) >>>> File >>>> "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", >>>> line 367, in __test_nodes >>>> self.expect_render_template_called_with >>>> File "C:\Python34\Lib\unittest\mock.py", line 777, in >>>> assert_called_with >>>> raise AssertionError(_error_message()) from cause >>>> AssertionError: Expected call: >>>> render_template('sql/#gpdb#80323#/list.sql') >>>> Actual call: render_template('sql/#gpdb#80323#\\list.sql') >>>> >>>> ====================================================================== >>>> FAIL: runTest >>>> (pgadmin.browser.server_groups.servers.databases.external_tables.tests.test_external_tables_view.TestExternalTablesView) >>>> #node When retrieving the information about 1 external table and an >>>> error happens while executing the query, it return an internal server error >>>> and status 500 >>>> ---------------------------------------------------------------------- >>>> Traceback (most recent call last): >>>> File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched >>>> return func(*args, **keywargs) >>>> File >>>> "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", >>>> line 316, in runTest >>>> self.__test_node() >>>> File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched >>>> return func(*args, **keywargs) >>>> File >>>> "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", >>>> line 393, in __test_node >>>> **self.expect_render_template_called_with >>>> File "C:\Python34\Lib\unittest\mock.py", line 777, in >>>> assert_called_with >>>> raise AssertionError(_error_message()) from cause >>>> AssertionError: Expected call: render_template(external_table_id=11, >>>> template_name_or_list='sql/#gpdb#80323#/node.sql') >>>> Actual call: render_template(external_table_id=11, >>>> template_name_or_list='sql/#gpdb#80323#\\node.sql') >>>> >>>> ====================================================================== >>>> FAIL: runTest >>>> (pgadmin.browser.server_groups.servers.databases.external_tables.tests.test_external_tables_view.TestExternalTablesView) >>>> #node When retrieving the information about 1 external table and table >>>> does not exist, it return an error message and status 404 >>>> ---------------------------------------------------------------------- >>>> Traceback (most recent call last): >>>> File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched >>>> return func(*args, **keywargs) >>>> File >>>> "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", >>>> line 316, in runTest >>>> self.__test_node() >>>> File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched >>>> return func(*args, **keywargs) >>>> File >>>> "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", >>>> line 393, in __test_node >>>> **self.expect_render_template_called_with >>>> File "C:\Python34\Lib\unittest\mock.py", line 777, in >>>> assert_called_with >>>> raise AssertionError(_error_message()) from cause >>>> AssertionError: Expected call: render_template(external_table_id=11, >>>> template_name_or_list='sql/#gpdb#80323#/node.sql') >>>> Actual call: render_template(external_table_id=11, >>>> template_name_or_list='sql/#gpdb#80323#\\node.sql') >>>> >>>> ====================================================================== >>>> FAIL: runTest >>>> (pgadmin.browser.server_groups.servers.databases.external_tables.tests.test_external_tables_view.TestExternalTablesView) >>>> #nodes When retrieving the information about 1 external table and the >>>> table exists, it return external node information and status 200 >>>> ---------------------------------------------------------------------- >>>> Traceback (most recent call last): >>>> File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched >>>> return func(*args, **keywargs) >>>> File >>>> "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", >>>> line 316, in runTest >>>> self.__test_node() >>>> File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched >>>> return func(*args, **keywargs) >>>> File >>>> "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", >>>> line 393, in __test_node >>>> **self.expect_render_template_called_with >>>> File "C:\Python34\Lib\unittest\mock.py", line 777, in >>>> assert_called_with >>>> raise AssertionError(_error_message()) from cause >>>> AssertionError: Expected call: render_template(external_table_id=11, >>>> template_name_or_list='sql/#gpdb#80323#/node.sql') >>>> Actual call: render_template(external_table_id=11, >>>> template_name_or_list='sql/#gpdb#80323#\\node.sql') >>>> >>>> ====================================================================== >>>> FAIL: runTest >>>> (pgadmin.browser.server_groups.servers.databases.external_tables.tests.test_external_tables_view.TestExternalTablesView) >>>> #properties When retrieving the properties of a external table and the >>>> table exists, it return the properties and status 200 >>>> ---------------------------------------------------------------------- >>>> Traceback (most recent call last): >>>> File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched >>>> return func(*args, **keywargs) >>>> File >>>> "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", >>>> line 320, in runTest >>>> self.__test_properties() >>>> File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched >>>> return func(*args, **keywargs) >>>> File >>>> "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", >>>> line 419, in __test_properties >>>> **self.expect_render_template_called_with >>>> File "C:\Python34\Lib\unittest\mock.py", line 777, in >>>> assert_called_with >>>> raise AssertionError(_error_message()) from cause >>>> AssertionError: Expected call: >>>> render_template(template_name_or_list='sql/#gpdb#80323#/get_table_information.sql', >>>> table_oid=11) >>>> Actual call: >>>> render_template(template_name_or_list='sql/#gpdb#80323#\\get_table_information.sql', >>>> table_oid=11) >>>> >>>> ---------------------------------------------------------------------- >>>> Ran 256 tests in 77.123s >>>> >>>> FAILED (failures=7, errors=4, skipped=25) >>>> >>>> ====================================================================== >>>> Test Result Summary >>>> ====================================================================== >>>> >>>> PostgreSQL 9.6: >>>> >>>> 234 tests passed >>>> 3 tests failed: >>>> TestExternalTablesView (#node When retrieving the >>>> information about 1 external table and table does not exist, it return an >>>> error message and status 404, >>>> #node When retrieving the >>>> information about 1 external table and an error happens while executing the >>>> query, it return an internal server error and status 500, >>>> #nodes When retrieving the >>>> nodes and the database has 2 external tables, it return 2 child nodes and >>>> status 200, >>>> #nodes When retrieving the >>>> information about 1 external table and the table exists, it return external >>>> node information and status 200, >>>> #nodes When retrieving the >>>> nodes and an error happens while executing the query, it return an internal >>>> server error and status 500, >>>> #properties When retrieving the >>>> properties of a external table and the table exists, it return the >>>> properties and status 200, >>>> #nodes When retrieving the >>>> nodes and the database does not have external tables, it return no child >>>> nodes and status 200) >>>> ChangePasswordTestCase (TestCase for Changing >>>> Valid_Password) >>>> TestTemplateCreate (When rendering GreenPlum 5.3 >>>> template, when no distribution is present, when no primary key is present, >>>> it returns "DISTRIBUTED RANDOMLY", >>>> When rendering GreenPlum 5.3 >>>> template, when distribution is present, it returns "DISTRIBUTED BY (attr1, >>>> attr2, attr4)", >>>> When rendering GreenPlum 5.3 >>>> template, when no distribution is present, when primary key is present, it >>>> returns "DISTRIBUTED BY (attr_primary_key)") >>>> 19 tests skipped: >>>> ResourceGroupsGetTestCase (Get resource groups) >>>> TableSpaceDeleteTestCase (Check Tablespace Node) >>>> ResourceGroupsDeleteTestCase (Delete resource groups) >>>> SynonymDeleteTestCase (Fetch synonym Node URL) >>>> TestSSLConnection (Test for SSL connection) >>>> PackageAddTestCase (Fetch Package Node URL) >>>> SynonymPutTestCase (Fetch synonym Node URL) >>>> TablespaceGetTestCase (Check Tablespace Node) >>>> SynonymAddTestCase (Default Node URL) >>>> PackagePutTestCase (Fetch Package Node URL) >>>> TableAddTestCase (Create Range partitioned table with 2 >>>> partitions, >>>> Create List partitioned table >>>> with 2 partitions) >>>> PackageGetTestCase (Fetch Package Node URL) >>>> PackageDeleteTestCase (Fetch Package Node URL) >>>> TableSpaceAddTestCase (Check Tablespace Node) >>>> ResourceGroupsAddTestCase (Add resource groups) >>>> SynonymGetTestCase (Fetch synonym Node URL) >>>> ResourceGroupsPutTestCase (Put resource groups) >>>> TableSpaceUpdateTestCase (Check Tablespace Node) >>>> TableUpdateTestCase (Attach partition to existing range >>>> partitioned table, >>>> Detach partition from existing >>>> range partitioned table, >>>> Create partitions of existing >>>> range partitioned table, >>>> Detach partition from existing >>>> list partitioned table, >>>> Create partitions of existing >>>> list partitioned table, >>>> Attach partition to existing >>>> list partitioned table) >>>> >>>> ====================================================================== >>>> >>>> ######## >>>> >>>> >>>> Thanks, >>>> Neel Patel >>>> >>>> On Fri, Mar 2, 2018 at 10:19 PM, Dave Page <dp...@pgadmin.org> wrote: >>>> >>>>> Support for external tables in GPDB. Fixes #3168 >>>>> >>>>> Branch >>>>> ------ >>>>> master >>>>> >>>>> Details >>>>> ------- >>>>> >>>>> https://git.postgresql.org/gitweb?p=pgadmin4.git;a=commitdiff;h=427314cfdfeb96c3a7835eab5a4d638903bc6dc3 >>>>> Author: Joao Pedro De Almeida Pereira <jdealmeidapere...@pivotal.io> >>>>> >>>>> Modified Files >>>>> -------------- >>>>> .../servers/databases/external_tables/__init__.py | 275 +++++++++++++ >>>>> .../databases/external_tables/actions/__init__.py | 0 >>>>> .../external_tables/actions/get_all_nodes.py | 4 + >>>>> .../databases/external_tables/mapping_utils.py | 165 ++++++++ >>>>> .../databases/external_tables/properties.py | 78 ++++ >>>>> .../external_tables/reverse_engineer_ddl.py | 69 ++++ >>>>> .../static/img/coll-external_table.svg | 1 + >>>>> .../external_tables/static/img/external_table.svg | 1 + >>>>> .../templates/sql/gpdb_5.0_plus/create.sql | 60 +++ >>>>> .../templates/sql/gpdb_5.0_plus/get_columns.sql | 12 + >>>>> .../sql/gpdb_5.0_plus/get_table_information.sql | 22 ++ >>>>> .../templates/sql/gpdb_5.0_plus/list.sql | 6 + >>>>> .../templates/sql/gpdb_5.0_plus/node.sql | 5 + >>>>> .../databases/external_tables/tests/__init__.py | 0 >>>>> .../tests/test_external_tables_module.py | 99 +++++ >>>>> .../tests/test_external_tables_view.py | 428 >>>>> +++++++++++++++++++++ >>>>> .../external_tables/tests/test_mapping_utils.py | 375 >>>>> ++++++++++++++++++ >>>>> .../external_tables/tests/test_properties.py | 156 ++++++++ >>>>> .../tests/test_reverse_engineer_ddl.py | 261 +++++++++++++ >>>>> .../tests/test_sql_template_create_integration.py | 0 >>>>> .../templates/table/sql/gpdb_5.0_plus/nodes.sql | 1 + >>>>> web/pgadmin/static/bundle/browser.js | 1 + >>>>> .../databases/external_tables/external_tables.js | 88 +++++ >>>>> .../servers/databases/external_tables/index.js | 18 + >>>>> web/pgadmin/tools/sqleditor/__init__.py | 1 + >>>>> .../external_tables/external_tables_spec.js | 56 +++ >>>>> web/webpack.config.js | 9 + >>>>> web/webpack.shim.js | 3 + >>>>> 28 files changed, 2194 insertions(+) >>>>> >>>>> >>>> >> >