Subject: patch for issue RM1260 [pgAdmin4]

From: Harshal Dhumal <[email-masked]>
Date: Wed, 6 Jul 2016 17:30:22 +0530

Hi,

PFA patch for issue RM1260.

Changes: Issue wasn't related to foreign table but was due the Select2
control. Now I have improved select2 control to handle null value in
multi-select mode. Initial it was returning "null" instead it should return
[] (empty array).

-- 
*Harshal Dhumal*
*Software Engineer*

EnterpriseDB India: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/js/foreign_tables.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/js/foreign_tables.js
index a4b5a27..26418a6 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/js/foreign_tables.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/js/foreign_tables.js
@@ -266,12 +266,6 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
   */
 
   var NodeAjaxOptionsMultipleControl = Backform.NodeAjaxOptionsMultipleControl = Backform.NodeAjaxOptionsControl.extend({
-    template: _.template([
-      '<label class="<%=Backform.controlLabelClassName%>"><%=label%></label>',
-      '<div class="<%=Backform.controlsClassName%> <%=extraClasses.join(\' \')%>">',
-      '  <select class="pgadmin-node-select form-control" name="<%=name%>" style="width:100%;" value=<%-value%> <%=disabled ? "disabled" : ""%> <%=required ? "required" : ""%> >',
-      '  </select>',
-      '</div>'].join("\n")),
     defaults: _.extend(
       {}, Backform.NodeAjaxOptionsControl.prototype.defaults,
       {
@@ -331,11 +325,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
         this.$el.addClass(Backform.hiddenClassname);
         } else {
         var opts = _.extend(
-          {}, this.defaults.select2, data.select2,
-          {
-            'data': data.options
-          });
-        this.$el.find("select").select2(opts).val(data.rawValue).trigger("change");
+          {}, this.defaults.select2, data.select2);
         this.updateInvalid();
         }
       }
@@ -370,7 +360,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
 
       // Remove Columns if inherit option is deselected from the combobox
       if(_.size(value) < _.size(inherits)) {
-        var dif =  _.difference(inherits, JSON.parse(value));
+        var dif =  _.difference(inherits, value);
         var rmv_columns = columns.where({inheritedid: parseInt(dif[0])});
         columns.remove(rmv_columns);
       }
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/9.5_plus/get_tables.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/9.5_plus/get_tables.sql
index 83445a2..1bb501e 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/9.5_plus/get_tables.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/9.5_plus/get_tables.sql
@@ -9,7 +9,7 @@ WHERE
 
 {% else %}
 SELECT
-    c.oid AS id, quote_ident(n.nspname) || '.' || quote_ident(c.relname) as text
+    c.oid AS value, quote_ident(n.nspname) || '.' || quote_ident(c.relname) as label
 FROM
     pg_class c, pg_namespace n
 WHERE
@@ -19,4 +19,4 @@ WHERE
 {% endif %}
 ORDER BY
     n.nspname, c.relname;
-{% endif %}
+{% endif %}
\ No newline at end of file
diff --git a/web/pgadmin/static/js/backform.pgadmin.js b/web/pgadmin/static/js/backform.pgadmin.js
index 973b60b..fb6c51f 100644
--- a/web/pgadmin/static/js/backform.pgadmin.js
+++ b/web/pgadmin/static/js/backform.pgadmin.js
@@ -1793,7 +1793,11 @@
       if (_.isArray(formattedData)) {
         return _.map(formattedData, decodeURIComponent);
       } else {
-        return decodeURIComponent(formattedData);
+        if(!_.isNull(formattedData) && !_.isUndefined(formattedData)) {
+          return decodeURIComponent(formattedData);
+        } else {
+          return null;
+        }
       }
     }
   });
@@ -1904,9 +1908,15 @@
       return this;
     },
     getValueFromDOM: function() {
-      return Backform.SelectControl.prototype.getValueFromDOM.apply(
-        this, arguments
-      );
+      var val = Backform.SelectControl.prototype.getValueFromDOM.apply(
+                  this, arguments
+                ),
+        select2Opts = _.extend({}, this.field.get("select2") || this.defaults.select2);
+
+      if (select2Opts.multiple && val == null) {
+        return [];
+      }
+      return val;
     }
   });

-- 
Sent via pgadmin-hackers mailing list ([email-masked])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers

---

