0

I am not able to lift sails version 0.9.9 with postgresql version 0.9.7

Here is the error message that I get

debug: Lowering sails...

/home/mandeep/iqr/thirstt/node_modules/sails-postgresql/lib/query.js:285
      if(self._schema[key].type === 'text') caseSensitive = false;
                          ^
TypeError: Cannot read property 'type' of undefined
  at Object.sql.and (/home/mandeep/iqr/thirstt/node_modules/sails-postgresql/lib/query.js:285:27)
  at /home/mandeep/iqr/thirstt/node_modules/sails-postgresql/lib/query.js:256:19
  at Array.forEach (native)
  at [object Object].Query.where (/home/mandeep/iqr/thirstt/node_modules/sails-postgresql/lib/query.js:195:24)
  at /home/mandeep/iqr/thirstt/node_modules/sails-postgresql/lib/query.js:119:14
  at Array.forEach (native)
  at [object Object].Query._build (/home/mandeep/iqr/thirstt/node_modules/sails-postgresql/lib/query.js:115:32)
  at [object Object].Query.find (/home/mandeep/iqr/thirstt/node_modules/sails-postgresql/lib/query.js:35:21)
  at __FIND__ (/home/mandeep/iqr/thirstt/node_modules/sails-postgresql/lib/adapter.js:362:40)
  at after (/home/mandeep/iqr/thirstt/node_modules/sails-postgresql/lib/adapter.js:506:7)
  at /home/mandeep/iqr/thirstt/node_modules/sails-postgresql/lib/adapter.js:492:7

It was running fine earlier. Not sure what went wrong. I have tried removing node_modules directory and doing a npm install after npm cache clear but still keep getting this error. I cannot upgrade to sails version 0.10 since its quite a big project and upgrade will be a really big effort. How can I fix this issue in the same version ? Any help will be appreciated.

Mandeep Singh
  • 7,674
  • 19
  • 62
  • 104

1 Answers1

1

I figured out the issue. Seems like a sails-postgresql issue to me. I was doing a findOne on a model in config/bootstrap.js and it was failing when there was no record in that table

Here is the part where it fails ( node_modules/sails-postgresql/lib/query.js ):

Query.prototype.operators = function() {

  var self = this;

  var sql = {
    and: function(key, options, comparator) {
      var caseSensitive = true;

      // Check if key is a string
      if(self._schema[key].type === 'text') caseSensitive = false;

      processCriteria.call(self, key, options, '=', caseSensitive);
      self._query += (comparator || ' AND ');
    },

I logged the value of self. When data exists in the table that I queried in bootstrap.js, self looks like this

{ _values: 
   [ 2,
     1,
     'Mon, 29 Sep 2014 09:46:08 GMT',
     'Thu, 06 Nov 2014 08:24:34 GMT' ],
  _paramCount: 5,
  _query: 'UPDATE "cache" SET "val" = $1, "id" = $2, "createdAt" = $3, "updatedAt" = $4 ',
  _schema: 
   { val: { type: 'integer' },
     id: { type: 'integer', primaryKey: true, autoIncrement: true },
     createdAt: { type: 'timestamp with time zone' },
     updatedAt: { type: 'timestamp with time zone' } } 
}

However, when there is no data in the table, then self looks like this

{ _values: [],
  _paramCount: 1,
  _query: 'SELECT * FROM "cache" ',
  _schema: true 
}

And then it accesses self._schema[key].type which raises the error since self._schema is not an object in this case. On inserting data to the table, things got fixed but I believe it's a logical bug in sails-postgresql since it should work fine even if there is no data in the table.

Mandeep Singh
  • 7,674
  • 19
  • 62
  • 104