From: Harshal Dhumal <[email-masked]>
Date: Thu, 7 Jul 2016 12:04:53 +0530

Hi,
Please ignore this patch as this has some minor issue. I'll sent updated
one.

-- 
*Harshal Dhumal*
*Software Engineer*

---

From: Harshal Dhumal <[email-masked]>
Date: Thu, 7 Jul 2016 12:12:00 +0530

Hi,

PFA updated patch for issue RM1260

-- 
*Harshal Dhumal*
*Software Engineer*

index a4b5a27..3af6c61 100644
 
   var NodeAjaxOptionsMultipleControl = Backform.NodeAjaxOptionsMultipleControl = Backform.NodeAjaxOptionsControl.extend({
-    template: _.template([
-      '<label class="<%=Backform.controlLabelClassName%>"><%=label%></label>',
-      '<div class="<%=Backform.controlsClassName%> <%=extraClasses.join(\' \')%>">',
-      '  <select class="pgadmin-node-select form-control" name="<%=name%>" style="width:100%;" value=<%-value%> <%=disabled ? "disabled" : ""%> <%=required ? "required" : ""%> >',
-      '  </select>',
-      '</div>'].join("\n")),
     defaults: _.extend(
       {}, Backform.NodeAjaxOptionsControl.prototype.defaults,
       {
@@ -335,7 +329,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
           {
             'data': data.options
           });
-        this.$el.find("select").select2(opts).val(data.rawValue).trigger("change");
+        this.$el.find("select").select2(opts);
         this.updateInvalid();
         }
       }
@@ -370,7 +364,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {

 {% else %}
 SELECT

---

From: Ashesh Vashi <[email-masked]>
Date: Thu, 7 Jul 2016 12:13:01 +0530

Hi Harshal,

Can you please explain - what was missing in the last patch?

--

Thanks & Regards,

Ashesh Vashi
EnterpriseDB INDIA: Enterprise PostgreSQL Company
<http://www.enterprisedb.com>

*http://www.linkedin.com/in/asheshvashi*
<http://www.linkedin.com/in/asheshvashi>

---

From: Harshal Dhumal <[email-masked]>
Date: Thu, 7 Jul 2016 12:20:22 +0530

Hi,

By mistake I deleted a line which was not supposed to be deleted, and that
line of code was initialization of select2.

-- 
*Harshal Dhumal*
*Software Engineer*

On Thu, Jul 7, 2016 at 12:13 PM, Ashesh Vashi <[email-masked]
> wrote:

---

From: Dave Page <[email-masked]>
Date: Thu, 7 Jul 2016 10:03:29 +0100

Ashesh, can you review/commit please?

Thanks.

On Thu, Jul 7, 2016 at 7:50 AM, Harshal Dhumal <
[email-masked]> wrote:

> On Thu, Jul 7, 2016 at 12:13 PM, Ashesh Vashi <
> [email-masked]> wrote:
>
>> Hi Harshal,
>>
>>>> Please ignore this patch as this has some minor issue. I'll sent
>>>> updated one.
>>>>
>>>> --
>>>> *Harshal Dhumal*
>>>> *Software Engineer*
>>>>

-- 
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

---

From: Ashesh Vashi <[email-masked]>
Date: Thu, 7 Jul 2016 17:08:49 +0530

Sure - I will do.

--

Thanks & Regards,

Ashesh Vashi

On Thu, Jul 7, 2016 at 2:33 PM, Dave Page <[email-masked]> wrote:

>> By mistake I deleted a line which was not supposed to be deleted, and
>> that line of code was initialization of select2.
>>
>> --
>> *Harshal Dhumal*
>> *Software Engineer*
>>
>>>>>> Changes: Issue wasn't related to foreign table but was due the
>>>>>> Select2 control. Now I have improved select2 control to handle null value
>>>>>> in multi-select mode. Initial it was returning "null" instead it should
>>>>>> return [] (empty array).
>>>>>>
>>>>>>
>>>>>> --
>>>>>> *Harshal Dhumal*
>>>>>> *Software Engineer*
>>>>>>

---

From: Harshal Dhumal <[email-masked]>
Date: Wed, 27 Jul 2016 15:49:01 +0530

Hi,

PFA updated patch for RM1260.

In addition to RM1260 issue I have added following changes in this patch.
1] datamodel.js: Added option check against undefined.
2] foreign key: fixed first empty option issue.

-- 
*Harshal Dhumal*
*Software Engineer*

---

From: Harshal Dhumal <[email-masked]>
Date: Wed, 27 Jul 2016 15:54:14 +0530

and patch file

-- 
*Harshal Dhumal*
*Software Engineer*

On Wed, Jul 27, 2016 at 3:49 PM, Harshal Dhumal <
[email-masked]> wrote:

> On Thu, Jul 7, 2016 at 5:08 PM, Ashesh Vashi <

 
 {% else %}
 SELECT
-    c.oid AS id, quote_ident(n.nspname) || '.' || quote_ident(c.relname) as text
+    c.oid AS value, quote_ident(n.nspname) || '.' || quote_ident(c.relname) as label
 FROM
     pg_class c, pg_namespace n
 WHERE
@@ -19,4 +19,4 @@ WHERE
 {% endif %}
 ORDER BY
     n.nspname, c.relname;
-{% endif %}
+{% endif %}
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/templates/foreign_key/js/foreign_key.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/templates/foreign_key/js/foreign_key.js
index 3ffa6ef..d7c947f 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/templates/foreign_key/js/foreign_key.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/templates/foreign_key/js/foreign_key.js
@@ -21,6 +21,7 @@ function($, _, S, pgAdmin, pgBrowser, Alertify) {
       headerSelectControlTemplate =  _.template([
                               '<div class="<%=Backform.controlsClassName%> <%=extraClasses.join(\' \')%>">',
                               '  <select class="pgadmin-node-select form-control" name="<%=name%>" style="width:100%;" value="<%-value%>" <%=disabled ? "disabled" : ""%> <%=required ? "required" : ""%> >',
+                              '    <%=select2.first_empty ? " <option></option>" : ""%>',
                               '    <% for (var i=0; i < options.length; i++) { %>',
                               '    <% var option = options[i]; %>',
                               '    <option <% if (option.image) { %> data-image=<%= option.image %> <% } %> value=<%= formatter.fromRaw(option.value) %> <%=option.value === rawValue ? "selected=\'selected\'" : "" %>><%-option.label%></option>',
@@ -134,8 +135,9 @@ function($, _, S, pgAdmin, pgBrowser, Alertify) {
           }),
           select2: {
             allowClear: false, width: 'style',
-            placeholder: 'Select column'
-          }, first_empty: !_.isUndefined(self.model.get('oid')),
+            placeholder: '{{ _('Select column') }}',
+            first_empty: !_.isUndefined(self.model.get('oid'))
+          },
           version_compatible: self.field.get('version_compatible'),
           disabled: function(m) {
             return !_.isUndefined(self.model.get('oid'));
@@ -234,10 +236,11 @@ function($, _, S, pgAdmin, pgBrowser, Alertify) {
               Backform.Select2Control.prototype.render.apply(this, arguments);
               return this;
             }
-          }), url: 'get_columns', first_empty: true,
+          }), url: 'get_columns',
           select2: {
+            allowClear: false,
             width: "style",
-            placeholder: 'Select column',
+            placeholder: '{{ _('Select column') }}',
             templateResult: formatNode,
             templateSelection: formatNode
           },
diff --git a/web/pgadmin/browser/static/js/datamodel.js b/web/pgadmin/browser/static/js/datamodel.js
index 8cb7034..7b379ce 100644
--- a/web/pgadmin/browser/static/js/datamodel.js
+++ b/web/pgadmin/browser/static/js/datamodel.js
@@ -124,7 +124,7 @@ function(_, pgAdmin, $, Backbone) {
         var self = this;
         self._previous_key_values = {};
 
-        if ('on_server' in options && options.on_server) {
+        if (!_.isUndefined(options) && 'on_server' in options && options.on_server) {
           self.on_server = true;
         }
 
index 2530db9..e27ea2d 100644
@@ -1804,7 +1804,11 @@
@@ -1915,9 +1919,15 @@

---

From: Ashesh Vashi <[email-masked]>
Date: Wed, 27 Jul 2016 18:53:12 +0530

Hi Harshal,

During testing, I found that create, and delete operation on foreign table
is not working.
Foreign table node uses, it's own version of Select2 Control, which should
have used maximum functionalities from the original NodeAjaxOptionsControl
for consistency reason.
Hence - I have made the changes.

Can you please take a look at the create, and delete operations, and submit
combined patch for all those problems?

--

Thanks & Regards,

Ashesh Vashi

---

From: Harshal Dhumal <[email-masked]>
Date: Wed, 27 Jul 2016 19:37:34 +0530

Hi,

PFA updated patch for RM1260 (V4).

Fixed create and delete operations for foreign table.

-- 
*Harshal Dhumal*
*Software Engineer*

On Wed, Jul 27, 2016 at 6:53 PM, Ashesh Vashi <[email-masked]

> Can you please take a look at the create, and delete operations, and
> submit combined patch for all those problems?
>
> --
>
> Thanks & Regards,
>
> Ashesh Vashi
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/__init__.py
index 2665b62..98182fc 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/__init__.py
@@ -668,7 +668,8 @@ AND relkind != 'c'))"""
             if not status:
                 return internal_server_error(errormsg=res)
 
-            foid, scid = res['rows'][0]
+            foid = res['rows'][0]['oid']
+            scid = res['rows'][0]['scid']
 
             return jsonify(
                 node=self.blueprint.generate_browser_node(
@@ -718,7 +719,8 @@ AND relkind != 'c'))"""
                     )
                 )
 
-            name, basensp = res['rows'][0]
+            name =  res['rows'][0]['name']
+            basensp = res['rows'][0]['basensp']
 
             SQL = render_template("/".join([self.template_path,
                                             'delete.sql']),
@@ -1103,13 +1105,6 @@ AND relkind != 'c'))"""
         if cols and 'rows' in cols:
             data['columns'] = cols['rows']
 
-        data['strcolumn'] = ''
-        str_cols = []
-        if 'columns' in data:
-            for c in data['columns']:
-                str_cols.append(c['strcolumn'])
-            data['strcolumn'] = ', '.join(str_cols)
-
         # Get Inherited table names from their OID
         if inherits:
             if 'inherits' in data and data['inherits']:
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/js/foreign_tables.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/js/foreign_tables.js
index a4b5a27..230b6c2 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/js/foreign_tables.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/js/foreign_tables.js
@@ -241,22 +241,6 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
     toJSON: Backbone.Model.prototype.toJSON
   });
 
-  var formatNode = function(opt) {
-    if (!opt.id) {
-      return opt.text;
-    }
-
-    var optimage = $(opt.element).data('image');
-
-    if(!optimage){
-      return opt.text;
-    } else {
-      return $(
-          '<span><span class="wcTabIcon ' + optimage + '"/>' + opt.text + '</span>'
-          );
-    }
-  };
-
 
   /* NodeAjaxOptionsMultipleControl is for multiple selection of Combobox.
   *  This control is used to select Multiple Parent Tables to be inherited.
@@ -264,83 +248,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
   *  To populates the column, it calls the server and fetch the columns data
   *  for the selected table.
   */
-
-  var NodeAjaxOptionsMultipleControl = Backform.NodeAjaxOptionsMultipleControl = Backform.NodeAjaxOptionsControl.extend({
-    template: _.template([
-      '<label class="<%=Backform.controlLabelClassName%>"><%=label%></label>',
-      '<div class="<%=Backform.controlsClassName%> <%=extraClasses.join(\' \')%>">',
-      '  <select class="pgadmin-node-select form-control" name="<%=name%>" style="width:100%;" value=<%-value%> <%=disabled ? "disabled" : ""%> <%=required ? "required" : ""%> >',
-      '  </select>',
-      '</div>'].join("\n")),
-    defaults: _.extend(
-      {}, Backform.NodeAjaxOptionsControl.prototype.defaults,
-      {
-        select2: {
-          allowClear: true,
-          placeholder: 'Select from the list',
-          width: 'style',
-          templateResult: formatNode,
-          templateSelection: formatNode
-        }
-      }),
-    render: function() {
-      var field = _.defaults(this.field.toJSON(), this.defaults),
-        attributes = this.model.toJSON(),
-        attrArr = field.name.split('.'),
-        name = attrArr.shift(),
-        path = attrArr.join('.'),
-        rawValue = this.keyPathAccessor(attributes[name], path),
-        data = _.extend(field, {
-          rawValue: rawValue,
-          value: this.formatter.fromRaw(rawValue, this.model),
-          attributes: attributes,
-          formatter: this.formatter
-        }),
-        evalF = function(f, d, m) {
-          return (_.isFunction(f) ? !!f.apply(d, [m]) : !!f);
-        };
-
-      // Evaluate the disabled, visible, and required option
-      _.extend(data, {
-        disabled: evalF(data.disabled, data, this.model),
-        visible:  evalF(data.visible, data, this.model),
-        required: evalF(data.required, data, this.model)
-      });
-
-      if (field.node_info.server.version < field.min_version) {
-        field.version_compatible = false
-        return this;
-      }
-      else {
-        // Evaluation the options
-        if (_.isFunction(data.options)) {
-        try {
-          data.options = data.options.apply(this)
-        } catch(e) {
-          // Do nothing
-          data.options = []
-          this.model.trigger('pgadmin-view:transform:error', self.model, self.field, e);
-        }
-        }
-
-        // Clean up first
-        this.$el.removeClass(Backform.hiddenClassname);
-        this.$el.html(this.template(data)).addClass(field.name);
-
-        if (!data.visible) {
-        this.$el.addClass(Backform.hiddenClassname);
-        } else {
-        var opts = _.extend(
-          {}, this.defaults.select2, data.select2,
-          {
-            'data': data.options
-          });
-        this.$el.find("select").select2(opts).val(data.rawValue).trigger("change");
-        this.updateInvalid();
-        }
-      }
-      return this;
-    },
+  var NodeAjaxOptionsMultipleControl = Backform.NodeAjaxOptionsControl.extend({
     onChange: function(e) {
       var model = this.model,
           $el = $(e.target),
@@ -370,7 +278,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
 
       // Remove Columns if inherit option is deselected from the combobox
       if(_.size(value) < _.size(inherits)) {
-        var dif =  _.difference(inherits, JSON.parse(value));
+        var dif =  _.difference(inherits, value);
         var rmv_columns = columns.where({inheritedid: parseInt(dif[0])});
         columns.remove(rmv_columns);
       }
@@ -600,7 +508,6 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
           basensp: undefined,
           description: undefined,
           ftsrvname: undefined,
-          strcolumn: undefined,
           strftoptions: undefined,
           inherits: [],
           columns: [],
@@ -632,7 +539,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
           type: 'text', group: 'Definition', url: 'get_foreign_servers', disabled: function(m) { return !m.isNew(); }
         },{
           id: 'inherits', label:'{{ _('Inherits') }}', group: 'Definition',
-          type: 'array', min_version: 90500, control: 'node-ajax-options-multiple',
+          type: 'array', min_version: 90500, control: NodeAjaxOptionsMultipleControl,
           url: 'get_tables', select2: {multiple: true},
           'cache_level': 'database',
           transform: function(d, self){
@@ -646,9 +553,6 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
             return d;
           }
         },{
-          id: 'strcolumn', label:'{{ _('Columns') }}', cell: 'string', group: 'Definition',
-          type: 'text', min_version: 90500, mode: ['properties']
-        },{
           id: 'columns', label:'{{ _('Columns') }}', cell: 'string',
           type: 'collection', group: 'Columns', visible: false, mode: ['edit', 'create'],
           model: ColumnsModel, canAdd: true, canDelete: true, canEdit: true,
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/9.1_plus/get_columns.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/9.1_plus/get_columns.sql
index 4bf5e17..0733a3c 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/9.1_plus/get_columns.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/9.1_plus/get_columns.sql
@@ -1,13 +1,7 @@
 SELECT
     attname, attndims, atttypmod, format_type(t.oid,NULL) AS datatype,
     format_type(t.oid, att.atttypmod) AS fulltype, attnotnull, attnum,
-    (SELECT COUNT(1) from pg_type t2 WHERE t2.typname=t.typname) > 1 AS isdup,
-    (
-        attname || ' ' || format_type(t.oid, att.atttypmod) || ' ' ||
-        (CASE WHEN attnotnull='true'
-        THEN 'NOT NULL' ELSE 'NULL'
-        END)
-    ) as strcolumn
+    (SELECT COUNT(1) from pg_type t2 WHERE t2.typname=t.typname) > 1 AS isdup
 FROM
     pg_attribute att
 JOIN
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/9.2_plus/get_columns.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/9.2_plus/get_columns.sql
index 4270058..ab5ee75 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/9.2_plus/get_columns.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/9.2_plus/get_columns.sql
@@ -4,25 +4,7 @@ SELECT
     CASE WHEN length(cn.nspname) > 0 AND length(cl.collname) > 0 THEN
     concat(cn.nspname, '."', cl.collname,'"') ELSE '' END AS collname,
     (SELECT COUNT(1) from pg_type t2 WHERE t2.typname=t.typname) > 1 AS isdup,
-    pg_catalog.pg_get_expr(def.adbin, def.adrelid) AS typdefault,
-    (
-        attname || ' ' || format_type(t.oid, att.atttypmod) || ' ' ||
-        (
-            CASE WHEN array_length(attfdwoptions, 1)>0
-            THEN concat('OPTIONS (', array_to_string(attfdwoptions, ', '), ')') ELSE ''
-            END
-        ) || ' ' ||
-        (
-            CASE WHEN attnotnull='true'
-            THEN 'NOT NULL' ELSE 'NULL'
-            END
-        ) || ' ' ||
-        (
-            CASE WHEN pg_catalog.pg_get_expr(def.adbin, def.adrelid)<>''
-            THEN 'DEFAULT ' || pg_catalog.pg_get_expr(def.adbin, def.adrelid)
-            ELSE '' END
-        )
-    ) as strcolumn
+    pg_catalog.pg_get_expr(def.adbin, def.adrelid) AS typdefault
 FROM
     pg_attribute att
 JOIN
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/9.5_plus/get_columns.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/9.5_plus/get_columns.sql
index 64d6d13..3417208 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/9.5_plus/get_columns.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/9.5_plus/get_columns.sql
@@ -20,25 +20,6 @@ SELECT INH.inheritedfrom, INH.inheritedid, att.attoptions, attfdwoptions,
     concat(cn.nspname, '."', cl.collname,'"')
     ELSE '' END AS collname,
     pg_catalog.pg_get_expr(def.adbin, def.adrelid) AS typdefault,
-    (
-        att.attname || ' ' || format_type(t.oid, att.atttypmod) || ' ' ||
-        (
-            CASE WHEN array_length(attfdwoptions, 1)>0
-            THEN concat('OPTIONS (', array_to_string(attfdwoptions, ', '), ')') ELSE ''
-            END
-        ) || ' ' ||
-        (
-            CASE WHEN attnotnull='true'
-            THEN 'NOT NULL' ELSE 'NULL'
-            END
-        ) || ' ' ||
-        (
-            CASE WHEN pg_catalog.pg_get_expr(def.adbin, def.adrelid)<>''
-            THEN 'DEFAULT ' || pg_catalog.pg_get_expr(def.adbin, def.adrelid)
-            ELSE '' END
-        )
-    ) as strcolumn,
-
     (SELECT COUNT(1) from pg_type t2 WHERE t2.typname=t.typname) > 1 AS isdup
 FROM
     pg_attribute att
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/9.5_plus/get_tables.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/9.5_plus/get_tables.sql
index 83445a2..38f9ce4 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/9.5_plus/get_tables.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/9.5_plus/get_tables.sql
@@ -9,7 +9,7 @@ WHERE
 
 {% else %}
 SELECT

---

From: Dave Page <[email-masked]>
Date: Wed, 27 Jul 2016 15:11:24 +0100

Ashesh; please review and commit this.

Thanks.

On Wed, Jul 27, 2016 at 3:07 PM, Harshal Dhumal <
[email-masked]> wrote:

> On Wed, Jul 27, 2016 at 6:53 PM, Ashesh Vashi <
>> During testing, I found that create, and delete operation on foreign
>> table is not working.
>> Foreign table node uses, it's own version of Select2 Control, which
>> should have used maximum functionalities from the original
>> NodeAjaxOptionsControl for consistency reason.
>>>>>>> By mistake I deleted a line which was not supposed to be deleted,
>>>>>>> and that line of code was initialization of select2.
>>>>>>>
>>>>>>> --
>>>>>>> *Harshal Dhumal*
>>>>>>> *Software Engineer*
>>>>>>>

---

From: Ashesh Vashi <[email-masked]>
Date: Tue, 2 Aug 2016 09:39:19 +0530

Thanks - committed!

--

Thanks & Regards,

Ashesh Vashi